2016-11-02 1 views
0

Я знаю, что вызов функтора с использованием thrust::for_each с данными в thrust::host_vector имеет параллельную политику выполнения, но они фактически выполняются параллельно?Вызов функтора тяги на хосте для выполнения нескольких потоков

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

[EDIT]

Я понимаю, что есть такая вещь, как thrust::omp::par, однако, я не могу показаться, чтобы быть в состоянии найти полный пример Thrust с использованием OpenMP.

ответ

1

В целом, операции наддува, отправленные на «хост», не выполняются параллельно. Они используют один поток хоста.

Если вы хотите запускать упорные операции параллельно на процессоре (используя несколько потоков ЦП), то рекомендуемой практикой было бы использовать упорный OpenMP-сервер.

Полностью обработанный пример: here.

Другой рабочий пример: here.

+0

У меня есть следующий вопрос: так, если бы я использовал (пользовательский) функтор, определял бы его как '__device__' или' __host__'? –

+0

Кажется, что это должно быть '__host__', хотя либо должно работать –

+0

' __device__', а '__host__' - это не то же самое, что и бэкэнда тяги. Для операций «хозяина» в толчке функтор должен включать украшение '__host__'. Для бэкэнд-операций «устройства», которые используют GPU в качестве бэкэнд, функтор должен включать украшение '__device__'. Для всех основанных на процессорах бэкендов (включая OMP), функтор должен включать украшение '__host__'. Причина этого заключается в том, что '' __host__' и __device__' не означает одно и то же самое, что и упорный «хозяин» и упорный «устройство» бэкэнд. –

Смежные вопросы