2010-05-18 5 views
2

OpenCL의 전역 공간에서 같은 메모리 위치에 쓸 수있는 두 개 이상의 스레드가 있습니까? 쓰기는 항상 uchar을 0에서 1로 변경하므로 결과는 예측 가능해야하지만 프로그램에서 이상한 결과가 발생하므로 일부 쓰기가 실패 할 수 있는지 궁금합니다.OpenCL은 동일한 메모리 주소에 대한 동시 쓰기를 허용합니까?

버퍼를 쓰기 전용으로 선언하고 나중에 읽기 전용 버퍼에 복사하면 도움이 될 수 있습니까?

+3

가장 중요한 점은 OpenCL은 cl_khr_byte_addressable_store 확장을 활성화하지 않는 한'uchar' 배열 (또는 포인터)에 대한 쓰기를 지원하지 않는다는 것입니다. – avakar

+0

고마워, 이것은 문제가되는 것 같았지만 (동시 쓰기가 가능한지 아직 모르겠다. 코드를 변경하여 동시 읽기를 대신했다.) AFAIK 확장 기능을 사용할 수는 있지만 작동하지 않는 것 같습니다 ... 그러나 uchar를 사용하면 중요하지 않으며 int로 변경하면 트릭을 수행했습니다 :) – Wonko

답변

0

cl_khr_global_int32_base_atomics 확장자와 atom_inc 내장 함수를 사용하려고 했습니까? 먼저 개념 증명으로 uchar 대신 int32에 데이터를 저장 한 다음 데이터 구조의 메모리 영역을 최적화합니다.

+0

내 알고리즘을 변경하여 동시 쓰기 문제를 우회했습니다. 대신에 동시 읽기를 수행하십시오. 그래도 cl_khr_byte_addressable_store 확장을 사용한다고해도 uchar 대신 int를 사용하기 전까지는 작동하지 않습니다. 나는 당신의 atomics-tip를이 점에서 시험해 보지 않을 것이다, 그것이 지금 잘 움직이게하는 것처럼 보이기 때문에 팁 그러나 어떻게해서든지 고맙다 :) – Wonko

관련 문제