Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

392
Visualizações
CUDA __device__ Función externa no resuelta

Estoy tratando de entender cómo desacoplar los códigos CUDA __device__ en archivos de encabezado separados.

Tengo tres archivos.

Archivo: 1: int2.cuh

 #ifndef INT2_H_ #define INT2_H_ #include "cuda.h" #include "cuda_runtime.h" #include "device_launch_parameters.h" __global__ void kernel(); __device__ int k2(int k); int launchKernel(int dim); #endif /* INT2_H_ */

Archivo 2: int2.cu

 #include "int2.cuh" #include "cstdio" __global__ void kernel() { int tid = threadIdx.x; printf("%d\n", k2(tid)); } __device__ int k2(int i) { return i * i; } int launchKernel(int dim) { kernel<<<1, dim>>>(); cudaDeviceReset(); return 0; }

Archivo 3: CUDASample.cu

 include <stdio.h> #include <stdlib.h> #include "int2.cuh" #include "iostream" using namespace std; static const int WORK_SIZE = 256; __global__ void sampleCuda() { int tid = threadIdx.x; // printf("%d\n", k2(tid)); //Can not call k2 printf("%d\n", tid * tid); } int main(void) { int var; var = launchKernel(16); kernel<<<1, 16>>>(); cudaDeviceReset(); sampleCuda<<<1, 16>>>(); cudaDeviceReset(); return 0; }

El código funciona archivo. Puedo llamar al kernel sampleCuda() (en el mismo archivo), llamar a la función C launchKernel() (en otro archivo) y llamar al kernel() directamente (en otro archivo).

El problema al que me enfrento es llamar a la función __device__ desde el kernel sampleCuda() . entonces muestra el siguiente error. Sin embargo, se puede llamar a la misma función en kernel() .

 10:58:11 **** Incremental Build of configuration Debug for project CUDASample **** make all Building file: ../src/CUDASample.cu Invoking: NVCC Compiler /Developer/NVIDIA/CUDA-6.5/bin/nvcc -G -g -O0 -gencode arch=compute_20,code=sm_20 -odir "src" -M -o "src/CUDASample.d" "../src/CUDASample.cu" /Developer/NVIDIA/CUDA-6.5/bin/nvcc -G -g -O0 --compile --relocatable-device-code=false -gencode arch=compute_20,code=compute_20 -gencode arch=compute_20,code=sm_20 -x cu -o "src/CUDASample.o" "../src/CUDASample.cu" ../src/CUDASample.cu(18): warning: variable "var" was set but never used ../src/CUDASample.cu(8): warning: variable "WORK_SIZE" was declared but never referenced ../src/CUDASample.cu(18): warning: variable "var" was set but never used ../src/CUDASample.cu(8): warning: variable "WORK_SIZE" was declared but never referenced ptxas fatal : Unresolved extern function '_Z2k2i' make: *** [src/CUDASample.o] Error 255 10:58:14 Build Finished (took 2s.388ms)
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

El problema es que definió una función __device__ en una unidad de compilación separada de __global__ que la llama. Debe habilitar explícitamente el modo de código de dispositivo reubicable agregando el indicador -dc o mover su definición a la misma unidad.

De la documentación de nvcc :

--device-c|-dc Compila cada archivo de entrada .c/.cc/.cpp/.cxx/.cu en un archivo de objeto que contiene código de dispositivo reubicable. Es equivalente a --relocatable-device-code =true --compile .

Consulte Compilación separada y vinculación del código de dispositivo CUDA C++ para obtener más información.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda