Можно ли управлять вычислительными единицами с помощью OpenCL? - PullRequest
0 голосов
/ 11 июня 2018

Я не смог найти ответ на этот вопрос в какой-либо документации, которую я читал об OpenCL, поэтому я спрашиваю: возможно ли контролировать, какой вычислительный модуль выполняет какой алгоритм?Я хочу, чтобы один алгоритм выполнялся на вычислительном блоке 1, а другой (другой) алгоритм выполнялся на вычислительном блоке 2 одновременно.Я хочу иметь возможность определить, на каком вычислительном блоке будет выполняться ядро ​​и, возможно, на каком количестве обрабатывающих элементов / ядер CUDA.

Мой графический процессор - Nvidia GeForce GT 525M, он имеет 2 вычислительных блока и 48 ядер CUDA на каждый.каждая единица.

1 Ответ

0 голосов
/ 11 июня 2018

Нет, это невозможно.И вы бы не хотели этого делать.Графический процессор лучше вас знает, как планировать работу, чтобы сделать большую часть устройства, вы не должны (и не можете) управлять этим микро.Конечно, вы можете влиять на планирование, устанавливая глобальный и локальный размер рабочей группы.

Если у вас есть два алгоритма, A и B, и оба способны полностью использовать графический процессор, то нет причин для этогоЗапустите их параллельно.

Sequentially:
CU 1: AAAAB
CU 2: AAAAB

In parallel:
CU 1: AAAAAAAA
CU 2: BB

Параллельное их выполнение на самом деле увеличит общее время выполнения, если A и B не имеют одинаковое время выполнения: время выполнения равно slowest(runtime(A), runtime(B)) против runtime(A/2) + runtime(B/2).

Если вам это не поможет, я предлагаю вам задать вопрос, где вы подробно опишите ваш фактический вариант использования.Какие у вас есть два алгоритма, с какими данными вы их запускаете, каково их использование устройства и почему вы хотите запускать их параллельно.

...