2013-12-12 3 views
-5

드라이버 api를 사용하면 동일한 애플리케이션 ([1])에서 런타임 API의 사용을 배제합니다. 불행히도 cublas, cufft 등은 모두 런타임 API를 기반으로합니다. cuModuleLoad와 cublas 에서처럼 동적 커널 정의를 원할 경우, 옵션은 무엇입니까? 나는 이것을 염두에두고 있지만 어쩌면 더 많은 것들이 있습니다 :cuda 런타임 API 및 동적 커널 정의

가. 동일한 응용 프로그램에서 드라이버와 런타임 api의 평화 공존을 지원할 것이라는 소문이있는 컴퓨팅 기능 3.5를 기다리십시오.

B. 커널을 .so 파일로 컴파일하고 dlopen하십시오. 그들은 dlcose에서 언로드됩니까?

C. 드라이버 api에서 cuModuleLoad를 사용하려고 시도하지만 런타임 API의 나머지는 모두 시도합니다. 이것에 대한 희망이 있는지는 모르겠다.

jcuda 또는 pycuda가 거의 동일한 묶음에 있기 때문에 나는 이미 숨을 쉬고 있지 않습니다. 그들은 이미 알아 냈을 것입니다.

[1] CUDA Driver API vs. CUDA runtime

+0

계산 기능 3.5 디바이스는 2013 년 1 월 이후에 기성품입니다. – JackOLantern

+0

cm 3.5가 실제로이 문제를 해결하고 그 장치가 아직 널리 퍼져 있지 않음을 확인할 수 없었습니다. – melisgl

+2

그리고 런타임 API - 드라이버 API 상호 운용성은 CUDA 3.0이 출시 된 시점 (약 4 년 전)에 해결되었습니다. 2009 년부터 * 모든 * CUDA 호환 하드웨어를 다루었습니다. – talonmies

답변

6

당신은 여기 풍차에 기울어있다 요약하면. 상당히 오래된 정보에 의존함으로써 CUDA 3.0 베타가 2009 년에 릴리스 된 이래로 런타임 및 드라이버 API 상호 운용성이 CUDA에서 지원되지 않는다는 결론을 얻은 것으로 보입니다. release notes 해당 버전 :

이제 CUDA Toolkit 3.0 베타를 사용할 수 있습니다. 이 릴리스의

주요 특징은 다음과 같습니다

  • CUDA 드라이버/응용 프로그램은 또한 라이브러리를 사용하는 CUDA 드라이버 API를 사용 할 수 있습니다 런타임 버퍼 상호 운용성의 CUDA C 런타임을 사용하여 구현.

은 간결하게하는 방법 드라이버와 런타임 API 상호 작용을 설명 문서 here 있습니다. 하나는 동시에 cuModuleLoad 및 CUBLAS 에서 동적 커널 정의가 원하는 경우

, 옵션은 무엇입니까 :

구체적으로 주요 질문에 대답하려면?

기본적인 접근 방식은 이런 식입니다 :

  1. 당신이 일반적으로하는 것처럼 장치에 컨텍스트를 설정하기 위해 드라이버 API를 사용합니다.
  2. 런타임 API 루틴 cudaSetDevice()을 호출하십시오. 런타임 API는 자동으로 기존 드라이버 API 컨텍스트에 바인딩됩니다. 장치 열거는 두 API간에 동일하고 공통적이므로 드라이버 API에서 주어진 장치 번호에 컨텍스트를 설정하면 동일한 번호가 드라이버 API에서 동일한 GPU를 선택합니다.
  3. 이제 CUDA를 자유롭게 사용할 수 있습니다 런타임 API 호출 또는 CUDA 런타임 API에 빌드 된 라이브러리. 동작은 런타임 API "지연"컨텍스트 설정에 의존하는 경우와 동일합니다.
+0

위대한 대답, talonmies. 고맙습니다. – melisgl