Я пытаюсь использовать cuda с библиотекой с несколькими точками GNU (gmp). Когда я добавляю команды gmp, такие как mpf_init() в свой код устройства, я получаю эту ошибку компилятора: tlgmp.cu (37): ошибка: вызов функции хоста («__ gmpf_init») из функции __ device__/__ global__ («histo»)) не допускается.link cuda with gmp
Возможно ли переопределить инструкции gmp, чтобы они могли использоваться в коде устройства?
нет на уровне библиотеки, нет. Библиотека скомпилирована для x86 и не включает функции, скомпилированные для работы на устройстве. Поскольку это открытый исходный код, следует пройти через библиотеку функций на исходном уровне и создать новую библиотеку (или любые необходимые вам функции), которые заполняются необходимыми __ host__ __ device__ украшениями и, возможно, другими изменениями, тогда передайте этот код через nvcc для создания функций, вызываемых устройством. –
Просто googling вокруг, [эта библиотека CUMP] (http://www.hpcs.cs.tsukuba.ac.jp/~nakayama/cump/) появилась, когда я googled cuda gmp. Может стоить взглянуть. –
Я уже нашел эту библиотеку самостоятельно и посмотрел пример файла axpy.cu. Этот пример включает gmp.h, а также использует стандартные команды gmp в коде устройства (mpf_mul(), mpf_add()). Поэтому он должен выдать такое же сообщение об ошибке, если автор не использовал модифицированную версию библиотеки gmp. –