Několik tipů na zvýšení využití GPU. I když je nová aplikace BRP3 CUDA 32 podstatně výkonnější, než původní ABP2, tak vytížení GPU zdaleka nedosahuje míry, která je obvyklá u ostatních projektů. Obsahově tento post zahrnuje i předešlé příspěvky - all inclusive.
Všeobecně: čím lepší GPU, tím menší využití, nejlepších relativních hodnot se dosahuje na GPU s jádrem G9x, já konkrétně G94b (9600GT) - přibližně 70 až 80%. Na GTX260 je vytížení cca 60% a GTX560Ti cca 45%.
1. Doporučení - pokud máte k dispozici více karet, počítejte Einsteina na tom nejhorším kýblu.
Využití GPU (a tím pádem doba výpočtu) je velmi závislé na výkonu CPU, konkrétně kombinace C2D 3,0 GHz + 9600GT 1:20, C2D 2,13 GHz + 9600GT 1:44, a to při aplikaci níže uvedených triků. Obojí Win 32 bit, na GPU stejné přetakty.
Zvýšení priority procesu.
Na Windowsech aplikujte
Proces Tamer, já bez problémů popstrkávám prioritu procesu na realtime. Při standardním nastavení priority procesu se dosahuje časů o 25% delších.
Pro Ubuntu jsem uplácal drobný skriptík, který spuštím z cronu jako root v intervalu 5 minut. Přímá inspirace - v podstatě kopie
zde.
Kód: Vybrat vše
#!/bin/bash
PROCESS_NAME=einsteinbinary_BRP3_1.08_i686-pc-linux-gnu__BRP3cuda32nv270
PID=`ps -C $PROCESS_NAME -o pid=`
if [ $PID>0 ];
then renice -19 $PID;
fi
Aplikuji na stroji C2D 2,13 GHz + 9600GT, časy 1:30, tj. o 14 minut lepší, než na Winech při stejném taktu GPU s realtime a navíc menší zábor CPU. 1.08 je na Einsteina a Ubuntu mimořádně vyvedená aplikace, podmínkou jsou beta drivery 270. Co jsem udělal a proč to funguje netuším, vysvětlení by snad mohl podat vkliber. Mohu pouze konstatovat, že funkčnost skriptu je závislá i na mezerách či ne-mezerách i tam, kde jsem to, coby zhýčkanec Céčkem a VBA, nečekal.
2. Doporučení - zvyšte maximálně CPU prioritu GPU procesu.
Na lepších GPU není vliv zvýšení priority až tak výrazný, ale pořád je znatelný.
Více úloh na jedné kartě. GPU s jádrem G200+ s dostatečnou pamětí (cca 0,31G na úlohu) mohou počítat více úloh paralelně.
Vzor pro univerzální app_info ve Winech je
zde i se spoustou zajímavých postřehů z pokusů s různými druhy GPU včetně 2G GTX570.
Podle počtu úloh, které hodláte paralelně počítat, se upravuje úsek
<type>CUDA</type>
<count>1.000000</count>
</coproc>,
například na 3 úlohy
<count>0.33000000</count>.
3. Doporučení - pokud má GPU dostatek paměti, počítejte paralelně více úloh.
Antžto jsem si ve vlákně nevšiml Ubuntu verze, tak jest zde pro dvě úlohy paralelně.
Kód: Vybrat vše
<app_info>
<app>
<name>einsteinbinary_BRP3</name>
<user_friendly_name>Binary Radio Pulsar Search</user_friendly_name>
</app>
<file_info>
<name>einsteinbinary_BRP3_1.08_i686-pc-linux-gnu__BRP3cuda32nv270</name>
<executable/>
</file_info>
<file_info>
<name>libcudart32_32_16.so</name>
<executable/>
</file_info>
<file_info>
<name>libcufft32_32_16.so</name>
<executable/>
</file_info>
<file_info>
<name>EULA.txt</name>
</file_info>
<file_info>
<name>db.dev.lin.3d35195e</name>
</file_info>
<file_info>
<name>dbhs.dev.lin.3d35195e</name>
</file_info>
<app_version>
<app_name>einsteinbinary_BRP3</app_name>
<version_num>108</version_num>
<platform>i686-pc-linux-gnu</platform>
<avg_ncpus>0.057093</avg_ncpus>
<max_ncpus>0.057093</max_ncpus>
<plan_class>BRP3cuda32nv270</plan_class>
<api_version>6.13.0</api_version>
<file_ref>
<file_name>einsteinbinary_BRP3_1.08_i686-pc-linux-gnu__BRP3cuda32nv270</file_name>
<main_program/>
</file_ref>
<file_ref>
<file_name>libcudart32_32_16.so</file_name>
<open_name>libcudart.so.3</open_name>
<copy_file/>
</file_ref>
<file_ref>
<file_name>libcufft32_32_16.so</file_name>
<open_name>libcufft.so.3</open_name>
<copy_file/>
</file_ref>
<file_ref>
<file_name>EULA.txt</file_name>
<open_name>EULA.txt</open_name>
</file_ref>
<file_ref>
<file_name>db.dev.lin.3d35195e</file_name>
<open_name>db.dev</open_name>
<copy_file/>
</file_ref>
<file_ref>
<file_name>dbhs.dev.lin.3d35195e</file_name>
<open_name>dbhs.dev</open_name>
<copy_file/>
</file_ref>
<coproc>
<type>CUDA</type>
<count>0.499995</count>
</coproc>
</app_version>
</app_info>
Edit: opraveny časy na 9600GT
Edit 2: opraven řádek 7 (chybějící závorka za name), díky Shafo