Мой алгоритм состоит из двух шагов:
- Генерация данных. На этом шаге я генерирую массив данных в цикле как результат некоторой функции
- Обработка данных. Для этого шага я написал ядро OpenCL, которое обрабатывает массив данных, сгенерированный на предыдущем шаге.
Теперь первый шаг выполняется на процессоре, потому что его сложно распараллелить. Я хочу запустить его на графическом процессоре, потому что каждый шаг генерации занимает некоторое время. И я хочу немедленно выполнить второй шаг для уже сгенерированных данных.
Могу ли я запустить другое ядро opencl из текущего ядра в отдельном потоке? Или он будет запущен в каком-то потоке, вызывающем ядро?
Некоторый псевдокод для иллюстрации моей точки зрения:
__kernel second(__global int * data, int index) {
//work on data[i]. This process takes a lot of time
}
__kernel first(__global int * data, const int length) {
for (int i = 0; i < length; i++) {
// generate data and store it in data[i]
// This kernel will be launched in some thread that caller or in new thread?
// If in same thread, there are ways to launch it in separated thread?
second(data, i);
}
}