플로트 * 메모리 블록에서 코드를 계산합니다. 이미지 작업을하고 있기 때문에 너비와 높이가 180, 180 회전으로 이루어져야합니다. 이 코드에서 유일한 병렬 처리 절차이므로 180 스레드 (1도 회전 당 1)를 시작합니다. 이미지를 회전시키고 매 회전마다 플로트 값을 얻습니다. 각 포인트에 현재 최대 값을 저장하는 또 다른 float * 블록이 있습니다.데이터 쓰기시 막대한 성능 손실
if(resultMap[i] < convrst)
{
resultMap[i] = convrst;
rMap[i] = (unsigned char)r0;
oMap[i] = (unsigned char)index;
}
resultMap에는 현재 가장 높은 값이 저장됩니다. convrst는 컨볼 루션의 결과이며, 현재 결과가 이전 결과보다 높으면 값을 저장하고 그 지점에 반경 (r0) 및 회전 (인덱스)을 저장합니다. r0는 원래 int이며 색인입니다. i는 0에서 imgsize-1까지가는 카운터입니다.
{} 부분에 지정이 없으면 전체 코드는 2 초 내에 끝나고 할당은 50 초가 걸릴 것입니다. 그 코드에서 동기화 문제를 피하기 위해 잠금을 해제했습니다).
왜 코드가 느리며 빨리 끝내려면 어떻게해야합니까?
이 GPU를 실행하고 계십니까? – talonmies
이것은 코어 i5-2410M 및 GeForce GT 540M이 장착 된 랩톱입니다. – SinisterMJ
커널을 몇 개의 블록으로 실행하고 있습니까? 180 threads는 GT 540M과 같은 2 SM GPU에서도 ** 작은 ** (그리고 잘못된) 쓰레드 수입니다. – talonmies