Некоторые SAS процедуры имеют возможность непосредствнно контролировать количество ядер процессора.
Так например в SAS 9.3 это процедуры:
В SAS 9.4 этот перечень значительно расширился:
Количество ядер процессора можно устанавливать с помощью с помощью опции cpucount. Далее напосредственно в процедуре применять требуемое количество с помощью опции threads | nothreads.
Тест производительности рассмотрим на примере PROC SORT:
Для этого проведем три теста:
Сгенерируем тестовые данные для дальнейшего использования:
Результат:
Результат 6 минут 19 секунд:
Резултат 2 мин 49 секунд:
Результат 2 минуты 3 секунды:
Таким образом на примерах рассмотрели влияние колличества ядер процессора на скорость обработки данных. Можно сдалать вывод что включение параллельной обработки существенно повлияло на скорость, хотя дальнейшее увеличения ядер не оказало сильного влияния и для ускореения нужно использовать другие методы оптимизации.
Так например в SAS 9.3 это процедуры:
- SORT
- MEANS
В SAS 9.4 этот перечень значительно расширился:
- MEANS
- REPORT
- SORT
- SUMMARY
- TABULATE
- SQL
Количество ядер процессора можно устанавливать с помощью с помощью опции cpucount. Далее напосредственно в процедуре применять требуемое количество с помощью опции threads | nothreads.
Тест производительности рассмотрим на примере 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
Таким образом на примерах рассмотрели влияние колличества ядер процессора на скорость обработки данных. Можно сдалать вывод что включение параллельной обработки существенно повлияло на скорость, хотя дальнейшее увеличения ядер не оказало сильного влияния и для ускореения нужно использовать другие методы оптимизации.
Bessnov
Автор, за полезную опцию спасибо!
А вот тест3 и вывод сильно некорректны.
На каком оборудовании проводились тесты?
Сколько там процессоров?
А может быть всё «упёрлось» в дисковую подсистему или память?