cuda文件错误"无效的设备功能"

时间:2015-01-21 16:12:26

标签: cuda nvidia

我有GPU卡GeForce GTX 295和visual studio 2012以及版本6.5的cuda。我运行一个简单的代码,如

#include "stdafx.h" 
#include <stdio.h> 
#include <cuda.h> 
// Kernel that executes on the CUDA device
 __global__ void square_array(float *a, int N)
 { 
  int idx = blockIdx.x * blockDim.x + threadIdx.x; 
  if (idx<N) a[idx] = a[idx] * a[idx]; } 
 // main routine that executes on the host
 int main(void)
 {   float *a_h, *a_d;  // Pointer to host & device arrays   
const int N = 10;  // Number of elements in arrays   
size_t size = N * sizeof(float);  
 a_h = (float *)malloc(size);        // Allocate array on host   
cudaMalloc((void **) &a_d, size);   // Allocate array on device   // Initialize host array and copy it to CUDA device  
 for (int i=0; i<N; i++) a_h[i] = (float)i;   
cudaMemcpy(a_d, a_h, size, cudaMemcpyHostToDevice);   // Do calculation on device:   
int block_size = 4;  
 int n_blocks = N/block_size + (N%block_size == 0 ? 0:1);   
square_array <<< n_blocks, block_size >>> (a_d, N);  

// Retrieve result from device and store it in host array   
cudaMemcpy(a_h, a_d, sizeof(float)*N, cudaMemcpyDeviceToHost); 
  // Print results  
 for (int i=0; i<N; i++) 
printf("%d %f\n", i, a_h[i]);  
 // Cleanup  
 free(a_h); 
cudaFree(a_d); } 

在这段代码中,当我在调用内核后使用命令cudaGetLastError(void)时,在控制台窗口显示错误“设备函数无效”。如何摆脱它? 使用visual studio 2012成功运行cuda kit 6.5的示例代码。enter code here

1 个答案:

答案 0 :(得分:3)

GTX 295具有计算能力1.3我相信。可能值得检查您的解决方案编译器设置,以查看您是否使用compute_20,sm_20之类的内容编译解决方案。如果是这样,请尝试将这些值更改为例如compute_10,sm_10,重建并查看它是否有帮助。有关设置这些值的详细信息,请参阅here

修改

根据njuffa和CUDA documentation对cc1.0设备的支持已在CUDA 6.5中删除,因此您必须使用compute_13,sm_13