Звонит ядру GPU из многопоточного приложения C ++? - PullRequest
2 голосов
/ 16 ноября 2011

Я заново реализую некоторые разделы библиотеки обработки изображений, которая является многопоточным C ++, используя pthreads.Я хотел бы иметь возможность вызывать ядро ​​CUDA в каждом потоке и доверять самому устройству обработку расписания ядра, но я знаю лучше, чем рассчитывать на это поведение.У кого-нибудь есть опыт работы с этим типом проблемы?

Ответы [ 2 ]

2 голосов
/ 17 ноября 2011

CUDA 4.0 значительно упростила управление одним контекстом CUDA из нескольких потоков - просто вызовите cudaSetDevice (), чтобы указать, какому устройству CUDA вы хотите, чтобы поток отправлял команды.

Обратите внимание, что это, вероятно, будет менее эффективно, чем управление контекстом CUDA из одного потока - если потоки ЦП не выполняют другую работу, чтобы держать их занятыми между запусками ядра, они, вероятно, будут сериализованы мьютексами, которые CUDA использует внутренне сохранять согласованность структур данных.

2 голосов
/ 17 ноября 2011

Возможно, потоки Cuda - это решение вашей проблемы. Попробуйте вызвать ядра из другого потока в каждом потоке. Однако я не вижу, как это поможет, так как думаю, что ваши ядра будут сериализованы, даже если они вызываются параллельно. Фактически, вызовы ядра Cuda даже в одном и том же потоке по своей природе асинхронны, поэтому вы можете выполнять любое количество вызовов из одного и того же потока. Я действительно не понимаю, чего вы пытаетесь достичь.

...