Хабрахабр

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

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

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

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

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

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

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