Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Matasx
Založen: 17. 08. 2008 Příspěvky: 258
|
Zaslal: 14. červen 2009, 13:29:59 Předmět: |
|
|
Vilem Otte: no asi tě zklamu, protože odpověď na polovinu tvých otázek je: optimalizace žádné )
C# rozhodně není to pravé ořechové pro raytracer, takže i s využitím všech 4 (8 virtuálně) jader to trvá roky než se scéna vyrenderuje (i s málo objekty). Proto přemýšlím do jakého jazyka raytracer přepsat -> pak bych se teprve vrhl na optimalizace. Ale když v C# jen projetí pole boolean 800x600 a nastavení třeba na true trvá půl vteřiny, tak nemá cenu dělat nějaké optimalizace, protože to bude prostě slimák vždycky. Takže teď se jestě pokusím dopsat refrakci a přepíšu to do cpp.
Stíny: 25 samplů + náhodná malá odchylka.
No a tahle scéna byla vyrenderovaná za krásných 16 minut na Core i7 při plném vytížení všech jader. Nádhera že?
a zájem o info + ukázku by určitě byl! |
|
Návrat nahoru |
|
 |
posila
Založen: 29. 07. 2007 Příspěvky: 201
|
Zaslal: 14. červen 2009, 14:28:31 Předmět: |
|
|
Matasx napsal: |
Ale když v C# jen projetí pole boolean 800x600 a nastavení třeba na true trvá půl vteřiny, tak nemá cenu dělat nějaké optimalizace, protože to bude prostě slimák vždycky. |
Tak to je někde něco hodně špatně. U mě taková operace trvá 3 ms . Jinak, než to začneš přepisovat do C++, nechceš to zkusit pustit v Monu? Od verze 2.2 podporují některé SIMD instrukce, tak bys měl větší prostor pro optimalizace jako v Microsoftí implementaci .NETu  |
|
Návrat nahoru |
|
 |
Matasx
Založen: 17. 08. 2008 Příspěvky: 258
|
Zaslal: 14. červen 2009, 15:06:21 Předmět: |
|
|
posila: dík za tip, zkusím (ale moc tomu nedávám)
EDIT: a jak dostanu tu knihovnu Mono.SIMD do windows? sem si z oficiálních stránek stáhl ten pack a nainstaloval, ale knihovny v systému nejsou... |
|
Návrat nahoru |
|
 |
posila
Založen: 29. 07. 2007 Příspěvky: 201
|
Zaslal: 14. červen 2009, 17:56:28 Předmět: |
|
|
Mono žije vedle .NETu a z Visual Studia (zatím) nejde pohodlně použít. Pokud nekompiluješ z command line, tak budeš potřebovat nějaké IDE, které Mono podporuje (třeba SharpDevelop) a v něm nastavit, že má targetovat pro Mono. |
|
Návrat nahoru |
|
 |
Matasx
Založen: 17. 08. 2008 Příspěvky: 258
|
Zaslal: 14. červen 2009, 18:41:16 Předmět: |
|
|
Tak nevím co sem udělal špatně, když si rozkliknu target framework, tak tam mám jen .NET, ale mono ne  |
|
Návrat nahoru |
|
 |
Matasx
Založen: 17. 08. 2008 Příspěvky: 258
|
Zaslal: 20. červen 2009, 21:19:48 Předmět: |
|
|
No tak sem to nakonec přepsal do c++ (teda aspoň ten základ). Nějaká jednodušší scéna na nižší rozlišení cca. 7 vteřin. Teď snad bude trochu času tak si prostuduju nějaký dokumenty o raytraycingu (což jsem chtěl už dávno) a pokusím se to trošku optimalizovat. Pak by se mohly dostavit nějaké slušné výsledky.
A teď ještě dotázeček:
jaktože
kód: |
friend vector3 operator + ( const vector3& v1, const vector3& v2 )
{
vector3 c(0,0,0);
_asm
{
mov eax, v1;
movups xmm0, [eax];
mov ebx, v2;
movups xmm1, [ebx];
addps xmm0, xmm1;
movups c, xmm0;
};
return c;
} |
je uplně stejně rychlý jako
kód: |
friend vector3 operator + ( const vector3& v1, const vector3& v2 )
{
return vector3(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z);
} |
proč sem vůbec očekával že to bude rychlejší?  |
|
Návrat nahoru |
|
 |
johnnash
Založen: 30. 07. 2007 Příspěvky: 80
|
Zaslal: 20. červen 2009, 22:23:24 Předmět: |
|
|
Kdyz uz psat SSE tak pouzivat aligned instrukce presunu movaps(s tim spojene vnuceni zarovnane adresy pro struktury).
Ale dost pochybuju ze i kdybys to cely prepsal do asm/sse/whatever tak dostanes vic jak 3% vykonu, spis naopak. |
|
Návrat nahoru |
|
 |
VladR
Založen: 30. 07. 2007 Příspěvky: 1322 Bydliště: Greater New York City Area
|
Zaslal: 20. červen 2009, 22:27:17 Předmět: |
|
|
Preco myslis, ze by dostal len cca 3% vykonu ? Kompilator pri vectorizacii robi azda tak brutalny SSE kod ? |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 21. červen 2009, 00:39:24 Předmět: |
|
|
Z vlastní zkušenosti VC++2008 rozhodně nedělá o moc rychlejší kód s SSE než bez SSE. Zapnutí SSE může zrychlit i zpomalit (proč mi to v některých případech zpomalovalo, nevím). Kompilátor je prostě někdy tupý. S ručně napsaným SSE kódem by mělo být snadné jej překonat. _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
johnnash
Založen: 30. 07. 2007 Příspěvky: 80
|
|
Návrat nahoru |
|
 |
Matasx
Založen: 17. 08. 2008 Příspěvky: 258
|
Zaslal: 21. červen 2009, 11:03:44 Předmět: |
|
|
johnnash: možná vyzkouším, ale neočekávám rozdíl... |
|
Návrat nahoru |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 22. červen 2009, 16:01:49 Předmět: |
|
|
Skutečně to příliš pouhým přepsáním do SSE/ASM moc neurychlíš, je třeba využít jeho výhody lépe - nejlépe provést s ním packet tracing, kdy budeš počítat 4 polopřímky najednou (což je výhoda).
Přepisovat tyto matematické operace s vektory na low-level smysl nemá (navíc já bych to vůbec nepsal způsobem jak to máš napsáno - pracoval bych s 4mi vektory najednou, nikoliv s celými vektory).
Určitě používej aligned instrukce přesunu, unaligned jsou mnohem pomalejší.
Ruční přepsání do ASM/SSE o něco urychlí, ale člověk to musí psát dobře - a měl by jsi spíše přepsat celou ray-triangle, ray-sphere a další výpočty průniku. Jinak také tolik nezískáš.
Jde zde hlavně především o packet tracing (kterým získáš se SIMD-SSE až 4x větší výkon (prakticky to nad 3.5 násobek nejde ... a i to je hodně dobré)). Ovšem jakmile ztratíš koherenci polopřímek je ti packet tracing k ničemu a výkon jde zase drasticky dolů.
VC++ 2008 si s ním docela rozumí (pokud tam nenapíšeš nějakou prasárnu), u ASM je podstatné aby člověk byl opatrný.
Ovšem intrinsic se mi zdají mnohem lepší (také z důvodu přehlednosti).
Každopádně tímto moc nezískáš, skutečné zrychlení ti přinesou až KD-trees, BVH, příp. další.
btw. malou ukázku videa a pár screenů k raytracingu tady postnu za chvilku . _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
|
Návrat nahoru |
|
 |
|