Хабрахабр

SAS BASE процедуры с непосредствнным контролем количества ядер процессора

Некоторые SAS процедуры имеют возможность непосредствнно контролировать количество ядер процессора.

3 это процедуры:
Так например в SAS 9.

  • SORT
  • MEANS

В SAS 9.4 этот перечень значительно расширился:

  • MEANS
  • REPORT
  • SORT
  • SUMMARY
  • TABULATE
  • SQL

Далее напосредственно в процедуре применять требуемое количество с помощью опции threads | nothreads. Количество ядер процессора можно устанавливать с помощью с помощью опции cpucount.

Тест производительности рассмотрим на примере PROC SORT:
Для этого проведем три теста:

  • Моно режим
  • С двумя ядрами процессора
  • С максимальным числом ядер

Подготовка

Сгенерируем тестовые данные для дальнейшего использования:

%let anzahl = 10000000;
data work.test; do i = 1 to &anzahl.; x = 10 * ranuni(1234); y = 1 + 2 * sqrt(10 * ranuni(1234)) + .5 * rannor(5678); s = y + round(rand('uniform'), 1.0); output; end;
RUN;

Результат:

NOTE: THE DATA SET WORK.TEST HAS 100000000 OBSERVATIONS AND 4 VARIABLES.
NOTE: COMPRESSING DATA SET WORK.TEST INCREASED SIZE BY 74.87 PERCENT. COMPRESSED IS 691191 PAGES; UN-COMPRESSED WOULD REQUIRE 395258 PAGES.
NOTE: DATA STATEMENT USED (TOTAL PROCESS TIME): REAL TIME 1:16.46 USER CPU TIME 1:02.09 SYSTEM CPU TIME 14.11 SECONDS MEMORY 297.09K OS MEMORY 6696.00K TIMESTAMP 05/09/2018 11:33:27 AM PAGE FAULTS 0 PAGE RECLAIMS 0 PAGE SWAPS 0 VOLUNTARY CONTEXT SWITCHES 84 INVOLUNTARY CONTEXT SWITCHES 8106 BLOCK INPUT OPERATIONS 0 BLOCK OUTPUT OPERATIONS 0

Тест 1 (Без многоядерности)

proc sort data = work.test out = work.test_str nothreads; by x y s; run;

Результат 6 минут 19 секунд:

NOTE: There were 100000000 observations read from the data set WORK.TEST.
NOTE: The data set WORK.TEST_STR has 100000000 observations and 4 variables.
NOTE: Compressing data set WORK.TEST_STR increased size by 74.87 percent. Compressed is 691191 pages; un-compressed would require 395258 pages.
NOTE: PROCEDURE SORT used (Total process time): real time 6:19.21 user cpu time 5:25.75 system cpu time 52.98 seconds memory 7067869.50k OS Memory 7075500.00k Timestamp 05/09/2018 11:48:58 AM Page Faults 0 Page Reclaims 0 Page Swaps 0 Voluntary Context Switches 3132 Involuntary Context Switches 13769 Block Input Operations 0 Block Output Operations 0

Тест 2 (С использованием 2 ядер процессора)

/* Set the threads option and number of CPU’s that SAS will use */
options threads cpucount=2; /* PROC OPTIONS will display the options and used CPUCORES */
proc options group=performance; run; proc sort data = work.test out = work.test_str threads; by x y s;
run;

Резултат 2 мин 49 секунд:

NOTE: There were 100000000 observations read from the data set WORK.TEST.
NOTE: The data set WORK.TEST_STR has 100000000 observations and 4 variables.
NOTE: Compressing data set WORK.TEST_STR increased size by 74.87 percent. Compressed is 691191 pages; un-compressed would require 395258 pages.
NOTE: PROCEDURE SORT used (Total process time): real time 2:49.20 user cpu time 5:07.38 system cpu time 1:05.13 memory 8628050.15k OS Memory 8636632.00k Timestamp 05/09/2018 12:05:47 PM Page Faults 0 Page Reclaims 0 Page Swaps 0 Voluntary Context Switches 12985 Involuntary Context Switches 22069 Block Input Operations 0 Block Output Operations 0

Тест 3 (Максимально допустимое количество ядер)

/* Set the threads option and number of CPU’s that SAS will use */
options threads cpucount=ACTUAL; /* PROC OPTIONS will display the options and used CPUCORES */
proc options group=performance; run; proc sort data = work.test out = work.test_str threads; by x y s;
run;

Резултат 2 минуты 3 секунды:

NOTE: There were 100000000 observations read from the data set WORK.TEST.
NOTE: The data set WORK.TEST_STR has 100000000 observations and 4 variables.
NOTE: Compressing data set WORK.TEST_STR increased size by 74.87 percent. Compressed is 691191 pages; un-compressed would require 395258 pages.
NOTE: PROCEDURE SORT used (Total process time): real time 2:03.55 user cpu time 4:07.55 system cpu time 43.94 seconds memory 8634428.25k OS Memory 8642784.00k Timestamp 05/09/2018 12:09:37 PM Page Faults 0 Page Reclaims 0 Page Swaps 0 Voluntary Context Switches 20068 Involuntary Context Switches 12946 Block Input Operations 0 Block Output Operations 0

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

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть