Огромное спасибо!
Давно ждал статьи на тему OpenCL.
Побежал читать. :)
Побежал читать. :)
Да тебе-то, наверно, это не слишком нужно. Ты уже должен все это уметь.
Вот в следующей статье все будет серьезно, там по "железу" много будет.
Что рано включать, проясните, пожалуйста. Если OpenCL - то он уже включен. Все эксперименты проводились напрямую в MetaEditor 5.
P.S. Главная фишка в том, что через OCL у кодера фактически появился доступ к тому, к чему его раньше не было. Это:
- (S)SSEx, которые в Visual Studio можно включать, а в языке MQL5 без OCL - нельзя (не считая dll).
- доступ к расчетам на дискретных GPU, который дополнительно ускоряет то, что можно сделать на одном ядре в MQL5 без всяких примочек типа dll.
1. Да тебе-то, наверно, это не слишком нужно. Ты уже должен все это уметь.
2. Вот в следующей статье все будет серьезно, там по "железу" много будет.
1. Нужно.
2. Отлично!
Остается непонятным для меня вопрос: Почему выполнение программы OCL на CPU ты называешь "эмуляцией"? CPU - лишь одно из устройств, на ряду с GPU, с которыми возможна работа OCL программы при наличии соответствующего драйвера для устройства (device), при этом загруженны все ядра процессора.
- www.mql5.com
Потому что это и есть эмуляция, медленная эмуляция. В CPU (спасибо Intel, у него умный компилятор, который ищет возможность векторизации, если ты не запретишь ее явно) распараллеливание происходит за счет инструкций (S)SSEx и, возможно, анализа зависимостей (dependencies), а в GPU есть гораздо больше возможностей, связанных с SIMD Engines. И шины там поширше, и память пошустрее - особенно локальная и приватная.
Насчет "железа". Основные рекомендации будут относиться к железу от AMD. Но многие из них с немного измененной терминологией подходят и к железу от NVidia.
Потому что это и есть эмуляция, медленная эмуляция. В CPU (спасибо Intel, у него умный компилятор, который ищет возможность векторизации, если ты не запретишь ее явно) распараллеливание происходит за счет инструкций (S)SSEx и, возможно, анализа зависимостей (dependencies), а в GPU есть гораздо больше возможностей, связанных с SIMD Engines. И шины там поширше, и память пошустрее - особенно локальная и приватная.
Насчет "железа". Основные рекомендации будут относиться к железу от AMD. Но многие из них с немного измененной терминологией подходят и к железу от NVidia.
Видишь - нет ни слова про про то, что OCL для GPU, а для остальных устройств работа в режиме эмуляции. OpenCL универсальный язык программирования для организации параллельных вычислений на любых устройствах, имеющих вычислительные ядра в количестве больше одного и имеющих поддержку OCL. Это не CUDA и не ATI Stream, которые заточены именно для GPU.
Кроме того, в некоторых случаях распараллеливание и вычисления OCL на CPU оказываются даже быстрее, чем на GPU. Сейчас я в обязательном порядке в настройках своих программ закладываю возможность выбора устройства, так как скорость вычислений напрямую зависит от количества обрабатываемых данных и "тяжести" вычислений (тоже зависит от настроек input) - иногда быстрее на GPU, иногда на CPU.
Видишь - нет ни слова про про то, что OCL для GPU, а для остальных устройств работа в режиме эмуляции. OpenCL универсальный язык программирования для организации параллельных вычислений на любых устройствах, имеющих вычислительные ядра в количестве больше одного и имеющих поддержку OCL. Это не CUDA и не ATI Stream, которые заточены именно для GPU.
Пожалуй, в чем-то ты прав, т.к. CPU виден как девайс. Но вот некоторые данные скорее говорят о том, что это все же больше похоже на эмуляцию. Например, есть такие подозрения, что запись буфера в память девайса CLBufferWrite() в случае с CPU делается просто "для галочки", т.к. для CPU только одна глобальная память. Правда, у CPU есть еще и кэш, но что с ним и как просиходит - не знаю.
Кроме того, в некоторых случаях распараллеливание и вычисления
OCL на CPU оказываются даже быстрее, чем на GPU.
Да, есть такие случаи, когда, скажем, скалярное произведение dot( ) на CPU быстрее. Но я не стал бы загадывать, что было бы быстрее, если бы сравнение было между Core 2 Duo и более мощной видяхой, чем по ссылке. Особенно если позаботиться об оптимизации алгоритма. Она ж для CPU и GPU разная, что ни говори.
Что рано включать, проясните, пожалуйста. Если OpenCL - то он уже включен. Все эксперименты проводились напрямую в MetaEditor 5.
P.S. Главная фишка в том, что через OCL у кодера фактически появился доступ к тому, к чему его раньше не было. Это:
- (S)SSEx, которые в Visual Studio можно включать, а в языке MQL5 без OCL - нельзя (не считая dll).
- доступ к расчетам на дискретных GPU, который дополнительно ускоряет то, что можно сделать на одном ядре в MQL5 без всяких примочек типа dll.
Я имел виду адаптацию для облачных вычислений, если представить, что каждому ядру процессора помогают множество "голодных пчелок" графических ускорителей обьедененных в сеть из множества компьютеров ,то получиться дейсвительно круто и быстро.
Половина дела сделано осталось включить это для облака...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья OpenCL: Мост в параллельные миры:
Автор: Sceptic Philozoff