SAS 9.4. The Future is coming. Threads.

Всем добрый день!

Сегодня хотелось бы заглянуть в будущее и посмотреть что нас ждет через год или два.

А ждет нас конечно же еще один болезненный переход на новую версию SAS, а именно на 9.4 (ну конечно же если вы уже с 9.2 перешли на 9.3)

Честно говоря очень много изменений случилось в новой версии SAS, чтобы об всем рассказать и книги не хватит. Я бы даже сказал произошла некая небольшая революция. Можно было бы даже назвать версию сразу 10, но в SAS Institute видимо посчитали, что еще рано.

Ну так о новшествах: В SAS 9.4 появился новый язык DS2. Чем-то он может напоминать объектно-ориентированный, но не дотягивает до него. Однако обычные возможности Data Step сильно расширились. И видимо многим придется заново переучиваться или сильно доучиваться, чтобы начать писать свои программы на языке DS2. Я думаю что до этого пройдет еще не менее 2-3 лет. Как показывает практика от запада мы отстаем на 2 года, а там еще не начали во всю использовать этот язык.

И все же сегодня затронем тему параллельных вычислений. Как же все мы мечтали распараллелить наш data step последовательный код (по крайней мере я очень давно мечтал это сделать :)
И вот это свершилось теперь мы может распараллеливать наши вычисления.

Примеры:

Для начала создадим тестовую таблицу с 10 000 000 записей.


















Затем создаем THREAD:
























Теперь будет делать подсчет всех чисел от 1 до 10 000 000 в один поток:





















Мы видим, что real_time практически идентичен cpu time и составляет почти 28 секунд.

Теперь выполним ту же задачу только в 8 потоков:

















Из лога можно видеть, что реальное время работы программы уменьшилось до 7 секунд. А также работа cpu выросла до 50 секунд.


Теперь давайте решим эту задачу с помощью нашего обычного data step кода:















Мы видим, что результат практически идентичен работе нашей программы в один поток.


Ниже привожу результаты выполнения наших экспериментов:

Таблица T1 (формировалась в один поток):





Таблица Т8 (формировалась в 8 потоков):











И табличка которая получилась через data step код:






В общем и целом результат везде одинаков: 50 000 005 000 000 (сумма всех чисел от 1 до 10 миллионов).


P.S.
При написании статьи были использованы следующие материалы:


Надеюсь данная статья была полезна.

С уважением, 
Николай.


Ярлыки: ,