내가 CUDA를 사용하여 다음과 같은 알고리즘을 구현하는 방법을 생각하기 위해 노력하고있어 큰 막대 그래프로 데이터를 축적 : 각 복셀에 대해 내가 인덱스를 계산CUDA는 : 수레
복셀의 큰 볼륨에서 작업을 i
값은 c
입니다. 계산을 수행 한 후에 수행해야합니다 histogram[i] += c
c
은 부동 소수점 값이고 히스토그램은 최대 15,000 개의 저장소를 가질 수 있습니다.
이 방법을 CUDA를 사용하여 효율적으로 구현할 방법을 찾고 있습니다. 첫 번째 명백한 문제는 내가 사용하고있는 컴퓨팅 기능 1.3에서 부동 소수점 atomicAdd()
을 수행 할 수 없다는 것입니다. 어떻게 안정적으로 누적 될 수 있습니까?
This example by nVidia 다소 다소 단순합니다. 히스토그램은 공유 메모리에 저장되며 (크기 때문에 수행 할 수 없음) 정수 만 누적합니다. 이 접근법을 제 경우로 일반화 할 수 있습니까?
이것은 유망한 접근 방법처럼 보이지만 두 스레드가 같은 셀에 동시에 쓰지 않도록하려면 어떻게해야합니까? – shoosh
각 스레드는 두 번째 커널을 사용하여 합산 한 자체 히스토그램을 갖습니다. 걱정할 필요가있는 것은 합계가 발생하기 전에 모든 스레드가 완료되었는지 확인하는 것입니다. – sjchoi