This question already has answers here:
Cuda Clang and OS X Mavericks
(6个答案)
6年前关闭。
为什么当我尝试编译cuda程序时会抛出以下错误:
我在终端上输入:
而且file.cu的代码是:
或许
此外,别忘了还要添加所有必需的内容:
(6个答案)
6年前关闭。
为什么当我尝试编译cuda程序时会抛出以下错误:
clang: error: unsupported option '-dumpspecs'
和clang: error: no input files
?我在终端上输入:
nvcc -o hello matrix_product.cu
,因为是一个互联网教程,但似乎不起作用...我是否必须添加一些变量或类似的东西?而且file.cu的代码是:
using namespace std;
void CheckCudaError(string &e);
__global__ void productMatrix(int *matrix_a, int *matrix_b, int *matrix_c)
{
int blockidx = blockIdx.x;
int blockidy = blockIdx.y;
int threadx = threadIdx.x;
int thready = threadIdx.y;
__shared__ int Asub[BLOCK_SIZE][BLOCK_SIZE];
__shared__ int Bsub[BLOCK_SIZE][BLOCK_SIZE];
Asub[threadx][thready] = matrix_a[blockidx * BLOCK_SIZE + threadx + blockidy * BLOCK_SIZE + thready];
Bsub[threadx][thready] = matrix_b[blockidx * BLOCK_SIZE + threadx + blockidy * BLOCK_SIZE + thready];
__syncthreads();
int suma;
for (int i = 0; i < BLOCK_SIZE; ++i)
{
suma += Asub[e][thready]* Bsub[threadx][e];
}
__syncthreads();
matrix_c[blockidx * BLOCK_SIZE + threadx + blockidy * BLOCK_SIZE + thready] = suma;
}
int main(){
//Creamos punteros para apuntar tanto al dispositivo como a memoria.
int *h_a, *h_b;
int *d_a, *d_b, *d_c;
int NumBlocks = 100 * 100 / BLOCK_SIZE;
int num_elements = NumBlocks * BLOCK_SIZE;
//Apuntamos los punteros hacia un espacio de 100*100 elementos en el host
h_a = malloc(num_elements * sizeof(int));
h_b = malloc(num_elements * sizeof(int));
CheckCudaError("malloc_host_error");
//LLenamos la memoria
for (int i = 0; i < num_elements; ++i)
{
h_a[i] = i;
h_b[i] = num_elements - 1 - i;
}
//Apuntamos los punteros del dispositivo hacia una reserva de memoria de 100*100 elementos.
cudaMalloc(&d_a, num_elements * sizeof(int));
cudaMalloc(&d_b, num_elements * sizeof(int));
cudaMalloc(&d_c, num_elements * sizeof(int));
CheckCudaError("malloc_device_error");
/*Copiamos los elementos del host ya llenados anteriormente (llenamos memoria,
copiando las matrizes del host hacia la tarjeta gráfica (device).*/
cudaMemcpy(d_a, h_a, num_elements * sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(d_b, h_b, num_elements * sizeof(int), cudaMemcpyHostToDevice);
CheckCudaError("memcpy_error");
free(h_b);
CheckCudaError("Free_host_error");
//Establecemos el num de threas y blocks que utilizaremos
dim3 gridDim (NumBlocks, NumBlocks);
dim3 blockDim (BLOCK_SIZE, BLOCK_SIZE);
//LLamamos la función.
productMatrix <<< gridDim, blockDim >>> (d_a, d_b, d_c);
CheckCudaError("Calling_device_function_error");
/*Esperamos a que todos los threads hayan hecho su trabajo (multiplicar las matrizes)
antes de copy back.*/
cudaThreadSyncronize();
CheckCudaError("Syncronize_threads_error");
//Una vez sincronizados los volvemos a copiar hacia el host.
cudaMemcpy(h_a, d_c, num_elements * sizeof(int), cudaMemcpyDeviceToHost);
CheckCudaError("mempcy_host_error");
//Imprimimos por pantalla
for (int i = 0; i < num_elements; ++i) cout << h_a[i];
//Aliberamos memoria en el device
cudaFree(d_a);
cudaFree(d_b);
cudaFree(d_c);
//Aliveramos meomria en host.
free(h_a);
CheckCudaError("free_device_error");
}
void CheckCudaError(string &e)
{
//Obtenemos el ultimo error.
cudaError_t err = cudaGetLastError();
//Si hay error imprime el error por pantalla
if(cudaSuccess != err){
cout << e << endl;
}
}
最佳答案
请尝试将NVCC明确指向clang编译器。
NVCC := nvcc -ccbin /usr/bin/clang
或许
NVCC := nvcc -ccbin /usr/local/cuda/bin/clang
此外,别忘了还要添加所有必需的内容:
nvcc -I/usr/local/cuda-5.0/include -I. -I.. -I../../common/inc -o MonteCarlo_kernel.o -c MonteCarlo_kernel.cu
关于c++ - CUDA NVCC编译器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21634135/
10-11 22:47