Thursday, March 01, 2007

Stream computing уже здесь

Пока в новостях носятся с экспериментальным 80-ядерным процессором Intel, NVidia окончательно выпустила свой CUDA SDK на прошлой неделе, и можно сказать что stream computing на оченьмногоядерных платформах готов идти, наконец, в массы.

Оба крупнейших вендора представили свои замечательные девайсы и SDK: у нвидии это CUDA, у ATI -- их CTM SDK.

Однако ATI CTM не выглядит так интересно как CUDA, поскольку при всем пафосе он таки слишком похож на третьи-четвертые шейдеры: архитектура и инструкции похожи, лимит на 512 инструкций, и в качестве высокоуровневого языка предлагается HLSL. Правда спецификации очень подробны, и железкой управлять можно очень тонко. На данный момент ATI предлагает все писать на железко-зависимом ассемблере, и считает это почему-то преимуществом CTM.

А вот CUDA от NVidia намного интереснее. С точки зрения девелопера оно выглядит как натуральный очень-многопроцессорный девайс, причем логикой распараллеливания программы можно управлять (в отличие от шейдеров и CTM).

Вообще рекомендую полистать замечательный мануал к CUDA, за что определенно можно любить NVidia -- так это за красивые понятные и подробные SDK. Будущее параллельных вычислений -- на пальцах и с картинками.

Писать под эту красоту можно на настоящем, немного модифицированном C. Что характерно никаких жестоких ограничений по коду в мануалах к CUDA не приведено, ни размер кода, ни на глубину вложенных циклов на девайсе, ни на количество вложенных вызовов процедур.
Что, кроме всего прочего, позволяет ожидать кучи параллельных функциональных языков под нвидиевские девайсы ;)

6 comments:

Alex Tutubalin said...

Вот насчет "глубины вызовов" я бы не обнадеживался. Рекурсивных вызовов нет, а вызовы функций - инлайнятся.

just_ziz said...

Итить... не знаю как для чего, а вот для нейросеток моих это хорошо...

virens said...

Не так давно пробегало, что можно использовать часть видеопамяти нвидевских карт под свои нужды. Руки чешутся использовать ещё и процессор видеокарты - под мою обработку изображений должно быть самое оно. Ждём и надеемся :-)

lrrr said...

Alex Tutubalin>
Ну, секундочку, почему инлайнятся -- даже в шейдерах третьих есть настоящие вызовы функций, глубиной до 4-х -- правда, действительно непонятно почему у шейдеров лимиты документированы а тут нет..

virens>
Насчет памяти не слышал как раз, а вот GPU под разные задачи интересные использовать можно давно -- см. www.gpgpu.org, и под обработку изображений в том числе. Я и DCT видел на них, и DWT, и edge detector'ов кучу (у меня собственно у самого специальность -- обработка изображений :)

Alex Tutubalin said...

Ну потому что инлайнятся.
Попробуйте вынести body в отдельный файл - тут же обругают компилятором.

Собственно, вот:
http://forums.nvidia.com/index.php?showtopic=28612
Mark Harris (NVidia):
Currently all __device__ functions are automatically inlined, so the inline keyword is redundant.

Anonymous said...

А мне кажется, что CTM очень даже интересно, к тому же в Fusion с ним видимо жить придется :о))
Только SDK я как то не увидел - может кто ссылочку выложит?
или мыльте на sheerai@mail.ru