2011-02-17 8 views
1

나는이 질문의 애매 모호함에 대해 미리 사과드립니다.OpenCL 은행 충돌 - 메모리 손실/데이터 손상?

배경 :

나는 오픈 CL의 형태 학적 영상 처리 기능을 쓰기를 시도하고있다. 나는 각 픽셀에 대한 데이터를 저장하는 데 사용하는 __local 버퍼가 있습니다 (각 픽셀은 아직 작업 루프에 의해 루프되지 않음). 또한 테스트 초기부터 단일 작업 그룹 (8x8 픽셀 이미지이므로 수동으로 결과의 유효성을 검사 할 수 있음) 만 사용하고 있습니다.

문제점 :

데이터가 하나, 둘, 셋, 또는 네 개의 다른 픽셀로부터의 픽셀 버퍼에 추가되어야 경우가있다. 같은 작업 그룹에서 인접한 픽셀이므로 로컬 메모리 뱅크 충돌이 발생합니다. 속도는 내 우선 순위가 아닙니다. (아직!). 그러나 이러한 은행 충돌로 인해 데이터가 삭제되고 데이터가 손상 될 수 있습니다. 오버 플로우 나 버퍼 오버를하지 않도록 매우 조심했습니다.

그래서 내 첫 번째 질문은 사실 은행 충돌로 인해 데이터가 손상되고 손실 될 가능성이 있습니까? Opencl 사양은 작업이 직렬화되어야하고 대역폭을 느리게한다는 것을 나타내는 것으로 보이지만 데이터 손실에 대한 언급은 없습니다.

두 번째 질문은 도움말입니다. - 내가 어떻게 할 수 있니?

모든 안내가 크게 감사하겠습니다. - 감사합니다!

+0

그냥 당신이 내가 NVIDIA 카드와 같은 문제가 발생하고 있음을 알려 ... 공유 메모리의 구현 타이밍 문제에 대한 매우 몹시 신경을 쓰는 것 같다 컴파일러는이를 해결 할 수 없습니다 분명히. 또한 루프에서 분기를 제거하고 올바르게 계산할 수 있도록 루프를 풀어야했습니다. 어쨌든 브랜치와 여분의 더미 연산 없이는 더 빠릅니다.) –

+0

코드를 공유 할 수 있습니까? 추가 기능은 어떻게 수행됩니까? 필요한 경우 원자 연산을 사용하고 있습니까? 메모리 액세스를 장벽과 동기화하고 있습니까? 은행 갈등으로 인한 데이터 손상이 의심 스럽습니다. 그것은 부적절한 메모리 접근 패턴 인 것 같습니다. 그러나 우리는 코드 없이는 추측 할 수 있습니다. –

답변

0

아마도 nvidia 백서 Prefix Sum (Scan) with CUDA을 통해 올바른 방향으로 이동할 수 있습니다. [0,3,7,8] : 그것은 is a good example of a computation that seems inherently sequential, but for which there is an efficient parallel algorithm.

all-prefix-sums operation 자신의 합계로 번호 [3,4,1,2]의 목록을 도는 all-prefix-sums algorithm, 대한 것입니다.

나는이 논문이 CUDA에 관한 것이라는 것을 알고 있지만 결과 커널은 매우 유사하다는 것을 발견했다. 두 기술 모두 유사한 개념을 사용한다.

나는 종이가 당신을 도울 수 있기를 바랍니다.

건배