2014-12-05 4 views
-1

Windows 7 Pro 32에 NVIDIA GeForce 8500 GT가 있고 CUDAC의 프로젝트에 문제가 있습니다. 모든 패키지와 VS2012 Pro를 설치했습니다. 저는 Cuda 6.5 용 템플릿에서 새 프로젝트를 만듭니다 ... 컴파일하고 .. "장치 기능이 잘못되었습니다". 에서 은 .. 내가 deviceQuery.exe으로 CUDA를 chceck 수 있다는 것을 읽고 윈도우 PDF 시작에 geting 그래서 내가 이런 짓을 : 그래서예제의 쿠다 컴파일

deviceQuery.exe Starting... 

CUDA Device Query (Runtime API) version (CUDART static linking) 

Detected 1 CUDA Capable device(s) 

Device 0: "GeForce 8500 GT" 
    CUDA Driver Version/Runtime Version   6.5/6.5 
    CUDA Capability Major/Minor version number: 1.1 
    Total amount of global memory:     512 MBytes (536870912 bytes) 
    (2) Multiprocessors, ( 8) CUDA Cores/MP:  16 CUDA Cores 
    GPU Clock rate:        1570 MHz (1.57 GHz) 
    Memory Clock rate:        400 Mhz 
    Memory Bus Width:        128-bit 
    Maximum Texture Dimension Size (x,y,z)   1D=(8192), 2D=(65536, 32768), 3D=(2048, 2048, 2048) 
    Maximum Layered 1D Texture Size, (num) layers 1D=(8192), 512 layers 
    Maximum Layered 2D Texture Size, (num) layers 2D=(8192, 8192), 512 layers 
    Total amount of constant memory:    65536 bytes 
    Total amount of shared memory per block:  16384 bytes 
    Total number of registers available per block: 8192 
    Warp size:          32 
    Maximum number of threads per multiprocessor: 768 
    Maximum number of threads per block:   512 
    Max dimension size of a thread block (x,y,z): (512, 512, 64) 
    Max dimension size of a grid size (x,y,z): (65535, 65535, 1) 
    Maximum memory pitch:       2147483647 bytes 
    Texture alignment:        256 bytes 
    Concurrent copy and kernel execution:   Yes with 1 copy engine(s) 
    Run time limit on kernels:      Yes 
    Integrated GPU sharing Host Memory:   No 
    Support host page-locked memory mapping:  Yes 
    Alignment requirement for Surfaces:   Yes 
    Device has ECC support:      Disabled 
    CUDA Device Driver Mode (TCC or WDDM):   WDDM (Windows Display Driver Model) 
    Device supports Unified Addressing (UVA):  No 
    Device PCI Bus ID/PCI location ID:   1/0 
    Compute Mode: 
    < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > 

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 6.5, CUDA Runtime Version = 6.5, NumDevs = 1, Device0 = GeForce 8500 GT 
Result = PASS 

PASS! 그래서 뭐라 ..? 다음으로 대역폭 테스트를 완료했습니다.

[CUDA Bandwidth Test] - Starting... 
Running on... 

Device 0: GeForce 8500 GT 
Quick Mode 

Host to Device Bandwidth, 1 Device(s) 
PINNED Memory Transfers 
    Transfer Size (Bytes) Bandwidth(MB/s) 
    33554432   1346.5 

Device to Host Bandwidth, 1 Device(s) 
PINNED Memory Transfers 
    Transfer Size (Bytes) Bandwidth(MB/s) 
    33554432   1556.9 

Device to Device Bandwidth, 1 Device(s) 
PINNED Memory Transfers 
    Transfer Size (Bytes) Bandwidth(MB/s) 
    33554432   5857.4 

Result = PASS 

그래서 enybode가 도움이됩니까?

+1

CUDA 6.5의 기본 컴파일 대상은 CC 2.0 (sm_20)이지만 GPU는 CC 1.1 (sm_11)입니다. 'nvcc' 커맨드 라인에서 올바른 타겟 아키텍처를 지정해보십시오 :'-arch = sm_11'. – njuffa

답변

2

잘못된 장치 기능은 일반적으로 코드를 실행하려고하는 GPU보다 높은 아키텍처로 컴파일되었음을 의미합니다.

GPU의 아키텍처는 출력물에 포함되어 있습니다 :

CUDA Capability Major/Minor version number: 1.1 

CUDA 6.5 컴파일을 기본적으로 cc2.0 아키텍처. cc 1.1 아키텍처 용으로 컴파일하려면 해당 스위치를 nvcc 컴파일 명령에 전달해야합니다.

이것은 일반적으로 프로젝트 속성의 Visual Studio 장치 구성 탭에 compute_11,sm_11과 같은 내용을 추가하는 것을 의미합니다.

이렇게하면 (CUDA 6.5에서) 장치 아키텍처 1.1이 더 이상 사용되지 않는다는 경고 메시지가 나타납니다. 그러나 여전히이 아키텍처를 컴파일하고 대상으로 삼을 수 있습니다.

그리고이 질문이 창과 관련이 있지만 Linux에도 똑같은 필요성이 있습니다. Linux에서 CUDA 6.5를 사용하는 경우 기본 컴파일 대상은 cc2.0입니다. 이전 장치 용으로 컴파일하려면 컴파일 명령 줄에 무언가를 추가해야합니다 (예 : -arch=sm_11).

+0

대단히 고맙습니다;))) Works;) – user3490530

+1

@ user3490530 답변이 만족 스럽다면 문제의 왼쪽에있는 체크 표시를 클릭하여 동의하십시오. – njuffa