2
我想在我的Mac(OSX 10.6)上使用cmake(v 2.8)的CUDA。到目前爲止,它工作正常,我創建了一個小樣本來試用它(見下文)。但是,當我打開仿真模式時,它無法再調用CUDA內核,並收到以下錯誤消息:CUDA 3.0和cmake和仿真模式
Cuda錯誤:內核調用:無效的設備函數。
我也嘗試通過手動調用nvcc來編譯它,但沒有收到錯誤信息,所以我認爲它可能是cmake的一個問題。
我還注意到仿真模式在CUDA 3.0中已棄用。爲什麼是這樣? Nvidia在其發行說明中指出,他們在Linux上提供Nexus for VS和cuda-gdb。但是OSX呢?我在這裏安裝的OSX版本中找不到cuda-gdb ..?!
下面的文件
的CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project (test)
find_package(CUDA)
add_definitions(-Wall)
# Use CUDA emulator?
set(CUDA_BUILD_EMULATION ON)
set(CUDA_64_BIT_DEVICE_CODE OFF) # Does not work on a Mac currently
set(CMAKE_C_FLAGS -m32)
set(CMAKE_CXX_FLAGS -m32)
set(CUDA_VERBOSE_BUILD ON)
include_directories("${PROJECT_BINARY_DIR}")
cuda_add_executable(test
test.cu
)
test.cu
#include <cuda.h>
#include <stdlib.h>
#include <stdio.h>
#include "test_kernel.cu"
void checkCUDAError(const char *msg);
int main(int argc, const char** argv)
{
int n = 3;
float* a_h;
a_h = (float *)malloc(sizeof(float)*n);
float* a_d;
cudaMalloc((void**) &a_d, sizeof(float)*n);
hello<<<1,128>>>(a_d, n);
checkCUDAError("kernel invocation");
checkCUDAError("memcpy");
free(a_h);
cudaFree(a_d);
return 0;
}
void checkCUDAError(const char *msg)
{
cudaError_t err = cudaGetLastError();
if(cudaSuccess != err)
{
fprintf(stderr, "Cuda error: %s: %s.\n", msg,
cudaGetErrorString(err));
exit(EXIT_FAILURE);
}
}
test_kernel.cu
#include <stdio.h>
__global__ void hello(float*a, int i)
{
int j = i+1;
#ifdef _DEVICEEMU
printf("Hello.\n");
#endif
}
有人嗎?想在Linux上嘗試一下,但沒有Linux和Nvidia硬件的包裝盒.. – Nils 2010-04-20 19:12:02
已經在Linux上試過了,同樣的問題 – Nils 2010-04-21 09:14:06