1

Предположим, у меня есть алгоритмы, которые я хочу реализовать на GPU. Алгоритм состоит из основного цикла, и все итерации цикла могут выполняться параллельно. Кроме того, каждая итерация цикла имеет внутренний цикл, итерации которого могут выполняться параллельно. Допустим, мне нужно N итераций основного цикла и M итераций внутреннего цикла (для каждой итерации основного цикла), и что мой графический процессор имеет L ядер.

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

  1. Запустите все основные итерации параллельно и все внутренние циклы последовательно.
  2. Выполните все основные итерации последовательно, а весь внутренний цикл - параллельно.
  3. Запустите все основные итерации параллельно, два внутренних цикла параллельно, а остальные последовательно.
  4. Запустите три основных итерации параллельно, запустите каждый из их внутренних циклов параллельно, последовательно запустите остальные основные итерации и их внутренние циклы.

0