Как запустить "хост" функции на GPU с CUDA? - PullRequest
1 голос
/ 10 марта 2012

Я собираюсь запустить на GPU, например, функцию strcmp, но я получаю:

error: calling a host function("strcmp") from a __device__/__global__ function("myKernel") is not allowed

Возможно, что printf не будет работать, потому что у gpu нет стандартного вывода,но функции вроде strcmp должны работать!Итак, я должен вставить в свой код инструмент strcmp из библиотеки с префиксом __device__ или как?

1 Ответ

2 голосов
/ 12 марта 2012

CUDA имеет стандартную библиотеку, документированную в руководстве по программированию CUDA. Он включает printf () для устройств, которые его поддерживают (Compute Capability 2.0 и выше), а также assert (). Однако на данном этапе он не содержит полную строку или библиотеку stdio.

Реализация вашей собственной стандартной библиотеки, как предполагает Джейсон Р. Мик, может быть возможной, но это не обязательно рекомендуется. В некоторых случаях может быть небезопасно наивно переносить функции из последовательной стандартной библиотеки в CUDA - не в последнюю очередь потому, что некоторые из этих реализаций не предназначены для обеспечения безопасности потоков (например, rand () в Windows). Даже если это безопасно, это может быть неэффективно - и на самом деле это может быть не то, что вам нужно.

По моему мнению, вам лучше избегать стандартных библиотечных функций в CUDA, которые официально не поддерживаются. Если вам нужно поведение стандартной библиотечной функции в вашем параллельном коде, сначала подумайте, нужно ли вам действительно : Вы действительно собираетесь выполнять тысячи операций strcmp параллельно? * Если нет, есть ли у вас строки для сравнения, длина которых составляет тысячи символов? Если это так, рассмотрите алгоритм сравнения параллельных строк.

Если вы решите, что вам действительно нужно поведение стандартной библиотечной функции в вашем параллельном коде CUDA, подумайте, как вы могли бы реализовать ее (безопасно и эффективно) параллельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...