
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ну посмотри сам на свой же код: А дальше, в последней строке, ты же сам и делишь 240 на 18 (это units для твоей карты).
Ты явно что-то путаешь. Вот спорный кусок:
Вывод: global=30 local=1
А 240 байт именно при создании буфера.
Ты явно что-то путаешь. Вот спорный кусок:
Вывод: global=30 local=1
А 240 байт именно при создании буфера.
global_work_size[0]
А local_work_size[0] = (uint) 240/18 = 13
P.S. Да, все правильно говоришь. Пардон. Я слегка запутался.
local_work_size[0] = (uint) 30/18 = 1. И у меня так же, т.к. units=28.
Еще раз, Roffild:
Mathemat: Давай тупо прикинем. 18 задач, выполняемых одновременно на мухах GPU, - это максимум то, что можно сделать на 4-5 нитках CPU. А CPU на x86 эмуляции может организовать гораздо больше ниток. Во всяком случае, если это Intel. Мой бывший Pentium G840 (2 ядра) дал ускорение примерно в 70 раз - на двух unit'ах! Я уже не говорю о том, что вытворяет мой текущий... условно говоря, i7.
Хорошо параллелящаяся задача (посмотри скрипты MetaDriver'a из первой ветки об ocl) позволяет достичь на GPU ускорения до 1000 и больше (в сравнении с исполнением в 1 поток на CPU на MQL5). Если не сможешь найти - могу скинуть, потестишь на своей карте.
С буфером и его скоростью разобрались?
А про UNITS и т.п. лучше через AMD CodeXL разберись - там графики производительности красивые.
Сам AMD CodeXL глючный зараза, но без него сложно делать какие-то выводы.
Я с OpenCL сейчас больше не буду заниматься, пока в тестере не разрешат CPU или пока не попадется задача, которая выполняется дольше, чем Количество_буферов * 0.353 мсек.
P.S.
Я все таки закончил оптимизацию своего кода и теперь конечный вариант проходит тест за 33 сек (320 сек - до оптимизации, 55 сек - "в стиле OpenCL").
А чего там разбираться-то. Понятно, что это медленная операция. Вывод - увеличивать работу внутри кернела (в твоем коде ее слишком уж мало).
И брать более современные видяхи, у них с этим вроде получше стало.
Сам AMD CodeXL глючный зараза, но без него сложно делать какие-то выводы.
Интеловская утилитка тоже весьма полезна - но для камней Интела. Ну и для отлова самых явных ошибок в кернеле.
P.S. Я все таки закончил оптимизацию своего кода и теперь конечный вариант проходит тест за 33 сек (320 сек - до оптимизации, 55 сек - "в стиле OpenCL").
Уже значительно лучше.
Сегодня мне понадобилось сгенерировать массив с количеством 1 бит в числах.
Заодно и попрактиковался на OpenCL.
Я выкладываю код, как демонстрация интересного метода вычисления global_work_size и local_work_size. Сама идея взята из IntrotoOpenCL.pdf (копия у меня есть), но я её подправил.