Мой алгоритм состоит из двух шагов:
- Генерация данных. На этом шаге я генерирую массив данных в цикле, как результат некоторой функции
- Обработка данных. Для этого шага я написал ядро OpenCL, которое обрабатывает массив данных, сгенерированный на предыдущем шаге.
Теперь первый шаг выполняется на процессоре, потому что его трудно распараллелить. Я хочу запустить его на GPU, потому что каждый шаг генерации занимает некоторое время. И я хочу немедленно запустить второй шаг для уже сгенерированных данных.
Можно ли запустить другое ядро 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);
}
}