"Видео вычисления"
В общем не вдаваясь в подробности, перейду сразу к сути:
Процессоры на видеокартах могут выполнять математические/логические операции?
Если да, то не направите-ли по нужному руслу?..
Т.е. интересует - как повесить некий код на выполнение на процессоре видюхи, и в принципе вообще не обязательно видюхи :) мало-ли процессоров на компе прохлаждается? ;)
И пожалуйста, не пинайте :D
Просьба сразу не смеяться, т.к. идея явно неординарная. Когда мне ее подкинули я честно гря немного не удержался, но потом подумал, и понял что в этом таки что-то есть :)
В общем не вдаваясь в подробности, перейду сразу к сути:
Процессоры на видеокартах могут выполнять математические/логические операции?
Если да, то не направите-ли по нужному руслу?..
Т.е. интересует - как повесить некий код на выполнение на процессоре видюхи, и в принципе вообще не обязательно видюхи :) мало-ли процессоров на компе прохлаждается? ;)
И пожалуйста, не пинайте :D
99.999999 операций выполняющихся на видеопроцессоре это именно "математические/логические". Заюзать их можно - правда не понятно - что именно ты от этого выиграешь?
Дополнительный вычислительный ресурс...
Станичку пока изучаем.... энглиш... А по руцки и еще с примерами :D не у кого не найдется?..
есть проект распределенных вычислений: http://distributed.net
Проект уже длится несколько лет. Смысл в том, чтобы методом перебора расшифровать кодовое слово.
Есть открытый код: http://distributed.net/source/
на асемблере.
Так вот сама идея - проц и так перебирает блоки в фоновом режиме с самым низким приоритетом. Т.е. этот обсчет толком и не замечаешь...
Тут на фоне новостей о физ. процессорах, и ответе на эту инициативу nVidia и ATI, которые обладают мощными блоками вычисления, возникла идея:
- возможно ли задействовать мощь этих видео карт для расчета вычислений.
Что думаете? Есть ли возможность реализации?
Если нужна какая-то ещё дополнительная информация - с радостью предоставлю.
Вся надежда на программеров!
Вообще, видеокарты отлично работают с большими пачками дробных чисел (можно обрабатывать по нескольку матриц 4х4 типа float за один такт, или, скажем, обрабатывать несколько серий многобайтовых чисел). Например, 3DS Max в части своих расчётов сцены использует вычислительный ресурс видеокарты. В комплекте с DirectX SDK идёт компилятор векторных/пиксельных шейдеров (почему бы не использовать шейдеры для подобных вычислений? Можно будет использовать ещё несколько полезных функций) и ассемблер соответстующий. Там же естественно, хэлп и пара сэмплов. Ну, и в Cg Toolkit можно глянуть, там есть отличный ассемблер карт nVidia. Да и вообще, Cg - высокоуровневый язык программирования видеокарт, так что хотя бы ознакомится с его возможностями здесь явно не помешает
Использовать видяхи, это конечно интересно, там есть векторные алу,...., но по-моему это гем..., как извлекать-то результаты?
Использовать видяхи, это конечно интересно, там есть векторные алу,...., но по-моему это гем..., как извлекать-то результаты?
Работают такие вычисления с памятью видеокарты, а DirectX даёт возможность работать с ней как с обычной системной памятью. Поэтому результаты извлекаются легко и просто.
Работают такие вычисления с памятью видеокарты, а DirectX даёт возможность работать с ней как с обычной системной памятью. Поэтому результаты извлекаются легко и просто.
нужно будет с дирексом разобраться)
нужно будет с дирексом разобраться)
Разбираться нужно будет с программированием под видеокарту, а DirectX - лишь набор промежуточных интерфейсов. На организацию работы с видеопамятью необходимо будет потратить лишь пару часов
- первое перегнать код с ASMa на С++, отбросив шелуху ввиде мультипрограммности/мультипроцессорности, оставив заточку под AMD 64, например под WIN32
- второе - перегнать код с С++ под код шейдеров под SM 3.0
Так получится?
Можно попробовать разбитить задачу на две части:
- первое перегнать код с ASMa на С++, отбросив шелуху ввиде мультипрограммности/мультипроцессорности, оставив заточку под AMD 64, например под WIN32
- второе - перегнать код с С++ под код шейдеров под SM 3.0
Так получится?
Да особо перегонять ничего не требуется, HLSL (high-level shader language) идущий с DirectX SDK - это C-подобный язык, достаточно переопределить пару операторов с помощью препроцессора. Вот пример кода на HLSL:
{
VS_OUTPUT Output;
float fSin, fCos;
float x = length( vPosition ) * sin( fTime ) * 15.0f;
sincos( x, fSin, fCos );
Output.Position = mul( float4( vPosition.x, fSin * 0.1f, vPosition.y, 1.0f ), mWorldViewProj );
Output.Diffuse = 0.5f - 0.5f * fCos;
return Output;
}
Код на Cg выглядет очень похожим образом. Так что можно целую библиотеку под C написать...
попробую встряхнуть стариной и забацать это дело. Если чего-то не получится -чиркану-посоветуюсь.
Спасиб!