2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Помогите "организовать цикл" в OpenCL
Сообщение07.02.2012, 16:26 


07/02/12
1
Привет всем. Изучаю OpenCL, пока знания так себе. Написал минималки про сложение векторов и обработку картинок и изучил AMDшные лекции.

Та задача на которую замахиваюсь, требует такого алгоритма:

1. Инстанции кернела foo1() читают каждый свой кусочек большого массива глобальной памяти и получают продукт (несколько байт).
2. Ждем пока все инстанции foo1() завершат работу.
3. Кернел foo2() (в единственном экземпляре) собирает продукты от foo1() и делает между ними выбор.
4. foo2() изменяет ту область глобальной памяти, откуда пришел выбранный продукт foo1() и считает свой продукт.
5. На основе продукта foo2() и счетчика итераций принимается решение - либо конец алгоритма, либо идем на шаг 1.

Время выполнения foo2() по сравнению с foo1() ничтожно мало.

Вопрос, как это организовать со стороны хоста? Вот так:

код: [ скачать ] [ спрятать ]
Используется синтаксис C++

while(!done)
{
clEnqueueNDRangeKernel(queue, foo1kernel, ..., event1 );
clWaitForEvents( event1 );

clEnqueueNDRangeKernel(queue, foo2kernel, ..., event2 );
clWaitForEvents( event2 );
clEnqueueReadBuffer(queue, foo2product, ... );

done = ProcessProduct(foo2product, i);
i++;
}

 

- точно фуй. Оверхеды убьют всю производительность.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group