Предположим, у меня есть алгоритмы, которые я хочу реализовать на GPU. Алгоритм состоит из основного цикла, и все итерации цикла могут выполняться параллельно. Кроме того, каждая итерация цикла имеет внутренний цикл, итерации которого могут выполняться параллельно. Допустим, мне нужно N
итераций основного цикла и M
итераций внутреннего цикла (для каждой итерации основного цикла), и что мой графический процессор имеет L
ядер.
Если N+N*M <= L
, я могу запустить все параллельно. Но если это не так, мне нужно решить, что запускать последовательно. Как мне принять это решение? Например, если N=10
, M=5
, L = 20
, когда я должен выбрать каждый из этих вариантов (или любые другие варианты)?:
- Запустите все основные итерации параллельно и все внутренние циклы последовательно.
- Выполните все основные итерации последовательно, а весь внутренний цикл - параллельно.
- Запустите все основные итерации параллельно, два внутренних цикла параллельно, а остальные последовательно.
- Запустите три основных итерации параллельно, запустите каждый из их внутренних циклов параллельно, последовательно запустите остальные основные итерации и их внутренние циклы.