CUDA: вызов функции библиотеки в ядре - PullRequest
1 голос
/ 05 сентября 2011

Я знаю, что есть ограничение для вызова только __device__ функций в ядре.Это мешает мне вызывать стандартные функции, такие как strcmp() и т. Д. В ядре.
На данный момент я не могу понять / найти причины этого.Не мог ли компилятор просто следовать за каждым включением в strings.h и т. Д. При встраивании вызовов к strcmp() в ядре?Я думаю, что причина, по которой я ищу, проста, и я что-то здесь упускаю.
Это единственный способ переопределить все функции и типы данных, которые мне нужны в вычислениях ядра?Есть ли кодовая база с такими переопределениями?

Ответы [ 2 ]

3 голосов
/ 05 сентября 2011

Да, единственный способ использовать функции stdlib из ядра - это переопределить их.Но я настоятельно советую вам пересмотреть эту идею, поскольку вряд ли вам понадобится запускать код, который использует strcmp() на графическом процессоре, * .Пожалуйста, добавьте дополнительные подробности о вашей проблеме, чтобы можно было предложить лучшее решение (я очень сомневаюсь, что сравнение последовательных строк на GPU - это то, что вам действительно нужно).так как это во многом зависит от некоторых системных вызовов (таких как распределение памяти), которые нельзя было использовать на GPU (ну, в последних версиях инструментария CUDA вы можете выделять память устройства из ядра, но это не "cuda"-way ", поддерживается только новейшим оборудованием и очень плохо для производительности).Кроме того, версии большинства функций для ЦП далеко не «хороши» для графических процессоров.Таким образом, в подавляющем большинстве случаев компиляция обычных функций процессора для графического процессора не принесет пользы, поэтому компилятор даже не попробует.

2 голосов
/ 05 сентября 2011

Стандартные функции, такие как strcmp(), не скомпилированы для архитектуры CUDA. Я не видел никаких стандартных библиотек C для CUDA.

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