Журнал LinuxFormat - перейти на главную

LXF163: Скорость компьютера

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(Сис­тем­ные тре­бо­вания)
(За­пуск тес­та)
 
(не показаны 12 промежуточных версий 1 участника)
Строка 44: Строка 44:
 
  #sudo apt-get install gcc-4.4 cpp-4.4
 
  #sudo apt-get install gcc-4.4 cpp-4.4
  
 +
{{Врезка|left|Заголовок=Скорая помощь |Ширина=10%|Содержание=BSMBench мож­но за­пус­тить в одно­про­цес­сор­ном ре­жи­ме: ском­пи­ли­руй­те его с шаб­ло­ном generic-1.cfg и вос­поль­зуй­тесь на­бо­ром вход­ных фай­лов из 1.bsmbench. }}
 
Те­перь мож­но пе­рей­ти к ком­пи­ля­ции BSMBench. По­следние вер­сии ис­ходников мож­но за­гру­зить из github (зай­ди­те на https://github.com/blucini/BSMBench и щелкните по ссыл­ке ZIP), а по­следний ста­биль­ный ре­лиз – с www.bsmbench.org. На­ши ука­зания долж­ны ра­бо­тать для по­следней вер­сии – в слу­чае со­мнений за­гляните в файл README. Пред­по­ло­жим, что файл с ис­ходника­ми, ко­то­рый вы ска­ча­ли, на­зы­ва­ет­ся bsmbench.zip; для его рас­па­ков­ки ско­ман­дуй­те тер­ми­на­лу
 
Те­перь мож­но пе­рей­ти к ком­пи­ля­ции BSMBench. По­следние вер­сии ис­ходников мож­но за­гру­зить из github (зай­ди­те на https://github.com/blucini/BSMBench и щелкните по ссыл­ке ZIP), а по­следний ста­биль­ный ре­лиз – с www.bsmbench.org. На­ши ука­зания долж­ны ра­бо­тать для по­следней вер­сии – в слу­чае со­мнений за­гляните в файл README. Пред­по­ло­жим, что файл с ис­ходника­ми, ко­то­рый вы ска­ча­ли, на­зы­ва­ет­ся bsmbench.zip; для его рас­па­ков­ки ско­ман­дуй­те тер­ми­на­лу
  
Строка 54: Строка 55:
 
Это кор­не­вой ка­та­лог тес­та. За­тем ском­пи­ли­ру­ем тест:
 
Это кор­не­вой ка­та­лог тес­та. За­тем ском­пи­ли­ру­ем тест:
  
#export OMPI_CC=/usr/bin/gcc-4.4 && export OMPI_CXX=/usr/bin/gcc-4.4 && ./make.sh machine-config/generic.cfg
+
#export OMPI_CC=/usr/bin/gcc-4.4 && export OMPI_CXX=/usr/bin/gcc-4.4 && ./make.sh machine-config/generic.cfg
  
 
Две ко­ман­ды export ве­лят OpenMP ис­поль­зо­вать вер­сию GCC 4.4 вме­сто вер­сии по умол­чанию 4.6. Файл generic.cfg в ка­та­ло­ге machine-config – об­щий файл шаб­ло­на, необ­хо­ди­мый для соз­дания Makefile, ко­то­рый, в свою оче­редь, необ­хо­дим для соз­дания ис­пол­няе­мо­го фай­ла. Строк в фай­ле generic.cfg немно­го:
 
Две ко­ман­ды export ве­лят OpenMP ис­поль­зо­вать вер­сию GCC 4.4 вме­сто вер­сии по умол­чанию 4.6. Файл generic.cfg в ка­та­ло­ге machine-config – об­щий файл шаб­ло­на, необ­хо­ди­мый для соз­дания Makefile, ко­то­рый, в свою оче­редь, необ­хо­дим для соз­дания ис­пол­няе­мо­го фай­ла. Строк в фай­ле generic.cfg немно­го:
Строка 63: Строка 64:
  
 
Пер­вая стро­ка ве­лит сис­те­ме сбор­ки make ис­поль­зо­вать ком­пи­ля­тор mpicc (часть стан­дар­та MPI) – это обо­лоч­ка сис­тем­но­го ком­пи­ля­то­ра, ука­зан­но­го в пе­ре­мен­ной обо­лоч­ки OMP_CC. Обо­лоч­ка уп­ро­ща­ет про­цесс сбор­ки, ав­то­ма­ти­че­­ски свя­зы­вая необ­хо­ди­мые па­рал­лель­ные биб­лио­те­ки. Во вто­рой стро­ке (в пе­ре­мен­ной CFLAGS) за­да­ют­ся па­ра­мет­ры оп­ти­ми­за­ции, ис­поль­зуе­мые во вре­мя ком­пи­ля­ции. Па­ра­мет­ры по умол­чанию до­воль­но стан­дарт­ны, и с ними ком­пи­ля­ция и за­пуск BSMBench прой­дут успеш­но в боль­шин­ст­ве рас­про­странен­ных сис­тем Linux. Ес­ли возник­ли про­бле­мы или вы хо­ти­те по­про­бо­вать раз­ные па­ра­мет­ры оп­ти­ми­за­ции, за­гляните на man-страницу GCC.
 
Пер­вая стро­ка ве­лит сис­те­ме сбор­ки make ис­поль­зо­вать ком­пи­ля­тор mpicc (часть стан­дар­та MPI) – это обо­лоч­ка сис­тем­но­го ком­пи­ля­то­ра, ука­зан­но­го в пе­ре­мен­ной обо­лоч­ки OMP_CC. Обо­лоч­ка уп­ро­ща­ет про­цесс сбор­ки, ав­то­ма­ти­че­­ски свя­зы­вая необ­хо­ди­мые па­рал­лель­ные биб­лио­те­ки. Во вто­рой стро­ке (в пе­ре­мен­ной CFLAGS) за­да­ют­ся па­ра­мет­ры оп­ти­ми­за­ции, ис­поль­зуе­мые во вре­мя ком­пи­ля­ции. Па­ра­мет­ры по умол­чанию до­воль­но стан­дарт­ны, и с ними ком­пи­ля­ция и за­пуск BSMBench прой­дут успеш­но в боль­шин­ст­ве рас­про­странен­ных сис­тем Linux. Ес­ли возник­ли про­бле­мы или вы хо­ти­те по­про­бо­вать раз­ные па­ра­мет­ры оп­ти­ми­за­ции, за­гляните на man-страницу GCC.
 +
{{Врезка|left|Заголовок=Про­ис­хо­ж­дение BSMBench |Ширина=60%|Содержание=
 +
В тео­ре­ти­че­­ской фи­зи­ке эле­мен­тар­ных час­тиц раз­ра­бо­та­ны тео­рии, опи­сы­ваю­щие ди­на­ми­ку эле­мен­тар­ных час­тиц. Эта ди­на­ми­ка опи­сы­ва­ет­ся слож­ны­ми вы­ра­жения­ми, для рас­че­та ко­то­рых час­то нуж­ны са­мые мощ­ные су­пер­ком­пь­ю­те­ры. В осно­ве BSMBench – код, раз­ра­бо­тан­ный для изу­чения ме­ханиз­ма на­ру­шения сим­мет­рии элек­три­че­­ски сла­бо­го взаи­мо­дей­ст­вия, ка­саю­ще­го­ся фи­зи­ки бо­зо­на Хигг­са. Что­бы по­нять этот ме­ханизм, был на­пи­сан гиб­кий ис­сле­до­ва­тель­ский код. Взгля­нув на него, экс­пер­ты по вы­со­ко­про­из­во­ди­тель­ным вы­чис­лениям по­ня­ли, что из него мож­но сде­лать мощ­ный на­бор тес­тов. Те­ку­щую вер­сию BSMBench соз­дал Эд Беннет [Ed Bennett], сту­дент физ­фа­ка Универ­си­те­та Су­он­си. Она осно­ва­на на ис­сле­до­вании, опи­сан­ном в сле­дую­щих ра­бо­тах:
  
 +
1 L. Del Debbio, A. Patella, C. Pica. “Higher Representations on the lattice: Numerical simulations. SU(2) with adjoint fermions”, Phys. Rev. D81 (2010) 094503, DOI 10.1103/PhysRevD.81.094503;
 +
 +
2 L. Del Debbio, B. Lucini, A. Patella, C. Pica, A. Rago. “Conformal versus confining scenario in SU(2) with adjoint fermions”, Phys. Rev. D80 (2009) 074507, DOI 10.1103/PhysRevD.80.074507. }}
 
Шаб­ло­ны для дру­гих опе­ра­ци­он­ных сис­тем и раз­лич­ных ар­хи­тек­тур на­хо­дят­ся в ка­та­ло­ге machine-config. Имя фай­ла долж­но яс­но оз­на­чать, для ка­кой сис­те­мы и ар­хи­тек­ту­ры он пред­на­зна­чен.
 
Шаб­ло­ны для дру­гих опе­ра­ци­он­ных сис­тем и раз­лич­ных ар­хи­тек­тур на­хо­дят­ся в ка­та­ло­ге machine-config. Имя фай­ла долж­но яс­но оз­на­чать, для ка­кой сис­те­мы и ар­хи­тек­ту­ры он пред­на­зна­чен.
  
 
Обыч­но ком­пи­ля­ция длит­ся все­го 20–30 се­кунд. Ес­ли она про­шла успеш­но, то в корневом ка­та­ло­ге тес­та поя­вят­ся три ис­пол­няе­мых фай­ла: bsmbench_balance, bsmbench_comms и bsmbench_compute. Ес­ли вы сле­до­ва­ли на­шим ин­ст­рук­ци­ям, оши­бить­ся бы­ло поч­ти негде, но ес­ли вдруг поя­ви­лось со­об­щение об ошиб­ке, со­ве­ту­ем вер­нуть­ся на­зад и на­чать все с на­ча­ла. Ес­ли вы не спра­ви­тесь с про­бле­мой, ав­то­ры BSMBench (вклю­чая ме­ня) с удо­воль­ст­ви­ем по­мо­гут вам за­пустить тест в ва­шей сис­те­ме.
 
Обыч­но ком­пи­ля­ция длит­ся все­го 20–30 се­кунд. Ес­ли она про­шла успеш­но, то в корневом ка­та­ло­ге тес­та поя­вят­ся три ис­пол­няе­мых фай­ла: bsmbench_balance, bsmbench_comms и bsmbench_compute. Ес­ли вы сле­до­ва­ли на­шим ин­ст­рук­ци­ям, оши­бить­ся бы­ло поч­ти негде, но ес­ли вдруг поя­ви­лось со­об­щение об ошиб­ке, со­ве­ту­ем вер­нуть­ся на­зад и на­чать все с на­ча­ла. Ес­ли вы не спра­ви­тесь с про­бле­мой, ав­то­ры BSMBench (вклю­чая ме­ня) с удо­воль­ст­ви­ем по­мо­гут вам за­пустить тест в ва­шей сис­те­ме.
  
За­пуск тес­та
+
===За­пуск тес­та===
  
 
В корневом ка­та­ло­ге тес­та соз­да­дим под­ка­та­лог output и зай­дем в него:
 
В корневом ка­та­ло­ге тес­та соз­да­дим под­ка­та­лог output и зай­дем в него:
  
#mkdir output && cd output
+
#mkdir output && cd output
  
 
Об­щая ко­ман­да за­пус­ка тес­та из это­го ка­та­ло­га та­ко­ва:
 
Об­щая ко­ман­да за­пус­ка тес­та из это­го ка­та­ло­га та­ко­ва:
  
#mpirun -np NUM ../bsmbench_[test] -i [input_file] -o [output file]
+
#mpirun -np NUM ../bsmbench_[test] -i [input_file] -o [output file]
  
 
Па­ра­метр test мо­жет принимать зна­чения balance, comms и compute, а NUM – это ко­ли­че­­ст­во од­но­вре­мен­но за­пу­щен­ных про­цес­сов (обыч­но оно мень­ше или рав­но ко­ли­че­­ст­ву ядер). Не­сколь­ко вход­ных фай­лов на­хо­дят­ся в ка­та­ло­ге sets (в корневом ка­та­ло­ге тес­та). Они по­ме­че­ны но­ме­ром тес­та и ко­ли­че­­ст­вом про­цес­сов. Вы­ход­ной файл соз­да­ет­ся поль­зо­ва­те­лем, и в него бу­дут за­пи­са­ны ре­зуль­та­ты тес­тов.
 
Па­ра­метр test мо­жет принимать зна­чения balance, comms и compute, а NUM – это ко­ли­че­­ст­во од­но­вре­мен­но за­пу­щен­ных про­цес­сов (обыч­но оно мень­ше или рав­но ко­ли­че­­ст­ву ядер). Не­сколь­ко вход­ных фай­лов на­хо­дят­ся в ка­та­ло­ге sets (в корневом ка­та­ло­ге тес­та). Они по­ме­че­ны но­ме­ром тес­та и ко­ли­че­­ст­вом про­цес­сов. Вы­ход­ной файл соз­да­ет­ся поль­зо­ва­те­лем, и в него бу­дут за­пи­са­ны ре­зуль­та­ты тес­тов.
Строка 82: Строка 88:
 
Для кон­крет­но­го при­ме­ра про­ве­дем тест сба­лан­си­ро­ван­но­сти [balance test] на двух яд­рах. В этом слу­чае в вы­ход­ном ка­та­ло­ге вы­пол­ня­ет­ся сле­дую­щая ко­ман­да:
 
Для кон­крет­но­го при­ме­ра про­ве­дем тест сба­лан­си­ро­ван­но­сти [balance test] на двух яд­рах. В этом слу­чае в вы­ход­ном ка­та­ло­ге вы­пол­ня­ет­ся сле­дую­щая ко­ман­да:
  
#mpirun -np 2 ../bsmbench_balance -i ../sets/balance-2.bsmbench -o balance-2.out
+
#mpirun -np 2 ../bsmbench_balance -i ../sets/balance-2.bsmbench -o balance-2.out
  
 
За­тем пе­рей­дем в дру­гой тер­ми­нал и вы­полним ко­ман­ду top. В на­шей тес­то­вой сис­те­ме с дву­мя яд­ра­ми про­грам­ма ра­бо­та­ет кор­рект­но, и мы ви­дим два про­цес­са bsmbench_balance, воз­глав­ляю­щих спи­сок по ис­поль­зо­ванию про­цес­со­ра. При­мер­но че­рез пол­ча­са про­грам­ма за­вер­шит­ся, и от­кро­ет­ся обо­лоч­ка, из ко­то­рой она бы­ла за­пу­ще­на. По­сле это­го у нас по­лу­чат­ся (будем на­де­ять­ся, пустой) файл err_0 и вы­ход­ной файл balance-2.out.
 
За­тем пе­рей­дем в дру­гой тер­ми­нал и вы­полним ко­ман­ду top. В на­шей тес­то­вой сис­те­ме с дву­мя яд­ра­ми про­грам­ма ра­бо­та­ет кор­рект­но, и мы ви­дим два про­цес­са bsmbench_balance, воз­глав­ляю­щих спи­сок по ис­поль­зо­ванию про­цес­со­ра. При­мер­но че­рез пол­ча­са про­грам­ма за­вер­шит­ся, и от­кро­ет­ся обо­лоч­ка, из ко­то­рой она бы­ла за­пу­ще­на. По­сле это­го у нас по­лу­чат­ся (будем на­де­ять­ся, пустой) файл err_0 и вы­ход­ной файл balance-2.out.
Строка 88: Строка 94:
 
В до­полнение к ре­зуль­та­там тес­та вы­ход­ной файл со­дер­жит ин­фор­ма­цию о пи­тании сис­те­мы, ко­то­рую сме­ло мож­но иг­но­ри­ро­вать. Нуж­ную нам ин­фор­ма­цию мы по­лу­чим, вы­брав все стро­ки вы­ход­но­го фай­ла, со­дер­жа­щие «BENCH» (все бу­к­вы за­глав­ные):
 
В до­полнение к ре­зуль­та­там тес­та вы­ход­ной файл со­дер­жит ин­фор­ма­цию о пи­тании сис­те­мы, ко­то­рую сме­ло мож­но иг­но­ри­ро­вать. Нуж­ную нам ин­фор­ма­цию мы по­лу­чим, вы­брав все стро­ки вы­ход­но­го фай­ла, со­дер­жа­щие «BENCH» (все бу­к­вы за­глав­ные):
  
#grep BENCH balance-2.out
+
#grep BENCH balance-2.out
  
 
В на­шем слу­чае это стро­ки
 
В на­шем слу­чае это стро­ки
Строка 122: Строка 128:
 
[BENCH][0]Performance is 0.03 times that of a Blue Gene/P node card.
 
[BENCH][0]Performance is 0.03 times that of a Blue Gene/P node card.
  
 +
{{Врезка|left|Заголовок=Важ­ность об­щения |Ширина=98%|Содержание=
 +
[[Файл:LXF163.tut_ben.bsmbench_opt.png |right |800px]]
 +
Соз­дать па­рал­лель­ную сис­те­му с доста­точ­но бы­ст­рой се­тью, мас­шта­би­руе­мой до 100 ядер, до­воль­но про­сто и недо­ро­го, но для вы­хо­да за эти пре­де­лы обыч­но нуж­но спец­обо­ру­до­вание. Эта идея от­ра­же­на на ри­сун­ке спра­ва. На нем про­из­во­ди­тель­ность про­цес­са по­ка­за­на как функ­ция ко­ли­че­­ст­ва про­цес­сов для трех сис­тем: IBM BlueGene/Q (сплош­ные линии); ее пред­ше­ст­венника BlueGene/P (штри­хо­вые линии); и кла­сте­ра Beowulf, со­б­ран­но­го на обыч­ном «же­ле­зе» (пунк­тир­ные линии). Ес­ли при ко­ли­че­­ст­ве про­цес­сов до 32 по­след­няя сис­те­ма не усту­па­ет су­пер­ком­пь­ю­те­рам, вы­ше это­го по­ро­га ее про­из­во­ди­тель­ность рез­ко па­да­ет, а при 128 про­цес­сах ста­но­вит­ся поч­ти на по­ря­док мень­ше.
 +
 +
'''> Тест Dphi (один из трех под­тес­тов, вы­пол­няе­мых BSMBench) в сис­те­ме с пре­об­ла­да­ни­ем вы­чис­ле­ний (зе­ле­ные линии), сба­лан­си­ро­ван­ной сис­те­ме (крас­ные) и сис­те­ме с пре­об­ла­да­ни­ем взаи­мо­дей­ст­вия (си­ние) для трех сис­тем, опи­сан­ных во врез­ке.'''
 +
 +
 +
'''Скорая помощь:'''Что­бы ос­во­бо­дить вир­ту­аль­ную кон­соль, ис­поль­зуе­мую для тес­та, приcтавьте ам­пер­санд к кон­цу ко­ман­ды mpirun.
 +
}}
 
spinor_field_sqnorm, mad и Dphi – три вы­пол­няе­мых тес­та. Об­ра­ти­те внимание на стро­ку с важней­шим со­об­щением “All tests have completed successfully [Все тес­ты за­вер­ши­лись успеш­но]”. В трех тес­тах да­ны ре­зуль­та­ты ко­ли­че­­ст­ва мил­ли­ар­дов опе­ра­ций с пла­ваю­щей точ­кой (FLOP) в се­кун­ду, т. е. в ги­гаф­лопс. Про­из­во­ди­те­ли про­цес­со­ров уве­ря­ют, что про­из­во­ди­тель­ность вы­ше раз в пять, но их циф­ры по­лу­че­ны на идеа­ли­зи­ро­ван­ных тес­тах.
 
spinor_field_sqnorm, mad и Dphi – три вы­пол­няе­мых тес­та. Об­ра­ти­те внимание на стро­ку с важней­шим со­об­щением “All tests have completed successfully [Все тес­ты за­вер­ши­лись успеш­но]”. В трех тес­тах да­ны ре­зуль­та­ты ко­ли­че­­ст­ва мил­ли­ар­дов опе­ра­ций с пла­ваю­щей точ­кой (FLOP) в се­кун­ду, т. е. в ги­гаф­лопс. Про­из­во­ди­те­ли про­цес­со­ров уве­ря­ют, что про­из­во­ди­тель­ность вы­ше раз в пять, но их циф­ры по­лу­че­ны на идеа­ли­зи­ро­ван­ных тес­тах.
  
 
За­тем про­из­во­ди­тель­ность на­шей сис­те­мы сравнива­ет­ся с про­из­во­ди­тель­но­стью кар­ты уз­ла BlueGene/P, ко­то­рую мы вы­бра­ли эта­лон­ной плат­фор­мой для из­ме­рения от­но­си­тель­ной про­из­во­ди­тель­но­сти. BlueGene/P – ши­ро­ко раз­вер­ну­тая су­пер­ком­пь­ю­тер­ная плат­фор­ма, раз­ра­бо­тан­ная IBM, и в по­следние го­ды она бы­ла од­ной из са­мых по­пу­ляр­ных плат­форм для вы­чис­лений в сфе­ре фи­зи­ки эле­мен­тар­ных час­тиц. Кар­та уз­ла – наи­мень­ший вы­чис­ли­тель­ный узел этой сис­те­мы. Из внут­ренних тес­тов нам ин­те­ре­сен Dphi, так как он мо­жет дать бо­лее под­роб­ную ин­фор­ма­цию о про­из­во­ди­тель­но­сти. За­тем для это­го тес­та вы­пол­ня­ет­ся сравнение с про­из­во­ди­тель­но­стью кар­ты уз­ла BlueGene/P.
 
За­тем про­из­во­ди­тель­ность на­шей сис­те­мы сравнива­ет­ся с про­из­во­ди­тель­но­стью кар­ты уз­ла BlueGene/P, ко­то­рую мы вы­бра­ли эта­лон­ной плат­фор­мой для из­ме­рения от­но­си­тель­ной про­из­во­ди­тель­но­сти. BlueGene/P – ши­ро­ко раз­вер­ну­тая су­пер­ком­пь­ю­тер­ная плат­фор­ма, раз­ра­бо­тан­ная IBM, и в по­следние го­ды она бы­ла од­ной из са­мых по­пу­ляр­ных плат­форм для вы­чис­лений в сфе­ре фи­зи­ки эле­мен­тар­ных час­тиц. Кар­та уз­ла – наи­мень­ший вы­чис­ли­тель­ный узел этой сис­те­мы. Из внут­ренних тес­тов нам ин­те­ре­сен Dphi, так как он мо­жет дать бо­лее под­роб­ную ин­фор­ма­цию о про­из­во­ди­тель­но­сти. За­тем для это­го тес­та вы­пол­ня­ет­ся сравнение с про­из­во­ди­тель­но­стью кар­ты уз­ла BlueGene/P.
  
Взаи­мо­дей­ст­вие
+
===Взаи­мо­дей­ст­вие===
  
 
Те­перь за­пустим дру­гой тест, на­при­мер, bsmbench_comms:
 
Те­перь за­пустим дру­гой тест, на­при­мер, bsmbench_comms:
  
#mpirun -np 2 ../bsmbench_comms -i ../sets/comms-2.bsmbench -o comms-2.out
+
#mpirun -np 2 ../bsmbench_comms -i ../sets/comms-2.bsmbench -o comms-2.out
  
 
На обыч­ном «же­ле­зе» про­грам­ма вы­пол­ня­ет­ся опять же око­ло по­лу­ча­са. Пре­ды­ду­щий тест пред­на­зна­чал­ся для си­туа­ции, когда на вы­чис­ления и на взаи­мо­дей­ст­вие вре­мени тра­ти­лось при­мер­но по­ров­ну, а в этом тес­те вре­мя на взаи­мо­дей­ст­вие го­раз­до боль­ше вре­мени на вы­чис­ления. В стан­дарт­ных ар­хи­тек­ту­рах с вы­со­кой сте­пе­нью па­рал­ле­лиз­ма взаи­мо­дей­ст­вие нега­тив­но влия­ет на про­из­во­ди­тель­ность, и за­да­ча, стоя­щая пе­ред про­из­во­ди­те­ля­ми «же­ле­за» – умень­шение это­го влияния. Боль­шин­ст­во лю­дей поль­зу­ют­ся одним ком­пь­ю­те­ром с мно­го­ядер­ным про­цес­со­ром, и в та­ких сис­те­мах взаи­мо­дей­ст­вие про­ис­хо­дит на­мно­го бы­ст­рее, чем в боль­ших рас­пре­де­лен­ных ар­хи­тек­ту­рах. Ин­те­рес­но сравнить ре­зуль­та­ты для на­шей тес­то­вой сис­те­мы. В тес­те взаи­мо­дей­ст­вия мы по­лу­чи­ли ре­зуль­тат в 1,22 ги­гаф­лопс, а в тес­те сба­лан­си­ро­ван­но­сти – 1,09 ги­гаф­лопс. Сле­до­ва­тель­но, ре­зуль­та­ты, хо­тя и с неболь­шой разницей, со­поста­ви­мы. Ста­ло быть, у на­шей сис­те­мы нет про­блем, свя­зан­ных с взаи­мо­дей­ст­ви­ем, так как раз­ли­чие ме­ж­ду дву­мя ре­зуль­та­та­ми мож­но отнести на счет ко­ле­баний из-за сис­тем­ных про­цес­сов, внешних по от­но­шению к тес­ту.
 
На обыч­ном «же­ле­зе» про­грам­ма вы­пол­ня­ет­ся опять же око­ло по­лу­ча­са. Пре­ды­ду­щий тест пред­на­зна­чал­ся для си­туа­ции, когда на вы­чис­ления и на взаи­мо­дей­ст­вие вре­мени тра­ти­лось при­мер­но по­ров­ну, а в этом тес­те вре­мя на взаи­мо­дей­ст­вие го­раз­до боль­ше вре­мени на вы­чис­ления. В стан­дарт­ных ар­хи­тек­ту­рах с вы­со­кой сте­пе­нью па­рал­ле­лиз­ма взаи­мо­дей­ст­вие нега­тив­но влия­ет на про­из­во­ди­тель­ность, и за­да­ча, стоя­щая пе­ред про­из­во­ди­те­ля­ми «же­ле­за» – умень­шение это­го влияния. Боль­шин­ст­во лю­дей поль­зу­ют­ся одним ком­пь­ю­те­ром с мно­го­ядер­ным про­цес­со­ром, и в та­ких сис­те­мах взаи­мо­дей­ст­вие про­ис­хо­дит на­мно­го бы­ст­рее, чем в боль­ших рас­пре­де­лен­ных ар­хи­тек­ту­рах. Ин­те­рес­но сравнить ре­зуль­та­ты для на­шей тес­то­вой сис­те­мы. В тес­те взаи­мо­дей­ст­вия мы по­лу­чи­ли ре­зуль­тат в 1,22 ги­гаф­лопс, а в тес­те сба­лан­си­ро­ван­но­сти – 1,09 ги­гаф­лопс. Сле­до­ва­тель­но, ре­зуль­та­ты, хо­тя и с неболь­шой разницей, со­поста­ви­мы. Ста­ло быть, у на­шей сис­те­мы нет про­блем, свя­зан­ных с взаи­мо­дей­ст­ви­ем, так как раз­ли­чие ме­ж­ду дву­мя ре­зуль­та­та­ми мож­но отнести на счет ко­ле­баний из-за сис­тем­ных про­цес­сов, внешних по от­но­шению к тес­ту.
  
Вы­чис­ления
+
===Вы­чис­ления===
  
 
На­конец, мож­но за­пустить тест с вы­чис­ления­ми, когда вы­чис­ления пре­об­ла­да­ют над взаи­мо­дей­ст­ви­ем. Для это­го ско­ман­дуй­те
 
На­конец, мож­но за­пустить тест с вы­чис­ления­ми, когда вы­чис­ления пре­об­ла­да­ют над взаи­мо­дей­ст­ви­ем. Для это­го ско­ман­дуй­те
  
#mpirun -np 2 ../bsmbench_compute -i ../sets/compute-2.bsmbench -o compute-2.out
+
#mpirun -np 2 ../bsmbench_compute -i ../sets/compute-2.bsmbench -o compute-2.out
  
 
Этот тест об­ла­да­ет бо­лее вы­со­ки­ми тре­бо­вания­ми, и мо­жет вы­пол­нять­ся до несколь­ких ча­сов. Для обыч­ных поль­зо­ва­тель­ских сис­тем этот тест наи­менее ин­фор­ма­ти­вен: про­из­во­ди­тель­ность од­но­ядер­ной сис­те­мы мож­но оп­ре­де­лить про­ще и бы­ст­рее. Ес­ли вы бу­де­те за­пускать тест bsmbench_compute на сво­ей сис­те­ме, со­ве­ту­ем оста­но­вить его по­сле т. н. «бе­зум­но­го тес­та [mad test]», сэ­ко­но­мив вре­мя. Ре­зуль­та­ты это­го тес­та и тес­та spinor_field_sqnorm мо­гут дать по­лез­ную ин­фор­ма­цию в сравнении с ана­ло­гич­ны­ми ре­зуль­та­та­ми тес­тов взаи­мо­дей­ст­вия и сба­лан­си­ро­ван­но­сти.
 
Этот тест об­ла­да­ет бо­лее вы­со­ки­ми тре­бо­вания­ми, и мо­жет вы­пол­нять­ся до несколь­ких ча­сов. Для обыч­ных поль­зо­ва­тель­ских сис­тем этот тест наи­менее ин­фор­ма­ти­вен: про­из­во­ди­тель­ность од­но­ядер­ной сис­те­мы мож­но оп­ре­де­лить про­ще и бы­ст­рее. Ес­ли вы бу­де­те за­пускать тест bsmbench_compute на сво­ей сис­те­ме, со­ве­ту­ем оста­но­вить его по­сле т. н. «бе­зум­но­го тес­та [mad test]», сэ­ко­но­мив вре­мя. Ре­зуль­та­ты это­го тес­та и тес­та spinor_field_sqnorm мо­гут дать по­лез­ную ин­фор­ма­цию в сравнении с ана­ло­гич­ны­ми ре­зуль­та­та­ми тес­тов взаи­мо­дей­ст­вия и сба­лан­си­ро­ван­но­сти.

Текущая версия на 04:56, 21 октября 2018


Оце­ни­те про­из­во­ди­тель­ность сис­те­мы с по­мо­щью BSMBench

Содержание

[править] Скорость вашего компьютера

(thumbnail)
Наш эксперт Бьяд­жо Лу­чи­ни – про­фес­сор фи­зи­ки в Уни­вер­си­те­те Су­он­си. Он поль­зу­ет­ся вы­чис­ли­тель­ной мо­щью ко­ло­нии пин­гви­нов, ис­сле­дуя внут­рен­ние свой­ст­ва эле­мен­тар­ных час­тиц.

Ес­ли вас ко­гда-ни­будь ин­те­ре­со­ва­ло, бы­ст­ро ли ра­бо­та­ет ва­ша сис­те­ма, Бьяд­жо Лу­чи­ни по­ка­жет вам ув­ле­ка­тель­ный путь к от­ве­ту.

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

По­ня­тие про­из­во­ди­тель­но­сти до­воль­но субъ­ек­тив­но, по­сколь­ку за­ви­сит от на­ших по­треб­но­стей и ожи­даний. На дан­ном уро­ке мы пред­ста­вим ко­ли­че­­ст­вен­ную ме­ру про­из­во­ди­тель­но­сти, про­ис­те­каю­щую из об­лас­ти, где у нее есть го­раз­до бо­лее чет­кое оп­ре­де­ление – из су­пер­ком­пь­ю­те­ров.

Вы­чис­ли­тель­ные воз­мож­но­сти од­но­го про­цес­со­ра ог­раниче­ны: без про­ры­ва в тех­но­ло­ги­ях нель­зя су­ще­ст­вен­но уве­ли­чить ко­ли­че­­ст­во тран­зи­сто­ров на кро­шеч­ном кри­стал­ле кремния, как нель­зя и уве­ли­чить час­то­ту ра­бо­ты про­цес­со­ров, не за­тро­нув бо­лее фун­да­мен­таль­ные фи­зи­че­­ские за­ко­ны для из­менения нынешних ме­ханиз­мов ра­бо­ты про­цес­со­ров. Но ведь вы­чис­ли­тель­ную мощ­ность уве­ли­чи­вать нуж­но! Ос­та­ет­ся объ­е­динить несколь­ко со­вме­ст­но ра­бо­таю­щих про­цес­со­ров или про­цес­сор­ных ядер.

Про­стой ва­ри­ант – «ком­пь­ю­тер­ная фер­ма» по ти­пу Amazon EC2. В ней ка­ж­дый ком­пь­ю­тер или эк­зем­п­ляр ком­пь­ю­те­ра мож­но ис­поль­зо­вать для ре­шения от­дель­ной за­да­чи. Од­на­ко де­ло услож­ня­ет­ся, когда од­ну за­да­чу на­до раз­де­лить ме­ж­ду несколь­ки­ми про­цес­со­ра­ми. При­мер – про­гно­зи­ро­вание по­го­ды. Ма­те­ма­ти­че­­ская мо­дель здесь доста­точ­но слож­на, и да­же са­мый бы­ст­рый в ми­ре про­цес­сор не смо­жет во­вре­мя об­ра­ба­ты­вать дан­ные в оди­ноч­ку. Ос­нов­ная слож­ность со­вме­ст­ных, или па­рал­лель­ных, вы­чис­лений – взаи­мо­дей­ст­вие, т. е. необ­хо­ди­мость об­ме­на дан­ны­ми ме­ж­ду про­цес­са­ми. Это соз­да­ет при вы­чис­лениях уз­кие мес­та, рас­шить ко­то­рые мож­но толь­ко с по­мо­щью спе­ци­аль­ных се­тей об­ме­на дан­ны­ми.

Луч­шие тех­но­ло­гии – пе­ре­до­вые и в це­лом до­ро­гие. Эф­фек­тив­но мас­шта­би­ро­вать сис­те­му из свы­ше несколь­ких ты­сяч бы­ст­рых взаи­мо­свя­зан­ных про­цес­со­ров – тех­но­ло­ги­че­­ская сверх­за­да­ча. Не­мно­гие спе­циа­ли­зи­ро­ван­ные сис­те­мы в этой ка­те­го­рии спра­вед­ли­во на­зы­ва­ют су­пер­ком­пь­ю­те­ра­ми, или вы­со­ко­про­из­во­ди­тель­ны­ми вы­чис­ли­тель­ны­ми (ВПВ) сис­те­ма­ми. Ры­нок ВПВ-сис­тем ог­раничен, но це­ле­вые поль­зо­ва­те­ли бо­лее чем охот­но со­гла­ша­ют­ся пла­тить нема­лую це­ну, дик­туе­мую про­из­во­ди­те­ля­ми, лишь бы те уто­ли­ли их вынужденную жа­ж­ду ско­ро­сти. По этой при­чине поль­зо­ва­те­лям важ­но иметь неза­ви­си­мые от про­из­во­ди­те­ля сред­ст­ва оцен­ки воз­мож­но­стей ВПВ-ар­хи­тек­ту­ры. Боль­шин­ст­во ути­лит для это­го до­воль­но незатейливы и оценива­ют лишь один ас­пект сис­те­мы, будь то внут­ри­про­цес­сор­ные вы­чис­ления или меж­про­цес­сор­ное взаи­мо­дей­ст­вие. Кро­ме то­го, по­доб­ные ути­ли­ты хо­ро­шо из­вест­ны про­из­во­ди­те­лям «же­ле­за», ко­то­рые в сво­ей сфе­ре час­то про­из­во­дят также и ПО. В ре­зуль­та­те ком­пи­ля­то­ры, при­ме­няе­мые в су­пер­ком­пь­ю­те­рах, оп­ти­ми­зи­ро­ва­ны по про­из­во­ди­тель­но­сти на стан­дарт­ных тес­тах, что услож­ня­ет вы­бор ме­ж­ду плат­фор­ма­ми.

[править] BSMBench

Не­дав­но поя­ви­лась но­вая ути­ли­та оцен­ки про­из­во­ди­тель­но­сти су­пер­ком­пь­ю­те­ров под на­званием BSMBench. У нее есть два пре­иму­ще­ст­ва по сравнению со стан­дарт­ны­ми ути­ли­та­ми: она оценива­ет од­но­вре­мен­но и про­из­во­ди­тель­ность, и взаи­мо­дей­ст­вие, так­же пре­достав­ляя воз­мож­ность из­менения их от­но­си­тель­ной важ­но­сти, и доста­точ­но слож­на, что­бы к ней бы­ло труд­но по­дог­нать ком­пи­ля­тор для оп­ти­ми­за­ции ре­зуль­та­тов тес­та. По­это­му BSMBench спо­соб­на дать на­деж­ную оцен­ку мощ­но­сти ВПВ-сис­тем. Поскольку те же тех­но­ло­гии со­вме­ст­но­го про­грам­ми­ро­вания мож­но реа­ли­зо­вать и раз­вер­нуть на на­столь­ных сис­те­мах, BSMBench по­мо­жет про­ве­рить и про­из­во­ди­тель­ность на­ше­го ком­пь­ю­те­ра с Linux. Конеч­но, на­шим ре­зуль­та­там бу­дет да­ле­ко до по­ка­за­те­лей су­пер­ком­пь­ю­те­ров (а ина­че с че­го бы те стои­ли так до­ро­го?). Но при­коснуть­ся к ми­ру ВПВ-сис­тем с на­ше­го скром­но­го ра­бо­че­го сто­ла или сер­ве­ра все рав­но ин­те­рес­но. И – да, ре­зуль­та­ты мо­гут по­ра­до­вать нас или ока­зать­ся по­следним толч­ком к об­нов­лению ком­пь­ю­те­ра.

[править] Сис­тем­ные тре­бо­вания

Пре­ж­де чем пе­рей­ти к ком­пи­ля­ции и за­пуску BSMBench, по­лез­но на­помнить чи­та­те­лю, что тес­ти­ро­вание – это опе­ра­ция, пре­дель­но на­гру­жаю­щая сис­те­му. В ча­ст­но­сти, в боль­шин­ст­ве тес­тов ак­тив­но за­дей­ст­во­ва­ны про­цес­сор и па­мять, и ес­ли не пред­при­нять спе­ци­аль­ных мер, воз­мож­но за­ви­сание сис­те­мы и (хо­тя и ма­ло­ве­ро­ят­ный) пе­ре­грев ком­пь­ю­те­ра. В лю­бой из этих си­туа­ций со­ве­ту­ем немед­лен­но пре­кра­тить опе­ра­цию, при необ­хо­ди­мо­сти да­же пе­ре­за­гру­зив ком­пь­ю­тер кноп­кой сбро­са.

ВПВ-ар­хи­тек­ту­ры – это сер­ве­ры, и на них нет ши­кар­ных гра­фи­че­­ских сто­лов с эф­фек­та­ми, ре­сур­со­ем­ких про­грамм вро­де офис­ных при­ло­жений или брау­зе­ров с час­то­ко­лом вкла­док. Помните, что лю­бая про­грам­ма, за­пу­щен­ная со­вме­ст­но с тес­том, по­влия­ет на ре­зуль­та­ты, умень­шив по­ка­за­те­ли про­из­во­ди­тель­но­сти ком­пь­ю­те­ра. Для за­пуска это­го тес­та уста­но­ви­те лег­кий ра­бо­чий стол, на­по­до­бие LXDE, или (луч­ше) пе­ре­за­пусти­те сис­те­му в кон­соль­ном ре­жи­ме: для на­ших за­дач гра­фи­че­­ский ин­тер­фейс не ну­жен. При воз­мож­но­сти, по­сле ком­пи­ли­ро­вания тес­та на­строй­те уда­лен­ный доступ по ssh на тес­ти­руе­мый ком­пь­ю­тер и вы­пол­няй­те все дей­ст­вия уда­лен­но. Это да­ет бо­лее досто­вер­ные ре­зуль­та­ты, так как бли­же эму­ли­ру­ет сре­ду, для ко­то­рой пред­на­зна­чен тест.

Ре­ко­мен­ду­ем за­пускать тест не бо­лее чем на по­ло­вине ядер тес­то­вой сис­те­мы (в ко­то­рой дол­жен быть как минимум че­ты­рехъ­я­дер­ный про­цес­сор), и что­бы не менее 2 ГБ ОЗУ оста­лось по­сле вы­чи­тания из об­ще­го объ­е­ма па­мя­ти по 2 ГБ на ка­ж­дое яд­ро, уча­ст­вую­щее в тес­те. Для ими­та­ции слож­но­го сце­на­рия мы за­пусти­ли тест на сис­те­ме с двух­ядер­ным Intel Core 2 Duo с час­то­той 2,66 ГГц и 4 ГБ ОЗУ. В двух­про­цес­сор­ной кон­фи­гу­ра­ции са­мая боль­шая про­грам­ма в на­бо­ре ис­поль­зу­ет поч­ти 100 % про­цес­со­ра и око­ло 3,7 ГБ ОЗУ. Код вы­пол­нял­ся в эму­ля­то­ре тер­ми­на­ла в сре­де LXDE. Это вы­хо­дит за пре­де­лы сис­тем­ных тре­бо­ваний и на­гру­жа­ет сис­те­му по мак­си­му­му. Хо­тя иногда ра­бо­та сис­те­мы за­мед­ля­лась, про­блем не возник­ло, и тес­ты за­вер­ши­лись успеш­но. Но мы силь­но со­ве­ту­ем при­дер­жи­вать­ся ре­ко­мен­до­ван­ных сис­тем­ных тре­бо­ваний.

Пе­ред ком­пи­ля­ци­ей BSMBench нуж­но уста­но­вить неко­то­рые за­ви­си­мо­сти. Нуж­ны толь­ко стан­дарт­ные сред­ст­ва раз­ра­бот­ки, ис­поль­зуе­мые для па­рал­лель­но­го про­грам­ми­ро­вания, и в лю­бом круп­ном ди­ст­ри­бу­ти­ве Linux они есть. В ча­ст­но­сти, для ком­пи­ля­ции и за­пуска па­рал­лель­но­го ко­да нуж­ны биб­лио­те­ки MPI (Message Passing Interface – ин­тер­фейс пе­ре­да­чи со­об­щений). В свою оче­редь, MPI нуж­ны ком­пи­ля­то­ры (в дан­ном слу­чае, GCC и G++ из Gnu Compiler Collection). MPI – де-фак­то стан­дарт па­рал­лель­но­го про­грам­ми­ро­вания, бла­го­да­ря прак­ти­че­­ски неог­раничен­ной мас­шта­би­руе­мо­сти и спо­соб­но­сти ра­бо­тать как в рас­пре­де­лен­ных сис­те­мах, так и в сис­те­мах с раз­де­ляе­мой па­мя­тью. Су­ще­ст­ву­ет несколь­ко реа­ли­за­ций MPI; две са­мые по­пу­ляр­ные – MPICH и OpenMPI. Поль­зо­ва­те­ли и раз­ра­бот­чи­ки пред­по­чи­та­ют OpenMPI, по при­чине час­тых ре­ли­зов и вы­со­кой ско­ро­сти раз­ра­бот­ки. По­это­му мы то­же вы­бе­рем OpenMPI. Од­на­ко от­ме­тим, что BSMBench ра­бо­та­ет с лю­бой реа­ли­за­ци­ей MPI.

Для це­лей на­ше­го уро­ка мы пре­доста­вим под­роб­ные ин­ст­рук­ции по ком­пи­ля­ции и за­пуску BSMBench в Ubuntu 12.04, но эти дей­ст­вия мож­но адап­ти­ро­вать к лю­бо­му дру­го­му ди­ст­ри­бу­ти­ву. Начнем с уста­нов­ки необ­хо­ди­мых за­ви­си­мо­стей. Это де­ла­ет­ся в команд­ной стро­ке – на­бе­ри­те в тер­ми­на­ле

#sudo apt-get install build-essential libopenmpi1.5-dev openmpi1.5-bin

По­сле ука­зания па­ро­ля поль­зо­ва­те­ля (мы пред­по­ла­га­ем, что у поль­зо­ва­те­ля есть при­ви­ле­гии ад­минист­ра­то­ра) из ре­по­зи­то­ри­ев Ubuntu за­гру­зят­ся и уста­но­вят­ся необ­хо­ди­мые ути­ли­ты. При же­лании сде­лать это мож­но и че­рез Центр управ­ления про­грам­ма­ми (Software Center), но в команд­ной стро­ке бы­ст­рее.

Ре­ко­мен­дуе­мая вер­сия GCC для BSMBench – 4.4. С бо­лее но­вы­ми вер­сия­ми существует ряд несо­вмес­ти­мо­стей, ко­то­рые, воз­мож­но, уже бу­дут ис­прав­ле­ны к мо­мен­ту, когда вы бу­де­те чи­тать эту ста­тью. Так как Ubuntu 12.04 по­став­ля­ет­ся с GCC 4.6, нам при­дет­ся уста­но­вить ре­ко­мен­до­ван­ную вер­сию. Сно­ва об­ра­тим­ся к команд­ной стро­ке:

#sudo apt-get install gcc-4.4 cpp-4.4


Те­перь мож­но пе­рей­ти к ком­пи­ля­ции BSMBench. По­следние вер­сии ис­ходников мож­но за­гру­зить из github (зай­ди­те на https://github.com/blucini/BSMBench и щелкните по ссыл­ке ZIP), а по­следний ста­биль­ный ре­лиз – с www.bsmbench.org. На­ши ука­зания долж­ны ра­бо­тать для по­следней вер­сии – в слу­чае со­мнений за­гляните в файл README. Пред­по­ло­жим, что файл с ис­ходника­ми, ко­то­рый вы ска­ча­ли, на­зы­ва­ет­ся bsmbench.zip; для его рас­па­ков­ки ско­ман­дуй­те тер­ми­на­лу

#unzip /path/to/bsmbench.zip

За­мените путь /path/to аб­со­лют­ным пу­тем до фай­ла bsmbench.zip в фай­ло­вой сис­те­ме. Эта ко­ман­да соз­даст под­ка­та­лог. Пред­по­ло­жим, что его имя бу­дет bsmbench, и пе­рей­дем в него ко­ман­дой

#cd bsmbench

Это кор­не­вой ка­та­лог тес­та. За­тем ском­пи­ли­ру­ем тест:

#export OMPI_CC=/usr/bin/gcc-4.4 && export OMPI_CXX=/usr/bin/gcc-4.4 && ./make.sh machine-config/generic.cfg

Две ко­ман­ды export ве­лят OpenMP ис­поль­зо­вать вер­сию GCC 4.4 вме­сто вер­сии по умол­чанию 4.6. Файл generic.cfg в ка­та­ло­ге machine-config – об­щий файл шаб­ло­на, необ­хо­ди­мый для соз­дания Makefile, ко­то­рый, в свою оче­редь, необ­хо­дим для соз­дания ис­пол­няе­мо­го фай­ла. Строк в фай­ле generic.cfg немно­го:

CC = mpicc

CFLAGS = -Wall -std=c99 -O2 -fomit-frame-pointer -mfpmath=sse -msse -msse2

Пер­вая стро­ка ве­лит сис­те­ме сбор­ки make ис­поль­зо­вать ком­пи­ля­тор mpicc (часть стан­дар­та MPI) – это обо­лоч­ка сис­тем­но­го ком­пи­ля­то­ра, ука­зан­но­го в пе­ре­мен­ной обо­лоч­ки OMP_CC. Обо­лоч­ка уп­ро­ща­ет про­цесс сбор­ки, ав­то­ма­ти­че­­ски свя­зы­вая необ­хо­ди­мые па­рал­лель­ные биб­лио­те­ки. Во вто­рой стро­ке (в пе­ре­мен­ной CFLAGS) за­да­ют­ся па­ра­мет­ры оп­ти­ми­за­ции, ис­поль­зуе­мые во вре­мя ком­пи­ля­ции. Па­ра­мет­ры по умол­чанию до­воль­но стан­дарт­ны, и с ними ком­пи­ля­ция и за­пуск BSMBench прой­дут успеш­но в боль­шин­ст­ве рас­про­странен­ных сис­тем Linux. Ес­ли возник­ли про­бле­мы или вы хо­ти­те по­про­бо­вать раз­ные па­ра­мет­ры оп­ти­ми­за­ции, за­гляните на man-страницу GCC.

Шаб­ло­ны для дру­гих опе­ра­ци­он­ных сис­тем и раз­лич­ных ар­хи­тек­тур на­хо­дят­ся в ка­та­ло­ге machine-config. Имя фай­ла долж­но яс­но оз­на­чать, для ка­кой сис­те­мы и ар­хи­тек­ту­ры он пред­на­зна­чен.

Обыч­но ком­пи­ля­ция длит­ся все­го 20–30 се­кунд. Ес­ли она про­шла успеш­но, то в корневом ка­та­ло­ге тес­та поя­вят­ся три ис­пол­няе­мых фай­ла: bsmbench_balance, bsmbench_comms и bsmbench_compute. Ес­ли вы сле­до­ва­ли на­шим ин­ст­рук­ци­ям, оши­бить­ся бы­ло поч­ти негде, но ес­ли вдруг поя­ви­лось со­об­щение об ошиб­ке, со­ве­ту­ем вер­нуть­ся на­зад и на­чать все с на­ча­ла. Ес­ли вы не спра­ви­тесь с про­бле­мой, ав­то­ры BSMBench (вклю­чая ме­ня) с удо­воль­ст­ви­ем по­мо­гут вам за­пустить тест в ва­шей сис­те­ме.

[править] За­пуск тес­та

В корневом ка­та­ло­ге тес­та соз­да­дим под­ка­та­лог output и зай­дем в него:

#mkdir output && cd output

Об­щая ко­ман­да за­пус­ка тес­та из это­го ка­та­ло­га та­ко­ва:

#mpirun -np NUM ../bsmbench_[test] -i [input_file] -o [output file]

Па­ра­метр test мо­жет принимать зна­чения balance, comms и compute, а NUM – это ко­ли­че­­ст­во од­но­вре­мен­но за­пу­щен­ных про­цес­сов (обыч­но оно мень­ше или рав­но ко­ли­че­­ст­ву ядер). Не­сколь­ко вход­ных фай­лов на­хо­дят­ся в ка­та­ло­ге sets (в корневом ка­та­ло­ге тес­та). Они по­ме­че­ны но­ме­ром тес­та и ко­ли­че­­ст­вом про­цес­сов. Вы­ход­ной файл соз­да­ет­ся поль­зо­ва­те­лем, и в него бу­дут за­пи­са­ны ре­зуль­та­ты тес­тов.

Для кон­крет­но­го при­ме­ра про­ве­дем тест сба­лан­си­ро­ван­но­сти [balance test] на двух яд­рах. В этом слу­чае в вы­ход­ном ка­та­ло­ге вы­пол­ня­ет­ся сле­дую­щая ко­ман­да:

#mpirun -np 2 ../bsmbench_balance -i ../sets/balance-2.bsmbench -o balance-2.out

За­тем пе­рей­дем в дру­гой тер­ми­нал и вы­полним ко­ман­ду top. В на­шей тес­то­вой сис­те­ме с дву­мя яд­ра­ми про­грам­ма ра­бо­та­ет кор­рект­но, и мы ви­дим два про­цес­са bsmbench_balance, воз­глав­ляю­щих спи­сок по ис­поль­зо­ванию про­цес­со­ра. При­мер­но че­рез пол­ча­са про­грам­ма за­вер­шит­ся, и от­кро­ет­ся обо­лоч­ка, из ко­то­рой она бы­ла за­пу­ще­на. По­сле это­го у нас по­лу­чат­ся (будем на­де­ять­ся, пустой) файл err_0 и вы­ход­ной файл balance-2.out.

В до­полнение к ре­зуль­та­там тес­та вы­ход­ной файл со­дер­жит ин­фор­ма­цию о пи­тании сис­те­мы, ко­то­рую сме­ло мож­но иг­но­ри­ро­вать. Нуж­ную нам ин­фор­ма­цию мы по­лу­чим, вы­брав все стро­ки вы­ход­но­го фай­ла, со­дер­жа­щие «BENCH» (все бу­к­вы за­глав­ные):

#grep BENCH balance-2.out

В на­шем слу­чае это стро­ки

[BENCH][0]Precision test disabled.

[BENCH][0]spinor_field_sqnorm: test completed in 783.47 seconds

[BENCH][0]spinor_field_sqnorm: Average FLOP/s per process: 5.370e+08

[BENCH][0]spinor_field_sqnorm: Average total FLOP/s: 1.074e+09

[BENCH][0]mad: test completed in 605.25 seconds

[BENCH][0]mad: Average FLOP/s per process: 3.403e+08

[BENCH][0]mad: Average total FLOP/s: 6.806e+08

[BENCH][0]Dphi: test completed in 530.16 seconds

[BENCH][0]Dphi: Average FLOP/s per process: 7.680e+08

[BENCH][0]Dphi: Average total FLOP/s: 1.536e+09

[BENCH][0]Dphi performance is 0.04 times that of a Blue Gene/P node card.

[BENCH][0]All tests completed successfully.

[BENCH][0]Total average FLOP/s: 1.078e+09

[BENCH][0]Total average FLOP/s per process: 5.388e+08

[BENCH][0]Performance is 0.03 times that of a Blue Gene/P node card.


spinor_field_sqnorm, mad и Dphi – три вы­пол­няе­мых тес­та. Об­ра­ти­те внимание на стро­ку с важней­шим со­об­щением “All tests have completed successfully [Все тес­ты за­вер­ши­лись успеш­но]”. В трех тес­тах да­ны ре­зуль­та­ты ко­ли­че­­ст­ва мил­ли­ар­дов опе­ра­ций с пла­ваю­щей точ­кой (FLOP) в се­кун­ду, т. е. в ги­гаф­лопс. Про­из­во­ди­те­ли про­цес­со­ров уве­ря­ют, что про­из­во­ди­тель­ность вы­ше раз в пять, но их циф­ры по­лу­че­ны на идеа­ли­зи­ро­ван­ных тес­тах.

За­тем про­из­во­ди­тель­ность на­шей сис­те­мы сравнива­ет­ся с про­из­во­ди­тель­но­стью кар­ты уз­ла BlueGene/P, ко­то­рую мы вы­бра­ли эта­лон­ной плат­фор­мой для из­ме­рения от­но­си­тель­ной про­из­во­ди­тель­но­сти. BlueGene/P – ши­ро­ко раз­вер­ну­тая су­пер­ком­пь­ю­тер­ная плат­фор­ма, раз­ра­бо­тан­ная IBM, и в по­следние го­ды она бы­ла од­ной из са­мых по­пу­ляр­ных плат­форм для вы­чис­лений в сфе­ре фи­зи­ки эле­мен­тар­ных час­тиц. Кар­та уз­ла – наи­мень­ший вы­чис­ли­тель­ный узел этой сис­те­мы. Из внут­ренних тес­тов нам ин­те­ре­сен Dphi, так как он мо­жет дать бо­лее под­роб­ную ин­фор­ма­цию о про­из­во­ди­тель­но­сти. За­тем для это­го тес­та вы­пол­ня­ет­ся сравнение с про­из­во­ди­тель­но­стью кар­ты уз­ла BlueGene/P.

[править] Взаи­мо­дей­ст­вие

Те­перь за­пустим дру­гой тест, на­при­мер, bsmbench_comms:

#mpirun -np 2 ../bsmbench_comms -i ../sets/comms-2.bsmbench -o comms-2.out

На обыч­ном «же­ле­зе» про­грам­ма вы­пол­ня­ет­ся опять же око­ло по­лу­ча­са. Пре­ды­ду­щий тест пред­на­зна­чал­ся для си­туа­ции, когда на вы­чис­ления и на взаи­мо­дей­ст­вие вре­мени тра­ти­лось при­мер­но по­ров­ну, а в этом тес­те вре­мя на взаи­мо­дей­ст­вие го­раз­до боль­ше вре­мени на вы­чис­ления. В стан­дарт­ных ар­хи­тек­ту­рах с вы­со­кой сте­пе­нью па­рал­ле­лиз­ма взаи­мо­дей­ст­вие нега­тив­но влия­ет на про­из­во­ди­тель­ность, и за­да­ча, стоя­щая пе­ред про­из­во­ди­те­ля­ми «же­ле­за» – умень­шение это­го влияния. Боль­шин­ст­во лю­дей поль­зу­ют­ся одним ком­пь­ю­те­ром с мно­го­ядер­ным про­цес­со­ром, и в та­ких сис­те­мах взаи­мо­дей­ст­вие про­ис­хо­дит на­мно­го бы­ст­рее, чем в боль­ших рас­пре­де­лен­ных ар­хи­тек­ту­рах. Ин­те­рес­но сравнить ре­зуль­та­ты для на­шей тес­то­вой сис­те­мы. В тес­те взаи­мо­дей­ст­вия мы по­лу­чи­ли ре­зуль­тат в 1,22 ги­гаф­лопс, а в тес­те сба­лан­си­ро­ван­но­сти – 1,09 ги­гаф­лопс. Сле­до­ва­тель­но, ре­зуль­та­ты, хо­тя и с неболь­шой разницей, со­поста­ви­мы. Ста­ло быть, у на­шей сис­те­мы нет про­блем, свя­зан­ных с взаи­мо­дей­ст­ви­ем, так как раз­ли­чие ме­ж­ду дву­мя ре­зуль­та­та­ми мож­но отнести на счет ко­ле­баний из-за сис­тем­ных про­цес­сов, внешних по от­но­шению к тес­ту.

[править] Вы­чис­ления

На­конец, мож­но за­пустить тест с вы­чис­ления­ми, когда вы­чис­ления пре­об­ла­да­ют над взаи­мо­дей­ст­ви­ем. Для это­го ско­ман­дуй­те

#mpirun -np 2 ../bsmbench_compute -i ../sets/compute-2.bsmbench -o compute-2.out

Этот тест об­ла­да­ет бо­лее вы­со­ки­ми тре­бо­вания­ми, и мо­жет вы­пол­нять­ся до несколь­ких ча­сов. Для обыч­ных поль­зо­ва­тель­ских сис­тем этот тест наи­менее ин­фор­ма­ти­вен: про­из­во­ди­тель­ность од­но­ядер­ной сис­те­мы мож­но оп­ре­де­лить про­ще и бы­ст­рее. Ес­ли вы бу­де­те за­пускать тест bsmbench_compute на сво­ей сис­те­ме, со­ве­ту­ем оста­но­вить его по­сле т. н. «бе­зум­но­го тес­та [mad test]», сэ­ко­но­мив вре­мя. Ре­зуль­та­ты это­го тес­та и тес­та spinor_field_sqnorm мо­гут дать по­лез­ную ин­фор­ма­цию в сравнении с ана­ло­гич­ны­ми ре­зуль­та­та­ми тес­тов взаи­мо­дей­ст­вия и сба­лан­си­ро­ван­но­сти.

Са­мый слож­ный ас­пект тес­ти­ро­вания – по­лу­чить ме­ру про­из­во­ди­тель­но­сти сис­те­мы, от­ра­жаю­щую ее ра­бо­ту в ре­аль­ной си­туа­ции. BSMBench – на­бор тес­тов, пред­на­зна­чен­ный для вы­со­ко­про­из­во­ди­тель­ных вы­чис­лений, но он мо­жет дать ин­фор­ма­тив­ные ре­зуль­та­ты и на бюд­жет­ных плат­фор­мах. Струк­ту­ра BSMBench по­зво­ля­ет ме­нять со­от­но­шение взаи­мо­дей­ст­вия и вы­чис­ления в тес­тах. Вы­пу­ще­но три тес­та, ка­ж­дый из ко­то­рых пред­став­ля­ет од­ну из ти­пич­ных си­туа­ций.

Те­перь у вас долж­но поя­вить­ся бо­лее глу­бо­кое понимание спо­соб­но­стей сво­ей сис­те­мы, и эти знания при­го­дят­ся вам при планиро­вании мо­дерниза­ции или за­ме­ны сво­его ком­пь­ю­те­ра. Иде­аль­ный для вас на­столь­ный ком­пь­ю­тер, быть мо­жет, не так уж и недосту­пен. |

Персональные инструменты
купить
подписаться
Яндекс.Метрика