이미지 처리를 위한 속도 개선방법?

bloody의 이미지

예전에 모 외국계 회사에 면접을 보러 간적이 있었는데요..

이미지 처리를 위한 루프가 있는데...

for( int y = 0; y < height; y++ )
{
for(int x = 0; x < width; x++ )
{
current_pixel = image_byte[ y*width +x];
...
}
}

여기서 매번 루프마다 y*width를 계산하면 CPU가 곱셈을 계산하느라 퍼포먼스에 좋지 않다고 하면서
개선된 알고리즘을 생각해내서 속도를 개선해보라고 하더군요.

정말 고속의 이미지 처리를 위해서 곱셈을 안쓰고 각각의 픽셀들에 어떻게 접근하죠?

snowall의 이미지

w=0;
for(y++;){
 for(x++;){
  px = image[w+x];
...
...
  w+=width;
 }
}

이렇게 하면 되지 않을까요?

--------------------------
피할 수 있을때 즐겨라!
http://snowall.tistory.com

피할 수 있을때 즐겨라! http://melotopia.net/b

kaeri17의 이미지

for( int x = 0; y < width*height; x++ )
current_pixel = image_byte[ x];
}
로 하면 되겠네요.

CPU에 때라 이런것을 자동으로 해 주는 제공되는 SIMD류 어셈블러를 사용 할 수도 있고요.

doraq의 이미지

이 답은 제한적으로만 맞겠네요
해당 이미지가 통으로 할당안 메모리일 경우에만요.
화면의 특정위치 사각형을 지정하는 식이라면 안되잖아요.

ifree의 이미지

문득 궁금해졌는데,
예전 씨퓨는 곱셈 처리에 몇십 싸이클을 잡아먹었는데 요새는 좀 나아 졌나요?