2016-09-10 2 views
0

이 기능은 화상 처리의 몇몇 예에서 가져는 0과 255 사이의 값을 반환만들기 기능 빠른

private static byte CalculateColorComponentBlendValue(float source, float overlay) 
{ 
    float resultValue = 0; 
    byte resultByte = 0; 

    resultValue = source + overlay; 

    if (resultValue > 255) 
    { 
     resultByte = 255; 
    } 
    else if (resultValue < 0) 
    { 
     resultByte = 0; 
    } 
    else 
    { 
     resultByte = (byte)resultValue; 
    } 

    return resultByte; 
} 

그리고 그것은 큰 루프에서 호출된다. 어떻게 든 최적화 할 수 있습니까? 약간의 비트 조작이있을 수 있습니까? 이제 전체 루프가 400ms 걸리고이 함수에 대한 호출을 제거하면 200ms로 줄어 듭니다.

+0

내가 생각할 수있는 한 가지 간단한 방법은'source + overlay' 값의 분포를 검사하여 가장 높은 확률을 가진 술어를 먼저 검사하는 것입니다. –

+0

루프가 얼마나 큽니까? – Mark

+0

어떻게 측정하나요? 컴파일러를 연결하지 않고 릴리즈에서 실행합니까? – Euphoric

답변

0

여기서 달성하고자하는 것은 클램핑이라고합니다. 전에 여러 번 논의되었습니다. 나는 그 토론을 볼 것을 제안합니다. 따라서 반복하지 말고 대신 몇 가지 질문을 드리겠습니다. 구현이 순전히 C이어야합니까? 값을 플로팅해야합니까? 다른 최적화 옵션을 사용할 수 있습니까? SIMD, 스레드, GPU?