Ну как бы построение на GPU это не так просто, я кроме китайцев то больше статьей и не знаю...Так что их просто нету
Насколько понял, вот линк с сорцами http://mxadd.org/
Не плохая инфа про kd-tree на cg
http://www.larsole.com/files/GPU_BVHthesis.pdf
Да, красиво у них там получается. Классный линк, раньше такой штуки точно не было.
FROL
Не встречал такой книги в свободном доступе?
http://www.springerlink.com/content/p48xruu7357w17r2/
Ух ничего себе, про это уже и книжки написали.. нет, не встечал.
FROL
Хм. Разочаровался, там одна глава всего про cuda и то вроде бы читал уже :)
Посмотрел в работе Гаранжи про деление дерева на под-деревья. В движке, с которым я работаю, есть деление на потоки, при обходе дерева, для cpu. Почему-то подумал, что можно сделать еще один поток и кинуть часть работы на gpu.
ну можно конечно если ты хочешь поддерживать 2 разные версии кода
Нашел неплохие кернелы (для обзора) http://www.tml.tkk.fi/~timo/
>Understanding the Efficiency of Ray Traversal on GPUs. Timo Aila and Samuli Laine. High-Performance Graphics 2009.
FROL
> ну можно конечно если ты хочешь поддерживать 2 разные версии кода
Хочется загрузить и gpu и проц на полную
Здорово, я не знал что у этой статьи открытые исходники. Там какие-то цифры совершенно нереальные. Надо попробовать будет
FROL
Не разбирал кернелы Aila ? Не совсем понимаю, как происходит планирование. Под G92 для перебора всех лучей выбирается 32 блока (из рассчетов), для GT200 - 120. Для G80 я не могу понять как правильно вычислить.
int firstWarp = LOAD_BALANCER_FIRST_WARP; cuMemcpyHtoD(pWarpCounter, &firstWarp, 4); cuMemcpyHtoD( pNumRays, &n, 4); int numWarps = LOAD_BALANCER_NUM_WARPS; // 192 или 720, откуда эта цифра? int warpsPerBlock = ( RAY_BLOCK_HEIGHT*RAY_BLOCK_WIDTH+31) / 32; int numBlocks = ( numWarps+warpsPerBlock-1)/ warpsPerBlock; gridWidth = numBlocks; gridHeight = 1; cuMemcpyHtoD( pWarpCounter, &firstWarp, 4); // note: this is synchronous cuLaunchGrid( m_cuKernelFunction, gridWidth, gridHeight);
нет, не разбирал. мне слегка не до этого, экзамены)
В cuda best practices нашел такое:
>To hide arithmetic latency completely, multiprocessors should be running at least 192 threads (6 warps).
Может быть 192 как раз с этим и связано - 32*6. Почему 720 для GT200, пока не понял, но похоже принцип тот же - баланс нагрузки.
Тема в архиве.