2012-05-23 3 views
2

저는 Twisted와 pyCUDA를 사용하여 서버를 작성하고 있습니다. CUDA 작동 방식에 대한 제한은 내가 초기화 한 동일한 스레드에서 CUDA 컨텍스트에 액세스해야한다는 것입니다. 그러나 Twisted의 스레드 풀 구현은 특정 스레드를 요청할 수 없습니다.특정 스레드에 Twisted 코드 지연

예를 들어 서버에 연결된 클라이언트가 여러 개인 경우 CUDA를 사용하여 계산을 요청할 수 있습니다. 동일한 CUDA 객체로 여러 작업을 요청할 수 있습니다 (초기화 비용이 비쌉니다). deferToThread 함수를 사용하고 싶었지만 이것이 특정 스레드로 연기되도록 허용하지 않습니다. 단지 '일부 스레드'입니다. 이상적으로는 deferToThread와 같은 메커니즘을 사용하지만 코드가 실행되는 스레드를 지정하는 것이 좋습니다. 어떤 제안이라도 인정 될 것입니다. 아마도 Twisted가이 프로젝트를 진행하는 잘못된 방법 일 것입니다.

답변

3

CUDA 드라이버 API는 cuCtxPushCurrent()cuCtxPopCurrent() 기능을 사용하여 여러 스레드에서 CUcontext (드라이버 API)에 대한 작업을 지원했습니다. 많은 릴리스의 최신 버전입니다. CUDA 4.0 이상에서 CUDA 런타임은 복수의 OS 스레드에서 장치 (CUcontext)로 작업을 제출하거나 함수 cudaSetDevice()을 사용하여 단일 OS 스레드에서 여러 장치로 작업을 제출하는 것을 지원합니다.

pyCUDA를 통해 노출되는지 확실하지 않습니다.

+0

이 전략은 효과가있었습니다. 고맙습니다. – tkerwin