2013-08-01 5 views
1

방금 ​​CUDA 5.0에서 5.5로 업그레이드했고 모든 VS2012 CUDA 프로젝트가 assert() 문제로 인해 컴파일이 중단되었습니다. 문제를 재현하기 위해 VS 2012에 새로운 CUDA 5.5 프로젝트를 만들고 프로그래밍 가이드에서 바로 코드를 추가했으며 동일한 오류가 발생했습니다.assert() in CUDA 5.5

__global__ void testAssert(void) 
{ 
    int is_one = 1; 
    int should_be_one = 0; 
    // This will have no effect 
    assert(is_one); 
    // This will halt kernel execution 
    assert(should_be_one); 
} 

이 다음과 같은 컴파일러 오류 발생 : 내가 부족 분명 뭔가

kernel.cu(22): error : calling a __host__ function("_wassert") from a __global__ function("testAssert") is not allowed 

거기를?

+0

'assert'는'_wassert()'로 변환되는 매크로입니다. CUDA 5에서 실제로 작동하는 것이 놀랍습니다. – Pixelchemist

+3

'assert.h'를 포함하고 있습니까? 컴파일 문제는 코드 조각이 아닌 전체 재생기를 게시하는 것이 훨씬 더 편리합니다. 즉, 아무것도 추가하거나 아무것도 편집하지 않고 복사, 붙여 넣기 및 컴파일 할 수있는 전체 프로그램입니다. –

+0

@Pixelchemist : CUDA에서 assert가 정상적으로 작동합니다 (http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#assertion 참조). –

답변

4

assert.h을 포함하고 있는지 확인하고 sm_20 이상을 타겟팅하는지 확인하십시오. 또한 이 아닌지, Windows 헤더를 포함하여이 아닌지 확인하십시오.

+0

감사합니다. 문제는 코드 생성 설정에있었습니다. 내 .vcxproj 파일에 compute_20, sm_20, compute_30, sm_35 다음과 같은 내용이 있었지만 업그레이드 후에 무시되었다. 다시 같은 값으로 재설정하면 문제를 해결하는 데 도움이됩니다. –