2012-08-10 3 views
3

sse 및 mmx 명령 세트를 살펴본 결과 3 채널 이미지 처리에 대한 지침이 없습니다. 물론 여러 작업에 대해 평균 두 이미지와 같은 동일한 지침을 사용할 수 있습니다. 그러나 선형 변환을 사용하여 채널을 언 셔플 링하거나 다른 채널을 혼합하는 것과 같은 작업에서는 32 비트 이미지를 사용하는 것이 훨씬 쉬워 보입니다.simd 명령어를 사용할 때 32 비트 이미지 처리가 24 비트 이미지 처리보다 빠릅니까?

24 비트 이미지와 32 비트 이미지의 일반적인 이미지 처리 작업의 성능이 어떻게 중요합니까?

답변

4

이미지가 크고 작업이 단순한 경우 (예 : 알파 블렌딩 등) 24 비트/픽셀이 더 빠릅니다.

이미지 처리의 작업은 매우 간단하지만 수백만 개를 실행하는 경우가 많습니다. 따라서 메인 메모리에서 CPU로 데이터를주고받는 데 사용되는 시간은 알고리즘의 성능을 쉽게 좌우할 수 있습니다.

따라서 24 비트/픽셀 이미지는 32 비트/픽셀 이미지보다 이점을 제공 할 수 있습니다.

24 비트/픽셀로 잘 수행되는 이미지 처리 코드를 작성하는 것은 쉽지 않습니다. SSE 명령은 실제로 데이터에 맞지 않으므로 바이트를 섞어서 정렬해야합니다. 그런 다음 모든 다른 정렬을 처리해야합니다.

작업중인 이미지가 작고 l1 또는 l2 캐시에 맞으면 사물이 다르고 CPU 시간이 성능을 압도합니다. 이러한 경우 32 비트/픽셀이 더 빠르게 수행됩니다.

+0

캐싱에 대한 언급은 정말로 흥미 롭습니다. 고마워. –

+0

실제로 내가 올바르게 기억한다면 패치를 할 수 있습니다 (이것은 버퍼링이라고 생각합니다). 그리고 L1 또는 L2 캐시에 맞는 패치 나 블럭 위에 작업을하십시오. 그런 다음 작업 블록을 행렬을 따라 이동하십시오. 플롭 카운트가 높으면 캐시 된 액세스가 패치 복사 비용을 상쇄합니다. –

3

채널을 분할하는 PSHUFB (별칭 _mm_shuffle_epi8)가있는 새로운 x86 CPU에서 픽셀 폭을 32 비트로 확장하므로 추가 메모리 액세스가 발생하는 것보다 저렴할 수 있습니다. PSHUFB가없는 오래된 x86 CPU에서는 많은 셔플 또는 언 패킹 지침이 필요하며 32 비트 픽셀이 훨씬 효율적입니다.

NEON 분할을 사용하는 ARM CPU에서로드 저장 장치가 채널을 무료로 사용할 수 있습니다. NEON이없는 ARM CPU에서 채널을 분할하는 작업은 ARMv6 SIMD 명령어를 사용하여 픽셀 당 약 3 명령을 처리 할 수 ​​있습니다.

+0

나는 PSHUFB 지침을 간과했다. 좋은 힌트. 고마워. –

관련 문제