인텔 i3 프로세서에서 32 개 요소 (각 1 바이트 데이터)의 합계를 줄이려고합니다. 나는 이것을했다 :인텔에서 SSE2를 사용하여 오버플로없이 부호없는 바이트의 합계를 줄입니다.
s=0;
for (i=0; i<32; i++)
{
s = s + a[i];
}
그러나 내 응용 프로그램이 훨씬 적은 시간을 필요로하는 실시간 응용 프로그램이기 때문에 더 많은 시간이 걸린다. 최종 합계가 255를 초과 할 수 있습니다.
저수준 SIMD SSE2 명령어를 사용하여 구현할 수있는 방법이 있습니까? 불행히도 나는 SSE를 사용한 적이 없다. 이 목적을 위해 sse2 함수를 검색해 보았지만 사용할 수 없습니다. 작은 크기의 문제에 대한 계산 시간을 줄이는 것이 보장됩니까?
제안 사항
참고 : OpenCL 및 CUDA를 사용하여 비슷한 알고리즘을 구현했으며 문제 크기가 클 경우에만 효과가있었습니다. 작은 크기의 문제의 경우 오버 헤드 비용이 더 많이 들었습니다. SSE에서 작동하는 방법을 잘 모르십시오. PSADBW
을 악용하여 작은 수평 총계를 빠르게 계산할 수 있습니다.
합계가 255보다 큽니까? – hirschhornsalz
예 최종 합계가 255보다 클 수 있습니다. – gpuguy