LINUX.ORG.RU

Анонсирована свободная переносимая реализация OpenCL

 , ,


0

1

Portable OpenCL позволит разрабатывать и запускать программы, использующие OpenCL, на его свободной платформонезависимой реализации (до этого существовали SDK, предоставляемые вендорами аппаратуры).

Это свободная (MIT-лицензия), основанная на LLVM реализация стандарта OpenCL, которая может быть легко приспособлена для новых целевых платформ. Одна из задач проекта — улучшение «переносимости производительности» программ на OpenCL, избегая нужды в ручной оптимизации, зависящей от целевой платформы. Цель «native» включена, что позволяет запускать ядра OpenCL на CPU.

Также ведётся работа над реализацией OpenCL поверх драйверов видеокарт из Gallium3D (Clover state tracker), в котором можно отметить некоторый прогресс за лето, произошедший в рамках GSoC.

Сайт проекта: https://launchpad.net/pocl

>>> Подробности

★★★★★

Проверено: Shaman007 ()
Последнее исправление: AP (всего исправлений: 2)

Ответ на: комментарий от Reset

Why are AMD GPUs faster than Nvidia GPUs?

Firstly, AMD designs GPUs with many simple ALUs/shaders (VLIW design) that run at a relatively low frequency clock (typically 1120-3200 ALUs at 625-900 MHz), whereas Nvidia's microarchitecture consists of fewer more complex ALUs and tries to compensate with a higher shader clock (typically 448-1024 ALUs at 1150-1544 MHz). Because of this VLIW vs. non-VLIW difference, Nvidia uses up more square millimeters of die space per ALU, hence can pack fewer of them per chip, and they hit the frequency wall sooner than AMD which prevents them from increasing the clock high enough to match or surpass AMD's performance. This translates to a raw ALU performance advantage for AMD:

* AMD Radeon HD 6990: 3072 ALUs x 830 MHz = 2550 billion 32-bit instruction per second
* Nvidia GTX 590: 1024 ALUs x 1214 MHz = 1243 billion 32-bit instruction per second

This approximate 2x-3x performance difference exists across the entire range of AMD and Nvidia GPUs. It is very visible in all ALU-bound GPGPU workloads such as Bitcoin, password bruteforcers, etc.

Secondly, another difference favoring Bitcoin mining on AMD GPUs instead of Nvidia's is that the mining algorithm is based on SHA-256, which makes heavy use of the 32-bit integer right rotate operation. This operation can be implemented as a single hardware instruction on AMD GPUs (BIT_ALIGN_INT), but requires three separate hardware instructions to be emulated on Nvidia GPUs (2 shifts + 1 add). This alone gives AMD another 1.7x performance advantage (~1900 instructions instead of ~3250 to execute the SHA-256 compression function).

Combined together, these 2 factors make AMD GPUs overall 3x-5x faster when mining Bitcoins.

AVL2 ★★★★★
()
Ответ на: комментарий от Reset

Собственно, это не тест, а задача, ради которой покупают видеокарточки.

И такие же результаты будут во всех задачах по по подбору хешей. А это целая индустрия.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

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

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Если задача хорошо параллелится, то чем больше потоков одновременно будет ее решать, тем лучше. Количество одновременно работающих потоков зависит от количества ALU, в чипах амд их в два раза больше, хотя они и медленней. Поэтому тут ой как все не однозначно.

gaga
()
Ответ на: комментарий от gaga

Когда появится нормальный AMD'шный блоб, который будет по-человечески поддерживать вычисления, а также когда openCL доведут до ума (чтобы не надо было уймы страниц исписывать ради элементарных задач - в общем, как можно ближе к синтаксису CUDA, а то и вообще синтаксису openMP), вот тогда и можно будет что-то конкретное говорить.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

>чтобы не надо было уймы страниц исписывать ради элементарных задач - в общем, как можно ближе к синтаксису CUDA, а то и вообще синтаксису openMP

и то и другое нереально. И CUDA и тем более openMP не решают задачи эффективного выполнения кода на принципиально разном оборудовании. Они заточены под один класс железа.

AVL2 ★★★★★
()
Ответ на: комментарий от Eddy_Em

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

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

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

А вот могли бы сделать, как в openMP. И что значит «под один класс железа»? Под всякие там спарки/мипсы/армы что, нет OMP?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от AVL2

> AMD designs GPUs with many simple ALUs/shaders

Nvidia's microarchitecture consists of fewer more complex ALUs


Так с выходом топовых чипов 7-ой серии ATI эту ситуацию собирается поправить... в худшую для себя сторону, значит?...

gag ★★★★★
()
Ответ на: комментарий от Eddy_Em

>Когда появится нормальный AMD'шный блоб

Скажи честно, тебя чем-то сильно обидели АТИ-шники? Ты ведь в каждом треде, в котором есть упоминание про ATI/AMD начинаешь кричать про кривой блоб и превосходство нвидии.

Не, может ты в чём-то и прав, но не слишком ли много тебя в видеофлеймах? И говоришь одно и то же. Взрослый человек, пишешь что-то там на сях и CGI, вроде всё по делу, но как доходит до видеокарт - сплошные крики и флуд.

anonymous
()
Ответ на: комментарий от AVL2

Уверен, что и opencl не решает. Или решает, но на одном оборудовании (под которое изначально писалось) работает нормально, а на другом тормозит аццки.

Reset ★★★★★
()
Ответ на: комментарий от Eddy_Em

Как раз самый объективный. Под венду у ati драйвера лучше. Под линухом они вообще бы в жопе были.

Reset ★★★★★
()
Ответ на: комментарий от Eddy_Em

>А вот могли бы сделать, как в openMP. И что значит «под один класс железа»? Под всякие там спарки/мипсы/армы что, нет OMP?

смысл в том, что все равно пишешь под спарк или мипс. А в openCL по идее ты должен писать код, который должен исполняться на том, что есть. Есть ЦПУ, значит ЦПУ, а есть GPU, значит на GPU. А это же совсем разные архитектуры.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

смысл в том, что все равно пишешь под спарк или мипс

Да ну? Пишешь одно и то же, а уж что там будет дальше - забота компилятора.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

>Да ну? Пишешь одно и то же, а уж что там будет дальше - забота компилятора.

ну так и скажи компилятору, что приложение должно выполняться на мипсе, а если его нет, то на спарке. С openCL все работает именно так.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

Чушь-то какая! В момент компиляции генерируется нужный код. Или openCL генерирует сразу для 100500 архитектур? Сколько же тогда конечный бинарник весить будет? O_o

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Не по этому. Тормозит только первоначальная загрузка.

Reset ★★★★★
()

Скоро видеоядра с поддержкой OpenCL будут встроены и в процессоры Intel и в процессоры AMD. Перспективы Cuda очень мрачные, как и всей NVidia. Если только они свой Кал-Ел в массы не продвинут.

Archer73
()
Ответ на: комментарий от Eddy_Em

>// ну и все равно, что мешает сделать нормальный, OMP-подобный синтаксис?

По идее, потому что приходится учитывать принципиальную разнородность среды исполнения. Тут одно из трех.

Или простой синтаксис и виртуальная машина, скрывающая в себе архитектурные различия с соответствующим оверхедом, или простой синтаксис и одна конкретная архитектура, как в cuda или openmp, или сложный синтаксис, позволяющий реализовать оптимальный код в разных условиях, как в openCL.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

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

ChALkeR ★★★★★
() автор топика
Ответ на: комментарий от ChALkeR

рантайм компиляция в куде тоже есть, но нафиг она нужна если можно обыкновенным образом скомпилировать и слинковать?

Reset ★★★★★
()
Ответ на: комментарий от gag

> Так с выходом топовых чипов 7-ой серии ATI эту ситуацию собирается поправить... в худшую для себя сторону, значит?

Ну так биткойны по два бакса уже не сильно интересны, а в играх и особенно научных вычислениях прирост будет.

JustGuest
()
Ответ на: комментарий от Eddy_Em

Вы по-разному понимаете слово архитектура. У всех называнных тобой процессоров - одна «архитектура» - там мало ядер на кристалле, и они выполняют малопараллельные инструкции. У видеокарт на кристалле сотни ядер, и они выполняют «VLIW» инструкции.

farafonoff ★★
()

> что позволяет запускать ядра OpenCL на CPU
... но зачем? Гемор с OpenCL оправдан только если надо максимальную производительнось даже ценой геморроя. А это уж точно не о обычных процессорах.

anonymous
()
Ответ на: комментарий от anonymous

Очевидно: чтобы код, написанный на OpenCL завёлся даже на тех машинах, где нет поддержки его выполнения видеокартой. Без ускорения, зато не было сообщений вида «калькулятор не поддерживается вашим оборудованием, обновите видеокарту».

И чтобы можно было использовать OpenCL в программах не задумываясь о его поддержке и не рисуя запасной вариант самостоятельно.

ChALkeR ★★★★★
() автор топика

Объясните, этим поделием можно пользоваться, если имею на одном компе видеокарту от нвидиа, а на другом (ноутбук) от интела? Чтобы один раз код написать и в двух местах запустить?

И процессор оно может задействовать?

Но этого пользовался реализацией opencl от nvidia (в составе cuda-sdk), так она, сволочь, ни CPU не хочет задействовать, ни где-то ещё не запустится (где нет видяхи от нвидиа)

Или мне пользовать cuda и не парить моск?

BattleCoder ★★★★★
()
Ответ на: комментарий от BattleCoder

Объясните, этим поделием можно пользоваться, если имею на одном компе видеокарту от нвидиа, а на другом (ноутбук) от интела? Чтобы один раз код написать и в двух местах запустить?

Нет.

И процессор оно может задействовать?

Да.

Или мне пользовать cuda и не парить моск?

Да.

А вообще, лучше сделать код, который в момент компиляции будет проверять, есть ли видеокарта, и если есть - использовать GPU, а если нет - компилировать функции для CPU (pthreads, openmp). ИМХО, надежнее.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от BattleCoder

> Но этого пользовался реализацией opencl от nvidia (в составе cuda-sdk), так она, сволочь, ни CPU не хочет задействовать, ни где-то ещё не запустится (где нет видяхи от нвидиа)

В винде то же самое, а библиотека от ATi умеет делать CPU виртуальным устройством OpenCL, причём для каждого ядра по устройству.

ZenitharChampion ★★★★★
()
Ответ на: комментарий от Eddy_Em

Ты сам написал:

А вообще, лучше сделать код, который в момент компиляции будет проверять, есть ли видеокарта, и если есть - использовать GPU, а если нет - компилировать функции для CPU (pthreads, openmp). ИМХО, надежнее.

ChALkeR ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

Ладно... ок =)

вопрос проще (и актуальнее для меня в данный момент).

смогу ли я запустить уже написанный кем-то opencl-код (если точнее, pyopencl), не изменяя там ни строчки на компьютере с видеокартой хотя бы nvidia?

BattleCoder ★★★★★
()
Ответ на: комментарий от BattleCoder

Если он написан по стандарту и нвблоб этот стандарт поддерживает — то да.

OpenCL как раз и разрабатывался для того, чтобы быть переносимым.

ChALkeR ★★★★★
() автор топика
Ответ на: комментарий от ChALkeR

Ну и в чем сложность? Я так и сделал. cmake проверяет, есть ли в системе СUDA. Если есть - компилирует для GPU, если нет - для CPU.

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.