pycuda 예제

이러한 예제는 PyCUDA 배포의 예제/디렉터리에 사용되었지만 그룹 유지 관리를 쉽게 하기 위해 여기로 이동되었습니다. 이러한 예제를 재생하려면 예제 디렉토리에서 download-examples-from-wiki.py 실행하기만 하면 됩니다. (v0.94 이상 또는 현재 git) 개체의 수명에 연결된 개체 정리입니다. C++에서 RAII라고도 하는 이 관용구를 사용하면 올바른 코드, 누수 및 충돌이 없는 코드를 훨씬 쉽게 작성할 수 있습니다. PyCUDA는 종속성에 대해서도 알고 있으므로(예: 종속된 모든 메모리가 해제되기 전에) 컨텍스트에서 분리되지 않습니다. 예제에서 정리 코드가 없는 방법을 확인하십시오. 우리가 게으르고 그냥 건너 뛰었기 때문이 아닙니다. 그것은 단순히 필요하지 않습니다. PyCUDA는 자동으로 필요한 정리를 유추하고 당신을 위해 그것을 할 것입니다. pycuda.driver.In, pycuda.driver.Out 및 pycuda.driver.InOut 인수 처리기는 일부 메모리 전송을 단순화할 수 있습니다. 예를 들어 a_gpu를 만드는 대신 a를 교체하는 것이 괜찮다면 다음 코드를 사용할 수 있습니다. ) 기본 사항에 대해 충분히 익숙해지면 장치 인터페이스를 자유롭게 파헤쳐보세요.

자세한 예제를 보려면 배포의 예제/하위 디렉터리에서 를 확인합니다. 이 폴더에는 GPU와 CPU 기반 계산의 차이를 확인하기 위한 몇 가지 벤치마크도 포함되어 있습니다. 작업이 수행되는 방법에 대한 참조로, 배포의 테스트 / 하위 디렉토리에서 PyCuda의 테스트 도구 모음도 도움이 될 수 있습니다. PyCuda를 사용 하려면 전에 가져오기 및 초기화 해야: PyCUDA의 numpy 상호 작용 코드는 자동으로 장치에 공간을 할당, numpy 배열a 및 b 를 복사, 400x1x1 단일 블록 그리드를 시작 하 고 다시 복사. 그리드의 각 블록(CUDA 설명서 참조)은 배열 중 하나를 두 배로 합니다. for 루프를 사용하면 스레드보다 더 많은 데이터 요소를 두 배로 만들 수 있지만 충분한 수의 스레드가 있음을 보장할 수 있는 경우 효율적이지 않습니다. 다음으로 구조에 대한 래퍼 클래스가 만들어지고 두 개의 배열이 인스턴스화됩니다. 메타프로그래밍을 참조하십시오. 완전성. 당신이 원하는 경우 PyCUDA는 귀하의 처분에 CUDA의 드라이버 API의 모든 힘을 두고. 표면에, 이 프로그램은 제로의 화면을 인쇄합니다.

무대 뒤에서, 훨씬 더 흥미로운 것들이 일어나고있다 : PyCUDA는 또한 업데이트, 새로운 버전, 문서 및 지원을 찾을 수있는 자체 웹 사이트를 보유하고 있습니다. 속도. PyCUDA의 기본 레이어는 C ++로 작성되므로 위의 모든 미묘한 점은 사실상 무료입니다. 마지막으로 데이터를 전송하려면 어딘가에 서 장치에 메모리를 할당해야합니다 : 오류가 없는 경우 코드가 컴파일되어 장치에 로드됩니다. 우리는 우리의 pycuda.driver.Function에 대한 참조를 찾아 서 a_gpu를 인수로 지정하고 4×4 의 블록 크기를 편리합니다.