2013-06-03 3 views
1

OpenCL을 사용하여 2 차원 Laplace 방정식을 풀고 있습니다. 전역 메모리 액세스 버전이 공유 메모리를 사용하는 버전보다 빠르게 실행됩니다. 공유 메모리에 사용되는 알고리즘은 OpenCL Game of Life 코드의 알고리즘과 동일합니다. 사람이 직면 한 경우OpenCL 공유 메모리 최적화

https://www.olcf.ornl.gov/tutorials/opencl-game-of-life/

같은 문제가 도와주세요. 누구든지 커널을보고 싶다면 게시 할 수 있습니다.

+0

무엇이 당신의 질문입니까? 문제가 정확히 무엇입니까? –

+0

문제는 공유 메모리 (로컬 mem)를 사용할 때 프로그램이 실제로 전역 메모리에서 데이터를 사용할 때보 다 느리게 실행된다는 것입니다. 그러나 모든 곳에서 공유 메모리를 사용하면 속도가 빨라집니다. –

+0

나는 삶의 게임에서와 같은 알고리즘을 사용했다. –

답변

0

아니요. 그것은 단지 다른 모든 것이 평등하다고 말하고, 로컬 메모리로부터의 액세스는 글로벌 메모리로부터의 액세스보다 빠릅니다. 커널에서 전역 액세스가 더 나은 성능을 제공하는 coalesced 인 것으로 보입니다.

2

전역 메모리가 로컬 메모리 버전보다 빠르게 실행되는 경우 (사용중인 메모리 공간에 따라 둘 다 동일하게 최적화되었다고 가정) this paper이 질문에 대한 답변을 제공 할 수 있습니다. 커널에서 로컬 메모리의

사용 같은 컴퓨팅 장치에서 실행할 수있는 동시 작업의 수에 또 다른 제약 조건을 추가

는 여기의 말씀 요약입니다. 어떤 경우에 따라서

, , 이 제약을 제거하고 글로벌 메모리 액세스의 대기 시간과 함께 생활하는 것이 더 효율적일 수있다. wavefronts (NVidia에서 warps) 각 컴퓨팅 그룹에서 동일한 작업 단위로 실행되는 각 작업 그룹을 분할하면 GPU가 레이턴시를 더 잘 숨길 수 있습니다. 메모리 액세스가 완료 될 때까지 기다리는 경우 다른 사람이 계산할 수 있습니다 이 시간 동안.

결국 각 커널은 진행하기 위해 더 많은 시간을 필요로하지만 GPU가 더 많은 양을 동시에 실행하기 때문에 GPU가 완전히 사용 중입니다.

0

공유 메모리 (CPU와 공유되는 메모리)를 사용하는 것이 항상 빠를 수는 없습니다. 최신 그래픽 카드 사용하기 GPU/CPU가 동일한 데이터에서 오페라토닌을 수행하고 서로 정보를 공유해야하는 경우가 더 빠를 것입니다. 메모리를 카드에서 복사 할 필요가 없으므로 그 반대의 경우도 마찬가지입니다.

그러나 프로그램이 GPU에서 완전히 실행되는 경우 로컬 메모리 (GDDR5)에서 독점적으로 실행하면 GPU의 메모리가 시스템보다 훨씬 빠를뿐만 아니라 시스템이 훨씬 빠를 것이므로 매우 빠르게 실행될 수 있습니다 PCI-E 레인을 통해 메모리를 읽음으로써 야기되는 모든 대기 시간.

그래픽 카드의 메모리를 "l3 캐시"유형으로 생각하고 시스템의 메모리는 전체 시스템에서 공유하는 리소스로, 여러 장치가 정보를 공유해야하거나 캐시가 가득차있을 때만 사용합니다. 나는 CUDA 또는 OpenCL 프로그래머가 아니며,이 애플리케이션에 Hello World를 작성한 적도 없습니다. 나는 단지 약간의 백서를 읽었으며, 상식 일뿐입니다. (아마도 컴퓨터 과학 학위가 유용 할 수도 있습니다.)