Коня и трепетную лань

opencl.jpg Мучал ATI Radeon HD5870 и NVidia GTX280 в одной машине на предмет взаимной поддержки OpenCL. Поддерживают. С оговорками, но жить можно. Написал на эту тему небольшой текст:

OpenCL, NVidia, ATI и все все все....

В процессе читал AMD-шные форумы, вычитал страшного, много думал:

OpenCL performance issues
There are known performance issues for HD4XXX series of cards on OpenCL and there is currently no plan to focus exclusively on improving performance for that family. The HD4XXX series was not designed for OpenCL whereas the HD5XXX series was. There will be performance improvements on this series because of improvements in the HD5XXX series, so it will get better, but it is not our focus.

For example, if you are using local memory, they are all currently emulated in global memory. So it is possible you are going out to main memory twice as often as you do on NVidia. This can cause a fairly large performance hit if the application is memory bound. On the HD5XXX series, local memory is mapped to hardware local and thus is many times faster than the HD4XXX series.

Короче, слушайте вашу группу валенки. Формально OpenCL на HD4xxx поддержан, а фактически нужно совершенно другой kernel писать, который локальную память не использует.

А 48xx - важный кусок рынка, их много навыпускали и формально они совсем неплохие. Теперь и в этом сорте не скажу чего придется разбираться. Хорошо хоть про 2xxx/3xxx просто рекомендовано забыть.

P.S. Сравнивая два SDK, видно что ATI в области GPGPU очень заметно отстает (disclaimer: это лично мое мнение по результатам одного дня изучения :). Речь именно о качестве SDK: документации, примерах и тому подобных вещах.

Comments

Bleeding edge всегда требует максимально нового железа, и желающих поддерживать старье - поискать

Не, это больше похоже на тотальный архитектурный пройоб, который исправлен только в серии 5xxx.

Смотри сам: OpenCL объявлен год назад, т.е. задолго до этого начали работать над спеками. Работали и NVidia и ATI. Но стандарт получился очень похожим на NVidia CUDA.
Разница - именно в быстрой локальной памяти, которой у ATI до последней серии не было, но которая дает гигантский выигрыш для очень многих классов задач. Т.е. просто сделать эту фишку необязательной - не получилось, если ее оторвать, получится Stream Computing, который очень узок в применениях (и у ATI - фактически провалился).

При этом, локальная память (у группы тредов GPU) появилась у NVidia в G80, а это вообще 2006-й год, для видеокарт три года - вечность.

В результате G80 моя, трехлетней давности (я ее перед новым 2007-м годом купил) - с OpenCL работает, пусть не со всеми капабилитями (там нет атомарных операций, что тоже плохо), ее одновозрастник HD 3xxx - нет, а вышедший в прошлом году летом HD 4xxx - работает, деваться некуда, но довольно плохо.

И как я понимаю, про 4xxx - это требование Эппла, они на OpenCL довольно прилично поставили.

Это все конечно интересно, но это исключительно детские проблемы технологий.

Думается мне, что для того 0.001% пользователей, которым это критично - купить требуемый под задачу GPU не проблема, а остальным 99% - все это довольно глубоко фиолетово, видео HD дома играется, а более жрущей задачи (ну кроме игрушек) - все равно нету, и в ближайшем будущем даже не предвидится.

Ну да, в этом один из вопросов - есть ли относительно массовые (миллионы пользователей) задачи.
По мне - так есть.

Ну так к тому моменту как ты надевелопишь ответ на задачу, парк уже обновится.

ХЗ. У геймеров - скорее да, у фотографов - скорее нет.

Вообще, на статистику возраста видеокарт было бы интересно посмотреть.

У массы фотографов до сих пор всякие матроксы и старые гефорсы с радеонами300. Вообще говоря, если человек заморачивается акселерированием обработки фотографий, то 200 баксов на новую карту он найдет. А к тому моменту как ты выпустишь софтварез, эта новая карта будет уже старая и будет стоить $80.

Да кто спорит - если варез стоит, скажем $299, то потребовать купить еще карту за 80 - можно.

А если он по 29.95?

Да это неважно на самом деле. Карта же не hardware dongle, на процессоре все равно будет работать. Хотите быстрее - купите карту.
Ясен пень что поддержать старье было бы хорошо, но оверхед на эту поддержку съест время, которое можно было бы потратить на новые фичи или лучшую поддержку нового железа. И код для поддержки HD4xxx все равно скоро на помойку поедет.
Имхо, оптимальная стратегия - это надевелопить для bleeding etch, поднять какой-то кешфлоу и на него нанять консалтера, который сделает бекпорт на HD4xxx для подпитки кешфлоу владельцами старого железа.

Есть много всяких соображений.

Скажем, на сегодняшний день целиться в маки и HD5xxx - бессмысленно, железа такого нет, а в маки и HD4xxx - очень даже осмысленно.

можешь порекомендовать что-нибудь в качестве пошагового вводного курса по программированию для CUDA с примерами, типа нейрохирургия для чайников за 10 дней ?
официальную документацию я смотрел, но там больше ссылочные руководства, а мне бы tutorial..

Если тебе именно пошагово, то есть курс University of Urbana:
http://courses.ece.illinois.edu/ece498/al/
(вот страница со всеми материалами: http://courses.ece.illinois.edu/ece498/al/Syllabus.html)

Меня спрашивать глупо, я этим делом занимаюсь практически с момента появления CUDA и учился по официальным докам + презентациям со всяких конференций, ничего другого и не было (поэтому driver api, например, не знаю просто, оно появилось позже и я не пользовался, как и стримами)

На мой личный вкус, надо представлять аппаратуру (она в Иллинойских лекциях описана достаточно), а тамошний макроассемблер (в смысле - язык C) на него прозрачно ложится. И официальная документация очень даже неплоха (и programming guide и best practices. Плюс документация к примерам, там где есть - бывает очень вкусная.

Но я советую читать про cuda, а делать все на OpenCL, разница невелика, но на радеонах последних тоже будет работать.

о, спасибо, это как раз то, что нужно.
родную документацию я тоже поизучаю, но сначала надо въехать в концепции на простых примерах.

Самплы из поставки SDK в качестве достаточно простых примеров - весьма хороши, хотя конечно перегружены всякой фигней - проверкой кодов ошибок и т.п.