나선 스크립트의 목적은 컴퓨터로 생성 된 이미지를 만드는 것입니다. CUDA 지원을 통해 이미지가 GPU에 맵핑됩니다.
다음은 파이썬 스크립트로 만든 이미지의 예입니다. 구성 세부 정보는 다른 예제와 함께 예제 폴더에서 찾을 수 있습니다.
파이썬 스크립트를 실행하려면 다음 종속성을 설치해야합니다.
인텔 i7-9700K에서 순차적으로 실행되면 각 이미지는 약 23.5877081 초가 걸립니다.
CGI 알고리즘을 최적화하기위한 첫 번째 단계는 GPU에서 병렬 사용에 대한 알고리즘을 재구성하는 것이 었습니다. 이것은 @cuda.jit 데코레이터를 사용하여 수행되었으며 커널 호출이 필요합니다. 알고리즘이 실행되기 전에 코드는 픽셀 배열을 GPU 하드웨어에 매핑하는 방법을 결정합니다. 알고리즘에서 각 픽셀을 계산하는 루프는 i, j = cuda.grid(2) 로 대체됩니다. i 와 j 이미지의 범위 내에 있으면 함수는 인덱스의 픽셀 색상을 계산합니다. 루프가 없습니다. 병렬화 속도는 약 1,072로 약 22.1124 밀리 초입니다.
nvprof CLI 도구 (Optimizations.txt)에 따르면 [CUDA memcpy HtoD] 실행의 약 36.09% 차지합니다. 이를 우회하기 위해 CPU 측 메모리에 추가되지 않고 장치에서 픽셀 배열을 생성하고 초기화 할 수 있습니다. numba.cuda device_array 을 제공합니다. 호스트 간 전송 최소화의 속도는 약 1.38로 약 15.9563 밀리 초가 걸립니다.
다음 최적화는 공유 메모리, 스레드 블록이 공유하는 메모리를 사용합니다. 메모리는 블록에 특이 적이므로 읽기 및 쓰기 속도가 더 빠릅니다. 따라서 메모리 액세스 작업은 공유 메모리에서 계산할 수 있습니다. 작업 후 글로벌 픽셀 배열에 대한 하나의 느린 액세스는 병렬 계산이 완료됩니다. 공유 메모리 사용의 속도는 약 1.068로 약 14.9425 밀리 초입니다.
CPU 알고리즘에서 최적화 된 GPU 알고리즘으로의 총 속도는 약 1,578입니다.