Видеокарты AMD и openCL.
Я правильно понимаю что видеокарты amd нельзя использовать для десктопа и для вычислений (нейронки\opencv + opencl) одновременно? Использовал Rocm для tensorflow — при использовании на экране появлялись различные артефакты, нейросеть выдавала плохие результаты, думал неправильно архитектуру строил. Новый rocm пришел сломанный, запустил ту же нейронку на CPU и все моментально заработало, перепроверил несколько раз. Получается нельзя использовать одновременно и GUI, и opencl?
Дистрибутив: ubuntu 20.04 — ubuntu 20.10
Видеокарта: rx 580

Landgraf ★★★★★
01.11.20 20:12:13 MSK
да что такое, опять на амд наговаривают. надеюсь модераторы быстро тебя приструнят
anonymous
( 01.11.20 20:13:35 MSK )
Проверяй свою видюху или свой код.
В своё время многие майнили биткоины на одной видеокарте и использовали туже видеокарту для просмотра ютуба и всё это на Linux.
fsb4000 ★★★★★
( 01.11.20 20:15:05 MSK )
Ответ на: комментарий от fsb4000 01.11.20 20:15:05 MSK
Нет, это rocm — глючное говнище, в mesa ещё глючнее. Кому хочется OpenCL ,в линухе на картах амд — ставьте проприетарный драйвер
anonymous
( 01.11.20 20:18:10 MSK )
Ответ на: комментарий от fsb4000 01.11.20 20:15:05 MSK

Я на ней играл в тяжелые игры и не замечал проблем, хотя нагрузка была еще та, так что не уверен что дело в видеокарте. +гонял нативные линуксовые бенчмарки и проблем не было.
Landgraf ★★★★★
( 01.11.20 20:19:33 MSK ) автор топика
Ответ на: комментарий от anonymous 01.11.20 20:18:10 MSK

В mesa есть реализация opencl? У проприетарного драйвера нет поддержки ubuntu 20.10 к сожалению. Слышал что можно использовать opencl из него отдельно, но не уверен что оно будет работать с тем же tensorflow, есть такой опыт?
Landgraf ★★★★★
( 01.11.20 20:22:12 MSK ) автор топика
Ответ на: комментарий от Landgraf 01.11.20 20:19:33 MSK
У меня сейчас Windows 10 и Gtx 1060, так что не могу ничего проверить.
Но когда-то была Radeon 5870 и Linux, и я писал на OpenCL и у меня всё работало…
fsb4000 ★★★★★
( 01.11.20 20:23:40 MSK )
rocm пришел сломанный, запустил ту же нейронку на CPU и все моментально заработало, перепроверил несколько раз. Получается нельзя использовать одновременно и GUI, и opencl?
Амдшники ждуны фиксов по жизни, купят предтопы и топы и в итоге пользуются CPU 😀
RedEyedMan666 ★
( 01.11.20 20:24:48 MSK )
Ответ на: комментарий от fsb4000 01.11.20 20:23:40 MSK
у тебя была карта другой архитектуры с другим драйвером
Как установить и использовать в расчетах OpenCL

Прошло уже больше года как стало возможным писать программы для OpenCL в MQL5, и теперь при старте терминала MetaTrader 5 в Журнал выводятся сообщения о найденных устройствах с поддержкой OpenCL, как показано на картинке.

В данном случае терминал MetaTrader 5 определил, что для запуска OpenCL расчетов прямо из MQL5-программы доступно 4 способа: две видеокарты от NVIDIA (OpenCL 1.1) и AMD (OpenCL 1.2), а также на выбор два варианта использования центрального процессора Intel Core-i7 — в зависимости от специально установленного драйвера.
Если на вашем компьютере уже есть подходящее устройство с поддержкой OpenCL версии 1.1 и выше, то можете смело пропускать описание и сразу же переходить к разделу Сравнение производительности, чтобы своими глазами увидеть выигрыш в скорости для задач, допускающих распараллеливание.
OpenCL — это интересно!
Однако еще далеко не все пользователи смогли оценить преимущество использования параллельных вычислений в своих советниках, индикаторах или скриптах, так как не знают о новых возможностях или не имеют подходящих знаний.
Все дело в том, что для запуска любой MQL5 программы, использующей OpenCL, необходимо установить соответствующее программное обеспечение. Поэтому многие так и не сумели запустить скрипт расчета фрактала Мандельброта и многие другие программы, представленные на форуме MQL5.community.
В этой статье мы покажем, как установить OpenCL на Ваш персональный компьютер, чтобы Вы смогли лично убедиться в преимуществах использования параллельных вычислений в MQL5. Здесь мы не будем рассматривать подробности написания программ для OpenCL в MQL5 — на эту тему на сайте уже имеются две замечательные статьи:
- OpenCL: Мост в параллельные миры и
- OpenCL: от наивного кодирования — к более осмысленному.
Что такое OpenCL
OpenCL — это открытый стандарт параллельного программирования, разработанный консорциумом Khronos Group в 2008 году. Этот стандарт позволяет создавать приложения, которые могли бы выполняться параллельно на различных по архитектуре графических (GPU) или центральных (CPU) процессорах, расположенных в некоторой гетерогенной системе.
Другими словами OpenCL позволяет задействовать для вычислений одной задачи все ядра центрального процессора или все вычислительные мощности видеокарты, что, в конечном счете, уменьшает время выполнения программы. И поэтому использование OpenCL является очень полезным для задач, связанных с трудоемкими и ресурсозатратными вычислениями.
Например, применительно к MQL5, увеличение быстродействия может быть очень полезно для некоторого скрипта (индикатора или эксперта), который проводит сложный и длительный анализ исторических данных по нескольким символам и таймфреймам (здесь стоит отметить, что MQL5 программа, претендующая на параллельное исполнение, должна быть написана специальным образом при помощи OpenCL API).
Поддержка OpenCL
Поддержка OpenCL в MQL5 начинается с версии стандарта 1.1, который появился в июне 2010 года. Поэтому, для использования параллельных вычислений, необходимо иметь относительно свежее программное и аппаратное обеспечение, соответствующее этому стандарту.
При всем этом важно отметить, что для использования OpenCL совсем не обязательно иметь видеокарту на Вашем ПК — вполне достаточно будет и наличия центрального процессора. А это значит, что практически каждый пользователь имеет возможность использовать OpenCL для сокращения времени выполнения своих MQL5 программ.
Конечно, по быстродействию распределенных вычислений центральные процессоры значительно уступают своим соперникам из «графического цеха», однако и хорошего многоядерного центрального процессора Вам будет вполне достаточно для получения значительного увеличения быстродействия. Но мы отвлеклись, идем дальше.
Как уже говорилось выше, для параллельных вычислений можно использовать как видеокарты, так и центральные процессоры. На рынке производителей соответствующего устройств есть три основных компании лидера — это Intel, AMD и NVidia. В следующей таблице представлена информация об устройствах и операционных системах, которые поддерживают OpenCL 1.1 для каждого из этих трех производителей:
AMD Radeon HD Graphics начиная с серии 6400;
ATI Radeon HD Graphics начиная с серии 5400;
ATI FirePro Graphics серии A300, S, W, V;
ATI Mobility Radeon HD начиная с серии 5400;
ATI FirePro M7820 M5800 (подробнее здесь).
Процессоры семейства K8 и старше:
Opteron, Athlon 64, Athlon 64 FX, Athlon 64 X2, Sempron, Turion 64, Turion 64 X2, Phenom, Phenom II (подробнее здесь).
APU (гибридный процессор, включающий в себя центральный и графический процессоры):
Также на официальном сайте разработчика Khronos Group вы можете ознакомиться с полной информацией о том, какие устройства и софт необходимы для поддержки стандарта OpenCL для каждой из версий.
Проверьте, установлено ли на вашем персональном компьютере хотя бы одно устройство (CPU или GPU) и операционная система, которые поддерживают OpenCL 1.1. Если таковые имеются, то Вы смело можете переходить к следующему параграфу, который описывает процедуру настройки OpenCL в зависимости от производителя аппаратного обеспечения.
Настройка OpenCL
Если на Вашем ПК установлено необходимое оборудование и операционная система, то для использования параллельных вычислений в MetaTrader 5 нужно сделать всего один шаг — настроить OpenCL для одного из Ваших устройств.
Процедура настройки OpenCL различается в зависимости от того какое аппаратное обеспечение Вы собрались использовать — видеокарту или центральный процессор. Если терминал MetaTrader 5 распознал видеокарту с поддержкой OpenCL, то достаточно сделать апдейт ее драйвера до последней версии.
Ставить для центрального процессора специальный комплект средств разработки (SDK) потребуется только в том случае, если на компьютере не установлена подходящая видеокарта.
Важно: Если уже есть установленная видеокарта с поддержкой OpenCL, то ставить софтверную версию для эмуляции OpenCL на центральном процессоре не нужно!
Ну, разве что для проведения экспериментов, так как видеокарты для использования OpenCL имеют безусловное преимущество.
Следующие параграфы описывают процедуру настройки OpenCL в зависимости от производителя. Вы можете перейти сразу на интересующую Вас инструкцию настройки, нажав на соответствующую ссылку:
- настройка для процессоров от Intel;
- настройка для видеокарт от AMD;
- настройка для процессоров от AMD;
- настройка для видеокарт от NVidia.
1. Intel
Для использования OpenCL на процессорах Intel необходимо скачать и установить «Intel SDK for OpenCL Applications«. Для этого перейдем на страницу сайта разработчика, с которой это можно сделать.

Рис. 1.1. Страница загрузки Intel SDK для OpenCL.
Здесь представлена общая информация об OpenCL, а также список доступных пакетов для скачивания. Чтобы скачать представленные пакеты нужно нажать на кнопку «Compare and Download Products» в правом верхнем углу страницы.

Рис. 1.2. Информация о доступных пакетах и требованиях для установки.
После нажатия на кнопку появится окошко, в котором будет представлена информация о том, для каких типов процессоров и операционных систем подходят указанные пакеты. Выбираем и загружаем подходящий пакет, нажав на кнопку «Download» над его изображением.

Рис. 1.3. Ссылки для скачивания SDK.
Появится еще одно окошко с ссылками для скачивания — выбираем и загружаем SDK нужной битности. Ждем несколько минут и, после завершения загрузки, запускаем полученный файл. Подтверждаем установку компонентов SDK и распаковываем файлы для установки в один из каталогов.

Рис. 1.4. Начало установки Intel SDK для OpenCL.
На экране появится окно установки «Intel SDK for OpenCL Applications» с поддержкой OpenCL 1.2. Жмем «Next» и следуем инструкции по установке.

Рис. 1.5. Принятие лицензионного соглашения.
Соглашаемся с условиями лицензионного соглашения. После этого в окне отобразятся компоненты, которые будут установлены — нажимаем «Next» и идем далее.

Рис. 1.6. Интеграция SDK c Visual Studio.
Если на Вашем ПК установлена «Microsoft Visual Studio» начиная с 2008 года, то будет предложено провести интеграцию для использования OpenCL также внутри нее. Далее остается лишь выбрать для каких пользователей будут доступны установленные компоненты и путь для установки SDK, после чего нажать «Install«.

Рис. 1.7. Процесс установки.
Начнется процесс установки, который займет пару минут, после чего на экране отобразится результат успешного выполнения. Нажимаем «Finish» и заканчиваем установку.

Рис. 1.8. Завершение установки.
2.1. Видеокарты и APU от AMD
Для установки OpenCL на видеокарту от AMD обновим ее драйвер до последней версии. Для этого переходим на страницу загрузки драйверов.

Рис. 2.1.1. Страница загрузки драйвера AMD.
Если вы знаете характеристики Вашей видеокарты, то драйвер можно найти, заполнив форму в левой части страницы. После выбора нужных строк из списков, жмем на «Display Results» для поиска подходящего драйвера.

Рис. 2.1.2. Загрузка AMD Catalyst.
Система подберет несколько драйверов в наборе «Catalyst Software Suite«, в том числе и драйвер для OpenCL. Загружаем «Catalyst» и запускаем полученный файл.

Рис. 2.1.3. Страница загрузки приложения для определения типа видеокарты и версии драйвера.
Также можно воспользоваться системой автоматического поиска драйверов, нажав на соответствующую ссылку в правом верхнем углу страницы (рис. 2.1.1.). Вам будет предложено загрузить приложение «AMD Driver Autodetect» — делаем это. Затем запускаем загруженное приложение.

Рис. 2.1.4. Приложение для определения и загрузки подходящего драйвера.
Приложение проведет анализ системы и предложит загрузить подходящий драйвер для видеокарты. Загружаем его и запускаем полученный файл. Программа установки предложит выбрать директорию для распаковки файлов — выбираем и нажимаем «Install«.

Рис. 2.1.5. Программа установки AMD Catalyst.
Появится окошко с лицензионным соглашением — принимаем его. Далее выбираем режим быстрой установки, каталог для установки «AMD Catalyst» и нажимаем далее.

Рис. 2.1.6. Процесс установки.
Процесс установки займет пару минут, после чего появится уведомление об успешном завершении.

Рис. 2.1.7. Завершение установки.
2.2. Процессоры от AMD
Для установки OpenCL на процессор от AMD необходимо скачать и установить «AMD APP SDK» последней версии. Для этого переходим на следующую страницу на официальном сайте разработчика.

Рис. 2.2.1. Страница загрузки AMD APP SDK.
На этой странице есть некоторая информация о самом SDK и о том, что представляет собой OpenCL. Нас же интересует ссылка «Go to Downloads» внизу описания — переходим по ней.

Рис. 2.2.2. Таблица доступных для скачивания SDK.
Внизу открывшейся страницы будет расположена таблица со списком последних версий SDK для разных операционных систем различной битности, а также ссылки для их скачивания. Выбираем подходящую версию, нажав на соответствующую ссылку. Появится страница с лицензионным соглашением — принимаем его, после чего начнется процесс загрузки.
После запуска загруженного установщика Вам будет предложено распаковать файлы для установки в некоторую директорию. А далее начнется процесс установки уже знакомого нам «AMD Catalyst», содержащего внутри себя «AMD APP SDK» для вашего центрального процессора. Процедуру установки «Катализатора» можно посмотреть на рисунках 2.1.5 — 2.1.7 в пункте 2.1.
3. NVidia
Если у Вас имеется видеокарта от NVidia, то для установки OpenCL также необходимо обновить ее драйвер до последней версии. Для этого откроем страницу загрузки драйверов на сайте разработчика.

Рис. 3.1. Страница загрузки драйвера NVidia.
На странице расположено меню, которое позволит найти интересующий драйвер либо вручную, либо в автоматическом режиме. В ручном режиме необходимо ввести тип видеокарты, серию, тип операционной системы и нажать на «Поиск«. После этого система подберет самый свежий драйвер подходящий для Вашей видеокарты, и предложит скачать его.

Рис. 3.2. Загрузка выбранного драйвера.
В автоматическом режиме нужно нажать на «Графические драйверы«, после чего вам будет предложено выполнить сканирование вашей системы при помощи java-приложения «GPU_Reader«.

Рис. 3.3. Запуск приложения для определения типа видеокарты и версии драйвера.
Запускаем приложение, нажав на «Run«. Ждем несколько секунд, после чего на странице появится информация о Вашей видеокарте, текущей версии установленного драйвера и версии самого свежего, рекомендованного для установки драйвера. Жмем на «Download» и попадаем на страницу загрузки, показанную на рисунке 3.2.

Рис. 3.4. Результат автоматического определения типа видеокарты и версии драйвера.
Нажимаем «Загрузить сейчас» и соглашаемся с лицензионным соглашением, нажав на «Принять и скачать«.

Рис. 3.5. Принятие лицензионного соглашения и скачивание драйвера.
Таким образом получаем последнюю версию драйвера для видеокарты. Далее запускаем полученный файл — Вам будет предложено распаковать файлы для установки драйвера в один из каталогов. Распаковываем файлы, после чего начинается процесс установки. Сначала нужно еще раз принять лицензионное соглашение.

Рис. 3.6. Принятие лицензионного соглашения на первом этапе установки.
Затем выбираем «Экспресс» режим установки и нажимаем «Далее«. Дополнительно Вам будет предложено установить утилиту «NVidia Experience» — делать это не обязательно.

Рис. 3.7. Выбор режима установки.
После этого начнется непосредственно процесс установки драйвера, сопровождаемый рекламой последних разработок NVidia — ждем пару минут.

Рис. 3.8. Процесс установки.
И всё, драйвер установлен, осталось лишь перезагрузить систему, и Вы сможете использовать OpenCL внутри терминала MetaTrader 5.

Рис. 3.9. Завершение установки.
Сравнение производительности
Для того чтобы продемонстрировать преимущество использования OpenCL в MQL5, был написан скрипт OpenCL_Sample.mq5, который вычисляет значения функции от двух переменных на некотором множестве и отображает результат в окне графика при помощи графической метки (OBJ_BITMAP_LABEL). Вычисления проводятся двумя способами — с использованием OpenCL и без. Эти блоки оформлены соответственно в функциях WithOpenCL() и WithoutOpenCL():
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() < //. Print("\nРасчеты без OpenCL:"); WithoutOpenCL(values1,colors1,w,h,size,const_1,const_2); //--- расчеты с OpenCL Print("\nРасчеты с OpenCL:"); WithOpenCL(values2,colors2,w,h,size,const_1,const_2); //. > //+------------------------------------------------------------------+ //| Проведение вычислений без использования OpenCL | //+------------------------------------------------------------------+ void WithoutOpenCL(float &values[],uint &colors[],const uint w,const uint h, const uint size,const uint const_1,const uint const_2) < //--- запомним время начала расчетов uint x=GetTickCount(); //--- расчет значений функции for(uint i=0;ifor(uint j=0;j //--- распечатаем время расчета значений функции Print("Вычисление значений функции functions">IntegerToString(GetTickCount()-x)+" мс"); //--- определим минимальное значение, и разницу между //--- минимальным и максимальным значениями точек множества float min,dif; GetMinAndDifference(values,size,min,dif); //--- запомним время начала расчетов x=GetTickCount(); //--- расчет цветов для раскраски множества uint a; for(uint i=0;i uint)MathRound(255*(values[i]-min)/dif); colors[i]=const_1*(a/16)+const_2*(a%16); > //--- распечатаем время определения цветов для раскраски множества Print("Определение цветов раскраски functions">IntegerToString(GetTickCount()-x)+" мс"); > //+------------------------------------------------------------------+ //| Проведение вычислений с использованием OpenCL | //+------------------------------------------------------------------+ void WithOpenCL(float &values[],uint &colors[],const uint w,const uint h, const uint size,const uint const_1,const uint const_2) < //--- переменные для использования OpenCL int cl_ctx; int cl_prg; int cl_krn_1; int cl_krn_2; int cl_mem_1; int cl_mem_2; //--- создание контекста для OpenCL (выбор девайса) if((cl_ctx=CLContextCreate(CL_USE_ANY))==INVALID_HANDLE) < Print("OpenCL not found"); return; > //--- создание программы на основе кода в строке cl_src if((cl_prg=CLProgramCreate(cl_ctx,cl_src))==INVALID_HANDLE) < CLContextFree(cl_ctx); Print("OpenCL program create failed"); return; > //--- создание кернела для расчета значений функции от двух переменных if((cl_krn_1=CLKernelCreate(cl_prg,"Func"))==INVALID_HANDLE) < CLProgramFree(cl_prg); CLContextFree(cl_ctx); Print("OpenCL kernel_1 create failed"); return; > //--- кернел для раскраски точек множества на плоскости if((cl_krn_2=CLKernelCreate(cl_prg,"Grad"))==INVALID_HANDLE) < CLKernelFree(cl_krn_1); CLProgramFree(cl_prg); CLContextFree(cl_ctx); Print("OpenCL kernel_2 create failed"); return; > //--- буфер OpenCL для получения значений функции if((cl_mem_1=CLBufferCreate(cl_ctx,size*sizeof(float),CL_MEM_READ_WRITE))==INVALID_HANDLE) < CLKernelFree(cl_krn_2); CLKernelFree(cl_krn_1); CLProgramFree(cl_prg); CLContextFree(cl_ctx); Print("OpenCL buffer create failed"); return; > //--- буфер OpenCL для получения цветов точек if((cl_mem_2=CLBufferCreate(cl_ctx,size*sizeof(uint),CL_MEM_READ_WRITE))==INVALID_HANDLE) < CLBufferFree(cl_mem_1); CLKernelFree(cl_krn_2); CLKernelFree(cl_krn_1); CLProgramFree(cl_prg); CLContextFree(cl_ctx); Print("OpenCL buffer create failed"); return; > //--- запомним время начала расчетов uint x=GetTickCount(); //--- массив задает индексы, начиная с которых будут проводиться расчеты uint offset[2]=0,0>; //--- массив задает пределы, до которых будут проводиться расчеты uint work[2]; work[0]=h; work[1]=w; //--- расчет значений функции //--- передадим значения в кернел CLSetKernelArg(cl_krn_1,0,InpXStart); CLSetKernelArg(cl_krn_1,1,InpYStart); CLSetKernelArg(cl_krn_1,2,InpXStep); CLSetKernelArg(cl_krn_1,3,InpYStep); CLSetKernelArgMem(cl_krn_1,4,cl_mem_1); //--- запустим выполнение кернела CLExecute(cl_krn_1,2,offset,work); //--- прочитаем полученные значения в массив CLBufferRead(cl_mem_1,values); //--- распечатаем время расчета значений функции Print("Вычисление значений функции functions">IntegerToString(GetTickCount()-x)+" мс"); //--- определим минимальное значение, и разницу между //--- минимальным и максимальным значениями точек множества float min,dif; GetMinAndDifference(values,size,min,dif); //--- запомним время начала расчетов x=GetTickCount(); //--- зададим пределы для вычислений uint offset2[1]=0>; uint work2[1]; work2[0]=size; //--- расчет цветов для раскраски множества //--- передадим значения в кернел CLSetKernelArg(cl_krn_2,0,min); CLSetKernelArg(cl_krn_2,1,dif); CLSetKernelArg(cl_krn_2,2,const_1); CLSetKernelArg(cl_krn_2,3,const_2); CLSetKernelArgMem(cl_krn_2,4,cl_mem_1); CLSetKernelArgMem(cl_krn_2,5,cl_mem_2); //--- запустим выполнение кернела CLExecute(cl_krn_2,1,offset2,work2); //--- прочитаем полученные значения в массив CLBufferRead(cl_mem_2,colors); //--- распечатаем время определения цветов для раскраски множества Print("Определение цветов раскраски functions">IntegerToString(GetTickCount()-x)+" мс"); //--- удаление объектов OpenCL CLBufferFree(cl_mem_1); CLBufferFree(cl_mem_2); CLKernelFree(cl_krn_1); CLKernelFree(cl_krn_2); CLProgramFree(cl_prg); CLContextFree(cl_ctx); >
После выполнения скрипта, в окне графика на несколько секунд появится раскрашенное множество значений функции. Каждому из них сопоставляется один из тонов цвета, выбранного во входных параметрах (красный, зеленый или синий).

Результат работы скрипта для множества точек плоскости от -22 до 22 с шагом 0.1.
Помимо самой картинки в журнал «Эксперты» выводится время расчета функций каждым из способов, что позволяет легко убедиться в преимуществе и целесообразности использования OpenCL в MQL5. Увеличим значение шага и получим результаты работы скрипта:

Расчет значений функции и их раскраска двумя способами.
Суммарное время расчета функций на CPU с OpenCL уменьшилось более чем в 5 раз, а ведь это еще далеко не предел! Хорошо известно, что расчеты на современных видеокартах с поддержкой OpenCL выполняются на порядок быстрее, чем на процессорах. Этот факт хорошо отражают результаты выполнения скрипта на разных устройствах с OpenCL, представленные в следующей таблице:
| Устройство с OpenCL | Время выполнения без OpenCL в миллисекундах | Время выполнения с OpenCL в миллисекундах | Выигрыш |
|---|---|---|---|
| AMD Radeon HD 7970 | 20 361 мс | 171 мс | 119.07 раз |
| NVidia GeForce GT 630 | 24 742 мс | 578 мс | 42.8 раз |
| Intel Core i5 430M | 27 222 мс | 5 428 мс | 5.01 раз |
| AMD Athlon X2 Dual-Core QL-65 | 45 723 мс | 9 516 мс | 4.8 раз |
Как видно, использование OpenCL на топовой видеокарте от AMD привело к сокращению времени расчетов более чем в 100 раз! Не менее значимы результаты и на чуть более старой видеокарте GeForce GT 630 от 2011 года — здесь разница во времени в 42 раза. Процессоры от Intel и AMD замыкают таблицу, однако достигаемое на них ускорение будет также очень и очень полезным для расчетов сложных задач.
На этом статья подошла к своему концу. Таблица сравнений наглядно демонстрирует преимущество использования параллельных вычислений в задачах массовой обработки данных. Остается сделать всего лишь один шаг — установить подходящий драйвер для Вашей видеокарты или процессора.
Прикрепленные файлы |
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
OpenCL. Что это такое и зачем он нужен? (если есть CUDA)

Многие, наверное, слышали или читали на хабре об OpenCL – новом стандарте для разработки приложений для гетерогенных систем. Именно так, это не стандарт для разработки приложений для GPU, как многие считают, OpenCL изначально задумывался как нечто большее: единый стандарт для написания приложений, которые должны исполняться в системе, где установлены различные по архитектуре процессоры, ускорители и платы расширения.
Предпосылки появления OpenCL
Основным местом, где можно встретить гетерогенные системы, являются высокопроизводительные вычисления: от моделирования физических процессов в пограничном слое до кодирования видео и рендеринга трехмерных сцен. Раньше подобные задачи решали применяя суперкомпьютеры либо очень мощные настольные системы. С появлением технологий NVidia CUDA/AMD Stream стало возможным относительно просто писать программы, использующие вычислительные возможности GPU.
Стоит отметить, что подобные программы создавались и раньше, но именно NVidiaа CUDA обеспечила рост популярности GPGPU за счет облегчения процесса создания GPGPU приложений. Первые GPGPU приложения в качестве ядер (kernel в CUDA и OpenCL) использовали шейдеры, а данные запаковывались в текстуры. Таким образом необходимо было быть хорошо знакомым OpenGL или DirectX. Чуть позже появился язык Brook, который немного упрощал жизнь программиста (на основе этого языка создавалась AMD Stream (в ней используется Brook+) ).
CUDA стала набирать обороты, а между тем (а точнее несколько ранее) в кузнице, расположенной глубоко под землей, у подножия горы Фуджи (Fuji), японскими инженерами был выкован процессор всевластия Cell (родился он в сотрудничестве IBM, Sony и Toshiba). В настоящее время Cell используется во всех суперкомпьютерах, поставляемых IBM, на его основе постоены самые производительные в мире суперкомпьютеры (по данным top500). Чуть менее года назад компания Toshiba объявила о выпуске платы расширения SpursEngine для PC для ускорения декодирования видео и прочих ресурсоемких операций, используя вычислительные блоки (SPE), разработанные для Cell. В википедии есть статья, в кратце описывающая SpursEngine и его отличия от Cell.
Примерно в то же время (около года назад) оживилась и S3 Graphics (на самом деле VIA), представив на суд общественности свой новый графический адаптер S3 Graphics Chrome 500. По заявлениям самой компании этот адаптер так же умеет ускорять всяческие вычисления. В комплекте с ним поставляется программный продукт (графический редактор), который использует все прелести такого ускорения. Описание технологии на сайте производителя.
Итак, что мы имеем: машина, на которой проводятся вычисления может содержать процессоры x86, x86-64, Itanium, SpursEngine (Cell), NVidia GPU, AMD GPU, VIA (S3 Graphics) GPU. Для каждого из этих типов процессов существует свой SDK (ну кроме разве что VIA), свой язык программирования и программная модель. То есть если Вы захотите чтобы ваш движок рендеринга или программа расчета нагрузок на крыло боинга 787 работала на простой рабочей станции, суперкомпьютере BlueGene, или компьютере оборудованном двумя ускорителями NVidia Tesla – Вам будет необходимо переписывать достаточно большую часть программы, так как каждая из платформ в силу своей архитектуры имеет набор жестких ограничений.
Так как программисты – народ ленивый, и не хотят писать одно и то же для 5 различных платформ с учетом всех особенностей и учиться использовать разные программные средства и модели, а заказчики – народ жадный и не хотят платить за программу для каждой платформы как за отдельный продукт и оплачивать курсы обучения для программистов, было решено создать некий единый стандарт для программ, исполняющихся в гетерогенной среде. Это означает, что программа, вообще говоря, должна быть способна исполняться на компьютере, в котором установлены одновременно GPU NVidia и AMD, Toshiba SpursEngine итд.
Решение проблемы
Для разработки открытого стандарта решили привлечь людей, у которых уже есть опыт (весьма успешный) в разработке подобного стандарта: Khronos Group, на чьей совести уже OpenGL и OpenML и еще много всего. OpenCL является торговой маркой Apple Inc., как сказано на сайте Khronos Group: «OpenCL is a trademark of Apple Inc., and is used under license by Khronos. The OpenCL logo and guidelines for its usage in association with Conformant products can be found here:
http://developer.apple.com/softwarelicensing/agreements/opencl.html». В разработке (и финансировании, конечно же), кроме Apple, участвовали такие воротилы IT как AMD, IBM, Activision Blizzard, Intel, NVidia итд. (полный список тут).
Компания NVidia особо не афишировала свое участие в проекте, и быстрыми темпами наращивала функциональность и производительность CUDA. Тем временем несколько ведущих инженеров NVidia участвовали в создании OpenCL. Вероятно, именно участие NVidia в большой мере определило синтаксическую и идеологическую схожесть OpenCL и CUDA. Впрочем программисты от этого только выиграли – проще будет перейти от CUDA к OpenCL при необходимости.
Первая версия стандарта была опубликована в конце 2008 года и с тех пор уже успела претерпеть несколько ревизий.
Почти сразу после того как стандарт был опубликован, компания NVidia заявила что поддержка OpenCL не составит никакой сложности для нее и в скором времени будет реализована в рамках GPU Computing SDK поверх CUDA Driver API. Ничего подобного от главного конкурента NVidia – AMD слышно не было.
Драйвер для OpenCL был выпущен NVidia и прошел проверку на совместимость со стандартом, но все еще доступен только для ограниченного круга людей – зарегистрированных разработчиков (заявку на регистрацию подать может любой желающий, в моем случае рассмотрение заняло 2 недели, после чего по почте пришло приглашение). Ограничения доступа к SDK и драйверам заставляют задуматься о том, что на данный момент существуют какие-то проблемы или ошибки, которые пока не удается исправить, то есть продукт все еще находится в стадии бета-тестирования.
Реализация OpenCL для NVidia была достаточно легкой задачей, так как основные идеи сходны: и CUDA и OpenCL – некоторые расширения языка С, со сходным синтаксисом, использующие одинаковую программную модель в качестве основной: Data Parallel (SIMD), так же OpenCL поддерживает Task Parallel programming model – модель, когда одновременно могут выполняться различные kernel (work-group содержит один элемент). О схожести двух технологий говорит даже то что NVidia выпустила специальный документ о том как писать для CUDA так, чтобы потом легко перейти на OpenCL.
Как обстоят дела на настоящий момент
Основной проблемой реализации OpenCL от NVidia является низкая производительность по сравнению с CUDA, но с каждым новым релизом драйверов производительность OpenCL под управлением CUDA все ближе подбирается к производительности CUDA приложений. По заявлениям разработчиков такой же путь проделала и производительность самих CUDA приложений – от сравнительно невысокой на ранний версиях драйверов до впечатляющей в настоящее время.
А что же делала в этот момент AMD? Ведь именно AMD (как сторонник открытых стандартов – закрытый PhysX vs. открытый Havoc; дорогой Intel Thread Profiler vs. бесплатный AMD CodeAnalyst) делала большие ставки на новую технологию, учитывая что AMD Stream не удавалось хоть сколь-нибудь соревноваться в популярности с NVidia CUDA – виною тому отставание Stream от CUDA в техническом плане.
Летом 2009 года компания AMD сделала заявление о поддержке и соответствии стандарту OpenCL в новой версии Stream SDK. На деле же оказалось, что поддержка была реализована только для CPU. Да, именно так, это ничему не противоречит – OpenCL стандарт для гетерогенных систем и ничего не мешает Вам запустить kernel на CPU, более того – это очень удобно в случае если в системе нет другого OpenCL устройства. В таком случае программа будет продолжать работать, только медленнее. Или же вы можете задействовать все вычислительные мощности, которые есть в компьютере – как GPU так и CPU, хотя на практике это не имеет особого смысла, так как время исполнения kernel’ов которые исполняются на CPU будет намного больше тех что исполняются на GPU – скорость процессора станет узким местом. Зато для отладки приложений это более чем удобно.
Поддержка OpenCL для графических адаптеров AMD так же не заставила себя долго ждать – по последним сообщениям компании версия для графических чипов сейчас находится на стадии подтверждения соответствия спецификациям стандарта. После чего она станет доступна всем желающим.
Так как OpenCL должен работать поверх некоторой специфической для железа оболочки, а значит для того чтобы можно этот стандарт действительно стал единым для различных гетерогенных систем – надо чтобы соответствующие оболочки (драйверы) были выпущены и для IBM Cell и для Intel Larrabie. Пока от этих гигантов IT ничего не слышно, таким образом OpenCL остается еще одним средством разработки для GPU на ряду с CUDA, Stream и DirectX Compute.
- OpenTK — библиотека-обертка над OpenGL, OpenAL и OpenCL для .Net.
- PyOpenCL – обертка над OpenCL для Pyton.
- Java обертка для OpenCL.
Заключение
Технология OpenCL представляет интерес для различных компания IT сферы – от разработчиков игр до производителей чипов, а это означает что у нее большие шансы стать фактическим стандартом для разработки высокопроизводительных вычислений, отобрав этот титул у главенствующей в этом секторе CUDA.
В будущем я планирую более подробную статью о самом OpenCL, описывающую что из себя представляет эта технология, ее особенности, достоинства и недостатки.
Спасибо за внимание.
Как скачать opencl.dll и исправить ошибки при запуске игр и программ

Opencl.dll — ещё один файл, который часто вызывает ошибки как при входе в Windows 10, 8.1 и Windows 7, так и при запуске игр или программ, такие как «Не удается продолжить выполнение кода, поскольку система не обнаружила opencl.dll», «Запуск программы не возможен, так как на компьютере отсутствует opencl.dll», «Системная ошибка» при запуске amdrsserv.exe и другие.
В этой инструкции подробно о том, как скачать и установить opencl.dll x64 и 32-бит и исправить рассматриваемые ошибки в Windows.
- Исправление ошибок opencl.dll
- Дополнительная информация
- Видео инструкция
Как исправить системные ошибки, вызванные отсутствием opencl.dll

Opencl.dll — одна из библиотек DLL, используемых в программах, использующих технологии OpenCL (Open Computing Language) для просчета графики или других операций с использованием GPU (видеокарты). Технология поддерживается NVIDIA, Intel и AMD.

Скачивать этот файл отдельно со стороннего сайта и пробовать его зарегистрировать в Windows вручную можно, но не является лучшим методом. В случае видеокарт AMD ранее был доступен отдельный OpenCL Driver, но сегодня для систем Windows 10, 8.1 или Windows 7 он не актуален.
Файл opencl.dll присутствует в комплекте драйверов для всех современных дискретных и интегрированных видеокарт: NVIDIA GeForce, AMD Radeon и Intel HD Graphics. Поэтому лучшее и наиболее часто работающее решение — установка этих драйверов:
- Внимание: «обновление» драйвера кнопкой «Обновить» в диспетчере устройств — это не то, что требуется: так мы получим не все файлы и более того, этот метод иногда и вовсе не производит обновления.
- Если вы, еще до того, как нашли это руководство откуда-то скачали и поместили вручную файлы opencl.dll в папки C:\Windows\System32 и C:\Windows\SysWOW64, лучше их оттуда убрать, они могут помешать следующим шагам.
- Скачайте последний драйвер для вашей видеокарты с официального сайта NVIDIA, AMD или Intel. Внимание: если у вас есть и интегрированная и дискретная видеокарта, например, AMD и Intel, загрузите оба драйвера. Особенно это важно для драйверов AMD, без сопутствующей установки драйвера от Intel (при наличии и этого GPU), ошибки amdrsserv.exe могут продолжать появляться.
- Будет полезным (но обычно не обязательно), если перед запуском установщиков вы удалите текущие драйверы: для некоторых это возможно сделать в Панель управления — Программы и компоненты, для некоторых — с помощью бесплатной утилиты Display Driver Uninstaller (DDU).
- Установите загруженный драйвер или драйверы (при наличии нескольких GPU). В случае если установщик в параметрах предлагает выполнить «чистую установку» (например, NVIDIA), выполните именно её.
- На всякий случай перезагрузите компьютер.
После выполнения указанных действий файлы opencl.dll должны автоматически оказаться в папке C:\Windows\System32, а в Windows x64 — еще и в C:\Windows\SysWOW64, а ошибки «Не удается продолжить выполнение кода, поскольку система не обнаружила opencl.dll», «Системная ошибка amdrsserv.exe» (напрямую связанная с драйверами AMD, которые при появлении этой ошибки следует переустановить вручную) и подобные не должны вас больше побеспокоить.
Дополнительная информация
Если эта статья — не первая, которую вы находите на тему ошибок opencl.dll, вы вероятнее встречали рекомендацию скачать этот файл, скопировать в ранее упоминавшиеся папки и выполнить команду regsvr32.exe opencl.dll (или иные варианты этой команды). Простое копирование файла иногда может исправить ошибку. А проблема с этим методом в том, что зарегистрировать (установить) эту DLL таким методом не получится.
Вы получите сообщение о том, что «Точка входа DllRegisterServer» не найдена, иначе говоря, файл не поддерживает механизм регистрации с помощью regsvr32.dll. Отдельно следует отметить, что в папках System32 и SysWOW64 должны быть разные файлы opencl.dll — для x64 и x86, а обычно предлагается один, что может приводить к ошибкам.
Загрузка и установка opencl.dll — видео инструкция
А вдруг и это будет интересно:
- Лучшие бесплатные программы для Windows
- Компьютер не видит внешний диск — как исправить?
- TakeOwnershipEx — получение полного доступа к папкам и файлам и восстановление прав по умолчанию
- Ошибка 0x8007000d в Windows 11 или 10 — как исправить?
- Недопустимая конфигурация приложения в Steam — варианты решения
- Ошибка при запуске приложения 0xc0000006 — как исправить?
- Windows 11
- Windows 10
- Android
- Загрузочная флешка
- Лечение вирусов
- Восстановление данных
- Установка с флешки
- Настройка роутера
- Всё про Windows
- В контакте
- Одноклассники
-
Владимир 11.02.2023 в 13:41
- Живые обои на рабочий стол Windows 11 и Windows 10
- Лучшие бесплатные программы на каждый день
- Как скачать Windows 10 64-бит и 32-бит оригинальный ISO
- Как смотреть ТВ онлайн бесплатно
- Бесплатные программы для восстановления данных
- Лучшие бесплатные антивирусы
- Средства удаления вредоносных программ (которых не видит ваш антивирус)
- Встроенные системные утилиты Windows 10, 8 и 7, о которых многие не знают
- Бесплатные программы удаленного управления компьютером
- Запуск Windows 10 с флешки без установки
- Лучший антивирус для Windows 10
- Бесплатные программы для ремонта флешек
- Что делать, если сильно греется и выключается ноутбук
- Программы для очистки компьютера от ненужных файлов
- Лучший браузер для Windows
- Бесплатный офис для Windows
- Запуск Android игр и программ в Windows (Эмуляторы Android)
- Что делать, если компьютер не видит флешку
- Управление Android с компьютера
- Компьютер не видит внешний диск — как исправить?
- TakeOwnershipEx — получение полного доступа к папкам и файлам и восстановление прав по умолчанию
- Ошибка 0x8007000d в Windows 11 или 10 — как исправить?
- Chrome открывает поиск вместо сайта — решение
- Недопустимая конфигурация приложения в Steam — варианты решения
- Ошибка при запуске приложения 0xc0000006 — как исправить?
- Как удалить драйвер в командной строке
- Экран iPhone может быть слишком близко — как отключить?
- Winget COM Server — что это и что делать, если он грузит процессор
- Как копировать текст с картинки в приложении «Ножницы»
- The AC power adapter wattage and type cannot be determined — причины и решение
- Слышу себя, говоря в микрофон — причины и решение
- Невозможно подключиться к службе RPC в Realtek Audio Console — как исправить?
- Ошибка Application load error 5:0000065434 при запуске игры Steam
- Контакты на случай ЧП на iPhone — как добавить и зачем?
- Windows
- Android
- iPhone, iPad и Mac
- Программы
- Загрузочная флешка
- Лечение вирусов
- Восстановление данных
- Ноутбуки
- Wi-Fi и настройка роутера
- Интернет и браузеры
- Для начинающих
- Безопасность
- Ремонт компьютеров
- Windows
- Android
- iPhone, iPad и Mac
- Программы
- Загрузочная флешка
- Лечение вирусов
- Восстановление данных
- Ноутбуки
- Wi-Fi и настройка роутера
- Интернет и браузеры
- Для начинающих
- Безопасность
- Ремонт компьютеров