Обсуждение статьи "OpenCL: Мост в параллельные миры"

 

Опубликована статья OpenCL: Мост в параллельные миры:

В конце января 2012 года компания-разработчик терминала MetaTrader 5 анонсировала нативную поддержку OpenCL в MQL5. В статье на конкретном примере изложены основы программирования на OpenCL в среде MQL5 и приведены несколько примеров "наивной" оптимизации программы по быстродействию.

Статья 'OpenCL: Мост в параллельные миры'

Автор: Sceptic Philozoff

 

Огромное спасибо!

Давно ждал статьи на тему OpenCL.

Побежал читать. :)

 
Многа букаф :) Но букаф очень нужных и полезных, буду грызть сей гранит. Спасибо!
 
joo: Давно ждал статьи на тему OpenCL.

Побежал читать. :)

Да тебе-то, наверно, это не слишком нужно. Ты уже должен все это уметь.

Вот в следующей статье все будет серьезно, там по "железу" много будет.

 
Да. Действительно пока рано включать, но нужно конечно адаптировать этото стандарт для узконаправленной специализации. Возможно это только удатся сделать в следующем релизе тестра шестого по счёту хочеться раньше иметь этот функционал... 
 
GKS: Да. Действительно пока рано включать

Что рано включать, проясните, пожалуйста. Если OpenCL - то он уже включен. Все эксперименты проводились напрямую в MetaEditor 5.

P.S. Главная фишка в том, что через OCL у кодера фактически появился доступ к тому, к чему его раньше не было. Это:

- (S)SSEx, которые в Visual Studio можно включать, а в языке MQL5 без OCL - нельзя (не считая dll).

- доступ к расчетам на дискретных GPU, который дополнительно ускоряет то, что можно сделать на одном ядре в MQL5 без всяких примочек типа dll.

 
Mathemat:

1. Да тебе-то, наверно, это не слишком нужно. Ты уже должен все это уметь.

2. Вот в следующей статье все будет серьезно, там по "железу" много будет.

1. Нужно.

2. Отлично!

Остается непонятным для меня вопрос: Почему выполнение программы OCL на CPU ты называешь "эмуляцией"?  CPU - лишь одно из устройств, на ряду с GPU,  с которыми возможна работа OCL программы при наличии соответствующего драйвера для устройства (device), при этом загруженны все ядра процессора.

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
joo: Остается непонятным для меня вопрос: Почему выполнение программы OCL на CPU ты называешь "эмуляцией"?

Потому что это и есть эмуляция, медленная эмуляция. В CPU (спасибо Intel, у него умный компилятор, который ищет возможность векторизации, если ты не запретишь ее явно) распараллеливание происходит за счет инструкций (S)SSEx и, возможно, анализа зависимостей (dependencies), а в GPU есть гораздо больше возможностей, связанных с SIMD Engines. И шины там поширше, и память пошустрее - особенно локальная и приватная.

Насчет "железа". Основные рекомендации будут относиться к железу от AMD. Но многие из них с немного измененной терминологией подходят и к железу от NVidia.

 
Mathemat:

Потому что это и есть эмуляция, медленная эмуляция. В CPU (спасибо Intel, у него умный компилятор, который ищет возможность векторизации, если ты не запретишь ее явно) распараллеливание происходит за счет инструкций (S)SSEx и, возможно, анализа зависимостей (dependencies), а в GPU есть гораздо больше возможностей, связанных с SIMD Engines. И шины там поширше, и память пошустрее - особенно локальная и приватная.

Насчет "железа". Основные рекомендации будут относиться к железу от AMD. Но многие из них с немного измененной терминологией подходят и к железу от NVidia.

OpenCL (Open Computing Language) is an open royalty-free standard for general purpose parallel programming across CPUs, GPUs and other processors, giving software developers portable and efficient access to the power of these heterogeneous processing platforms.

Видишь - нет ни слова про про то, что OCL для GPU, а для остальных устройств работа в режиме эмуляции. OpenCL универсальный язык программирования для организации параллельных вычислений на любых устройствах, имеющих вычислительные ядра в количестве больше одного и имеющих поддержку OCL. Это не CUDA и не ATI Stream, которые заточены именно для GPU.

Кроме того, в некоторых случаях распараллеливание и вычисления OCL на CPU оказываются даже быстрее, чем на GPU. Сейчас я в обязательном порядке в настройках своих программ закладываю возможность выбора устройства, так как скорость вычислений напрямую зависит от количества обрабатываемых данных и "тяжести" вычислений (тоже зависит от настроек input) - иногда быстрее на GPU, иногда на CPU.

 
joo:

OpenCL (Open Computing Language) is an open royalty-free standard for general purpose parallel programming across CPUs, GPUs and other processors, giving software developers portable and efficient access to the power of these heterogeneous processing platforms.

Видишь - нет ни слова про про то, что OCL для GPU, а для остальных устройств работа в режиме эмуляции. OpenCL универсальный язык программирования для организации параллельных вычислений на любых устройствах, имеющих вычислительные ядра в количестве больше одного и имеющих поддержку OCL. Это не CUDA и не ATI Stream, которые заточены именно для GPU.

Пожалуй, в чем-то ты прав, т.к. CPU виден как девайс. Но вот некоторые данные скорее говорят о том, что это все же больше похоже на эмуляцию. Например, есть такие подозрения, что запись буфера в память девайса CLBufferWrite() в случае с CPU делается просто "для галочки", т.к. для CPU только одна глобальная память. Правда, у CPU есть еще и кэш, но что с ним и как просиходит - не знаю.

Кроме того, в некоторых случаях распараллеливание и вычисления OCL на CPU оказываются даже быстрее, чем на GPU.

Да, есть такие случаи, когда, скажем, скалярное произведение dot( ) на CPU быстрее. Но я не стал бы загадывать, что было бы быстрее, если бы сравнение было между Core 2 Duo и более мощной видяхой, чем по ссылке. Особенно если позаботиться об оптимизации алгоритма. Она ж для CPU и GPU разная, что ни говори.

 
Mathemat:

Что рано включать, проясните, пожалуйста. Если OpenCL - то он уже включен. Все эксперименты проводились напрямую в MetaEditor 5.

P.S. Главная фишка в том, что через OCL у кодера фактически появился доступ к тому, к чему его раньше не было. Это:

- (S)SSEx, которые в Visual Studio можно включать, а в языке MQL5 без OCL - нельзя (не считая dll).

- доступ к расчетам на дискретных GPU, который дополнительно ускоряет то, что можно сделать на одном ядре в MQL5 без всяких примочек типа dll.

Я имел виду адаптацию для облачных вычислений, если представить, что каждому ядру процессора помогают множество "голодных пчелок" графических ускорителей обьедененных в сеть из множества компьютеров ,то получиться дейсвительно круто и быстро.

Половина дела сделано осталось включить это для облака... 

Причина обращения: