2

__CUDA_ARCH__을 사용해 보았지만 어딘가에서이 코드는 장치 부분에서만 작동합니다. 그 후 github에서이 코드를 발견했습니다. link코드의 호스트 부분에서 GPU의 현재 계산 기능을 얻으려면 어떻게해야합니까?

더 좋은 방법이 있습니까? GPU의이 cudaMallocManaged가 & & cudaMemcpys 대신 일어날 장소 또는 cudaMallocs을 할 경우에 통합 된 메모리를 지원하는 경우 내가 (호스트 코드)를 확인하고자하기 때문에

나는 이것을 요구하고있다.

내가하고 싶은 것이의

예 :

int main() { 
    // IF CUDA >= 6.0 && COMPUTE CAPABILITY >= 3.0 
     // USE cudaMallocManaged 
    // ELSE 
     // USE cudaMallocs && cudaMemcpys 
    // END IF 
    return 0; 
} 
+1

나는 계산 기능을 얻기위한 SDK에 코드 예제가 있다고 생각합니다. –

+0

@PaulR 그래서'__host__ cudaError_t cudaGetDeviceProperties (cudaDeviceProp * prop, int device)'를 사용하고'managedMemSupported' 변수에서 값을 읽어야한다고 제안합니다. 'cudaMallocManaged'의 정의조차 가지고 있지 않은 구형 CUDA API로 정확히 동일한 코드를 컴파일하고 싶다면 어떻게해야할까요? – xorz57

+0

잘 모르겠다. CUDA로 작업 한 이후 오랜 시간이 걸렸습니다. SDK에 코드 기능이 있다고 말하는 코드 샘플이 있다는 것을 기억했습니다. 그게 전부입니다. –

답변

3

이 두 가지 질문이 여기에 관여 할 것 같다 :

  1. 나는 (컴파일시)에 CUDA 런타임 API 버전을 조회 할 수있는 방법 특정 런타임에 특정 런타임 API 요소 (예 : 관리되는 메모리와 관련된 요소)를 사용하는 것이 안전한지 확인할 수 있도록 특정 런타임에 특정 코드가 컴파일되고 있는지 확인해야합니다.

    하나의 방법은 이미 논의 된 here입니다. 내가 실행시 메모리를 관리 사용할 수 있는지

    #include <cuda_runtime_api.h> 
    ... 
    // test for CUDA version of 6.0 or higher 
    #if CUDART_VERSION >= 6000 
    // safe to use e.g. cudaMallocManaged() here 
    #else 
    // e.g. do not use managed memory API here 
    #endif 
    
  2. 는 어떻게 확인할 수 있습니다 :이 특정 사건에 대한 압축 된 버전으로, 당신은 같은 일을 할 수 있을까?

    코멘트에서 이미 언급했듯이 컴파일 할 CUDA 버전이 CUDA 6.0 이상 (예 : 위 참조) 인 경우, 예를 들어 cudaMallocManaged을 사용하기 전에 관리 메모리 지원을 테스트해야합니다. deviceQueryCUDA sample code은 런타임시 성능 테스트를 위해 일반적인 방법론 (예 : cudaGetDeviceProperties 사용, managedMemSupported 속성 테스트)을 나타냅니다.

+0

고마워요! 매우 정확한 대답! – xorz57