작성
·
52
0
"hist-shared.cu"의 다음 부분에서 질문있습니다.
if(threadIdx.x < HIST_SIZE) {
atomicAdd(&(hist[threadIdx.x]), s_hist[threadIdx.x]);
}
threadIdx.x는 0~31로 모두 다르기 때문에 병렬 연산이긴 해도, global memory에 있는 hist 배열의 서로 다른부분으로 write가 이루어진다고 생각했습니다.
따라서 서로 겹치는 위치가 없어서 atomic한 연산이 필요없을거라 생각했는데, atomic 연산이 없으면 결과가 이상하게 나오더라구요..
혹시 왜 그런지 알 수 있을까요?
양질의 강의 제공해주셔서 감사합니다!