나는이 질문의 애매 모호함에 대해 미리 사과드립니다.OpenCL 은행 충돌 - 메모리 손실/데이터 손상?
배경 :
나는 오픈 CL의 형태 학적 영상 처리 기능을 쓰기를 시도하고있다. 나는 각 픽셀에 대한 데이터를 저장하는 데 사용하는 __local 버퍼가 있습니다 (각 픽셀은 아직 작업 루프에 의해 루프되지 않음). 또한 테스트 초기부터 단일 작업 그룹 (8x8 픽셀 이미지이므로 수동으로 결과의 유효성을 검사 할 수 있음) 만 사용하고 있습니다.
문제점 :
데이터가 하나, 둘, 셋, 또는 네 개의 다른 픽셀로부터의 픽셀 버퍼에 추가되어야 경우가있다. 같은 작업 그룹에서 인접한 픽셀이므로 로컬 메모리 뱅크 충돌이 발생합니다. 속도는 내 우선 순위가 아닙니다. (아직!). 그러나 이러한 은행 충돌로 인해 데이터가 삭제되고 데이터가 손상 될 수 있습니다. 오버 플로우 나 버퍼 오버를하지 않도록 매우 조심했습니다.
그래서 내 첫 번째 질문은 사실 은행 충돌로 인해 데이터가 손상되고 손실 될 가능성이 있습니까? Opencl 사양은 작업이 직렬화되어야하고 대역폭을 느리게한다는 것을 나타내는 것으로 보이지만 데이터 손실에 대한 언급은 없습니다.
두 번째 질문은 도움말입니다. - 내가 어떻게 할 수 있니?
모든 안내가 크게 감사하겠습니다. - 감사합니다!
그냥 당신이 내가 NVIDIA 카드와 같은 문제가 발생하고 있음을 알려 ... 공유 메모리의 구현 타이밍 문제에 대한 매우 몹시 신경을 쓰는 것 같다 컴파일러는이를 해결 할 수 없습니다 분명히. 또한 루프에서 분기를 제거하고 올바르게 계산할 수 있도록 루프를 풀어야했습니다. 어쨌든 브랜치와 여분의 더미 연산 없이는 더 빠릅니다.) –
코드를 공유 할 수 있습니까? 추가 기능은 어떻게 수행됩니까? 필요한 경우 원자 연산을 사용하고 있습니까? 메모리 액세스를 장벽과 동기화하고 있습니까? 은행 갈등으로 인한 데이터 손상이 의심 스럽습니다. 그것은 부적절한 메모리 접근 패턴 인 것 같습니다. 그러나 우리는 코드 없이는 추측 할 수 있습니다. –