Zpět na článek

Diskuze: S3 uvádí GPGPU výpočty v aplikaci S3FotoPro

Nejsi přihlášený(á)

Pro psaní a hodnocení komentářů se prosím přihlas ke svému účtu nebo si jej vytvoř.

Milan Šurkala
Milan Šurkala
SHW SHW
Operační systém: PC
Procesor: AMD
Grafická karta: NVIDIA
18. 10. 2008 23:08

Komentáře tohoto uživatele máš zablokované.

Třeba takové Visual Studio dokáže optimalizovat kód až nezvykle dobře. Snažil jsem se ručně naprogramovat kód v assembleru co nejlépe, ale maximálně jsem se optimalizaci Visual Studia vyrovnal, ale nepřekonal. SSE kód lze psát buď ve formě céčkovských funkcí (pomalé) nebo přímo v assembleru, což je rychlejší a skutečně se tak dá dosáhnout výrazného zrychlení. Co se týče malého množství registrů, máte naprostou pravdu. I poměrně jednoduchý výpočet má tolik různých odkládacích a dočasných proměnných, že počty registrů nestačí.

Milan Šurkala
Milan Šurkala
SHW SHW
Operační systém: PC
Procesor: AMD
Grafická karta: NVIDIA
18. 10. 2008 19:55

Komentáře tohoto uživatele máš zablokované.

Zkuste se podívat na http://www.nvidia.com/docs/IO/47906/220401_Reprint.pdf. Konec stránky číslo 2 v levém sloupečku. Přiznávám však, že do architektury NVIDIA CUDA teprve jen začínám pronikat a naprogramoval jsem jen jednoduché urychlení ještě djednoduššího výpočtu.

Milan Šurkala
Milan Šurkala
SHW SHW
Operační systém: PC
Procesor: AMD
Grafická karta: NVIDIA
18. 10. 2008 18:37

Komentáře tohoto uživatele máš zablokované.

Pokud to budete zpracovávat v SSE, a řekněme na dvou jádrech, můžete dosáhnout 8× zrychlení (teoreticky). Jedno jádro má 128-bitovou SSE jednotku, tedy najednou může pracovat na 4 32-bitových floatech (desetinných číslech). Máme-li dvě jádra, teoreticky můžeme zrychlit aplikaci osmkrát. Ve skutečnosti je zrychlení v aplikacích spíše jen v desítkách procent než v násobcích. Pokud ale máte algoritmus, který SSE jednotkám skutečně perfektně padne, lze dosáhnout až 31× násobného zrychlení na jediném jádře (ač teoreticky SSE mohlo v dané situaci zrychlit aplikaci jen 16×).
Co se týče grafik, máte k dispozici jen u GeForce 9600 GT celých 64 shaderů. Každý tento shader může zpracovávat až 96 vláken najednou, to máte 6144 vláken najednou. Řekněme, že zpracováváme obraz 1024×768 pixelů, tj. 786 tisíc pixelů a hodnoty jsou v charech (8-bitové proměnné). U procesoru s SSE a dvěma jádry tedy můžeme zpracovat najednou 2 (jádra) * 16 (do 128-bitového registru se vejde 16 8-bitových proměnných), tedy 32 pixelů.
Na zpracování 786 tisíc tedy CPU potřebuje 24500 cyklů (786000/32 = cca 24500), kdežto GPU potřebuje jen 128 cyklů (786000/6144 = 128). Hned máte 200-násobné zrychlení (teoreticky). Pokud budou hodnoty ve floatech, tak procesor začne o to více prohrávat, neboť do SSE registru se nevejde 16 proměnných, ale jen 4 (float má 32 bitů). Pak by teoretický rozdíl byl 800-násobný. Pochopitelně v praxi jsou dosažena jiná čísla, ale je skutečnost, že GPU díky masivnímu paralelismu zvládá zpracování objemných dat někdy až neskutečně rychle.

ahmul
ahmul
Level Level
18. 10. 2008 19:06

Komentáře tohoto uživatele máš zablokované.

@Milan Šurkala S tímhle se dá souhlasit, ale čísla 64 a 96 bych nenásobil přímo:) Z pohledu CUDY na GTX280, je k dispozici 30 multiprocesorů a na každém z nich v jednu chvíli běží šestnáct vláken. Pokud je procesor náležitě vytížen větším počtem vláken, tak dochází k schedulingu a procesory se tváří, že na nich běží víc vláken, ale ani tak bych nešel k vyšším číslům řekněme než 64 (samozřejmě závisí na úloze). Možná se pletu, o grafiky jsem se nezajímal do doby, než jsem na nich začal počítat, tak mě když tak opravte:)
Mám ten dojem totiž, že i oficiální materiály pro CUDU uvádějí maximální teoretické zrychlení 100krát, a když se podíváte na některé projekty na stránkách CUDY, tak obvykle u nich můžete vidět čísla velikosti několika desítek.

ahmul
ahmul
Level Level
17. 10. 2008 23:25

Komentáře tohoto uživatele máš zablokované.

Nechci se hádat, ale teoretické zrychlení na nových nvidích vůči cpu je 100krát. V praxi většinou někde kolem 40. Trochu mě překvapuje, že by podobných čísel dosahovala grafika od S3.

Milan Šurkala
Milan Šurkala
SHW SHW
Operační systém: PC
Procesor: AMD
Grafická karta: NVIDIA
18. 10. 2008 00:07

Komentáře tohoto uživatele máš zablokované.

@ahmul Jen pro představu, násobení matic (stažené ze stránek NVIDIE) je na GeForce 9600 GT asi 140× rychlejší než na 3,0GHz Core 2 Duo :-)

ahmul
ahmul
Level Level
18. 10. 2008 10:33

Komentáře tohoto uživatele máš zablokované.

@Milan Šurkala Pokud jste srovnával pouze běh na grafice a emulovaný běh, tak to máte pravdu. Součástí zdrojového kódu je i rutina pro kontrolní výpočet na cpu (computeGold). Pokud si změříte, jak to dlouho trvá jí, zjistíte podstatně rozdílné číslo;-)

Milan Šurkala
Milan Šurkala
SHW SHW
Operační systém: PC
Procesor: AMD
Grafická karta: NVIDIA
18. 10. 2008 12:46

Komentáře tohoto uživatele máš zablokované.

@Milan Šurkala Tak jsem si to zkusil znova. Emulovaný běh nepoužívám, protože se mi bije s knihovnami OpenCV, které v programu používám a zatím se mi to nechtělo řešit.
Takže, GPU (pouze samotný výpočet funkce Muld zopakovaný několik tisíc krát) - 0,043 ms na jeden výpočet.
CPU (30× zopakovaná funkce ComputeGold) - 3,633 ms na jeden výpočet
Tudíž, tentokrát mi to vyšlo 85× rychleji na GPU.

Reklama
Reklama