2014-11-25 14 views
1
나는 기능 cuMemGetInfo 내 GPU 장치 덕분에() 나는 결과를 얻고있다

cuMemGetInfo()와 size_t로 제한

// ----- Before any variable initialization ----- 
size_t free; 
size_t total; 
CUresult result=cuMemGetInfo(&free,&total); 

내 무료 총 메모리를 알고 싶습니다

:

Free memory : 4095 MB 
Total memory : 4095 MB 

저는 64 비트 Windows 7에서 6GB의 메모리를 갖춘 Tesla C2070을 개발하고 있습니다. 그러나 32 비트 응용 프로그램이 실행 중입니다.

Free memory : 5376 MB 
Total memory : 5376 MB // values given by the deviceQuery.exe example of CUDA 

내가 4095 * 1024 * 1024 = 4,293,918,720 약 2^32 (반올림 후)입니다 : 내 코드는 나에게 뭔가를 제공해야합니다. 실제로 size_t는 부호없는 int (4 바이트)의 포인터입니다.

여기 내 질문이 있습니다. 예를 들어 부호없는 long을 가리 키기 위해 size_t의 정의를 변경할 수 있습니까? 32 개 비트 타겟에 대해 컴파일 때

감사

+1

64 비트 용으로 컴파일하도록 호스트 코드를 설정하면 64 비트'size_t'를 얻어야합니다. –

+0

오, Qt, CUDA 및 Visual Studio 간의 호환성 때문에 64 비트 응용 프로그램을 실행할 수 없음을 기억합니다. 그 문제를 해결할 방법이 있습니까? –

+1

@ 박영배 당신이 대답하는 줄을 따라 답을주고 싶다면 @ 박영배. 64 비트로 응용 프로그램을 컴파일하는 것은 4GB 경계를 넘어 GPU 메모리에 액세스하는 * 유일한 방법입니다. –

답변

2

size_t 보통 32 비트이다. 64 비트 size_t을 얻으려면 컴파일러를 설정하여 64 비트 플랫폼을 대상으로 지정하십시오.

Visual Studio 빌드 체인을 사용하는 경우 here is the documentation on the topic. Qt 빌드 체인을 사용하고 있다면 어떻게 완료되었는지는 모르겠지만 어떻게 든 가능합니다.

당신은 코멘트에 말 :

내가 때문에 Qt는, CUDA 및 Visual Studio 간의 호환성의 64 비트 응용 프로그램을 실행할 수 없습니다. 그 문제를 해결할 방법이 있습니까?

내가 아는 바로는 불가능합니다. 32 비트를 빌드하면 32 비트로 작동하는 cuMemGetInfo의 32 비트 버전과 연결됩니다. 주변을 둘러 볼 필요가 없습니다.

그러나 메모리가 작동하면 과거에는 VS2012, CUDA 6 및 Qt 4.8로 작성된 64 비트 응용 프로그램으로 작업 했으므로 64 비트로 작동하도록 툴 체인을 설정할 수 있어야합니다.