Внешние звонки не поддерживаются - CUDA

Цель состоит в том, чтобы вызвать функцию устройства, доступную в другом файле, когда я компилирую глобальное ядро, это показывает следующую ошибку * Внешние вызовы не поддерживаются (обнаружен не встроенный вызов _Z6GoldenSectionCUDA) *.

Проблемный код (не полный код, но там, где возникает проблема), cat norm.h

# ifndef NORM_H_
# define NORM_H_
# include<stdio.h>

__device__ double invcdf(double prob, double mean, double stddev);

#endif

кот norm.cu

# include <norm.h>

__device__ double invcdf(double prob, double mean, double stddev) {
    return (mean + stddev*normcdfinv(prob));
       }

кошка test.cu

# include <norm.h>
# include <curand.h>
# include <curand_kernel.h>

__global__ void phase2Kernel(double* out_profit, struct strategyHolder* strategy) {
       curandState seedValue;
       curand_init(threadIdx.x, 0, 0, &seedValue);
       double randomD = invcdf(curand_uniform_double( &seedValue ), 300, 80);
    }

nvcc -c norm.cu -o norm.o -I "."
nvcc -c test.cu -o test.o -I "."

1 ответ

Решение

Вы пытаетесь выполнить отдельную компиляцию, для которой нужны специальные параметры командной строки. Подробности смотрите в руководстве NVCC, но вот как получить ваш пример для компиляции. Я выбрал sm_20, но вы можете выбрать sm_20 или более позднюю версию в зависимости от того, какой у вас графический процессор. Отдельная компиляция невозможна на старых устройствах (sm_1x).

  • Вам не нужно объявлять __device__ функционировать как extern в вашем заголовочном файле, но если у вас есть статические переменные устройства, их нужно будет объявить как extern
  • Генерация перемещаемого кода для устройства путем компиляции, как показано ниже (-dc устройство эквивалентно -cсм. руководство для получения дополнительной информации)

    nvcc -arch=sm_20 -dc norm.cu -o norm.o -I.
    nvcc -arch=sm_20 -dc test.cu -o test.o -I.
    
  • Связать части кода устройства, вызвав nvlink перед окончательной ссылкой на хост

    nvlink -arch=sm_20 norm.o test.o -o final.o
    
Другие вопросы по тегам