Я работаю над переводом приложения CUDA (если хотите знать) на OpenCL. Исходное приложение использует API CUDA в стиле C с одним потоком, чтобы избежать автоматического ожидания при чтении результатов.
Теперь я заметил, что очереди команд OpenCL очень похожи на потоки CUDA. Но в команде чтения устройства а также в командах записи и выполнения ядра я также замечаю параметры для событий. Итак, мне интересно, что нужно для выполнения записи устройства, нескольких ядер (например, один вызов одного ядра, затем 100 вызовов другого ядра) и чтения устройства, все последовательно?
- Если я просто поставлю их последовательно в одну и ту же очередь, будут ли они выполняться последовательно, как в CUDA?
- Если это не сработает, могу ли я последовательно объединять события, делая список ожидания каждого вызова событием предыдущего вызова?
- Или я должен добавить все предыдущие события в список ожидания каждого вызова, например, есть ли поиск зависимостей N ^ 2 или что-то в этом роде?
- Или мне просто нужно использовать event.wait() для каждого вызова отдельно, как указано в Учебник AMD?
Спасибо!