소형 임베디드 시스템의 이미지 데이터에 5 개의 교차 중앙값 필터를 사용합니다.
x
x x x
x
이 알고리즘은 실제로 간단합니다. 5 개의 부호없는 정수 값을 읽고, 가장 높은 2를 얻고, 그에 대한 계산을 수행하고, 부호없는 정수 결과를 다시 씁니다.
좋은 점은 5 개의 정수 입력 값이 모두 0-20의 범위에 있다는 것입니다. 계산 된 정수 값도 0-20 범위에 있습니다!
프로파일 링을 통해 가장 큰 두 숫자를 얻는 것이 병목 현상임을 알았 으므로이 부분의 속도를 높이고 싶습니다. 이 선택을 수행하는 가장 빠른 방법은 무엇입니까?
현재 알고리즘은 5 개의 숫자로 지정된 위치에 1을 가진 32 비트 마스크와 HW 지원 CLZ 기능을 사용합니다.
CPU는 회사 외부에서는 사용할 수없는 독점적 인 CPU라고 말해야합니다. 내 컴파일러는 GCC이지만이 CPU에 맞게 조정되었습니다.
조회 테이블을 사용할 수 있는지 알아 내려고 시도했지만 사용할 수있는 키를 생성하지 못했습니다.
내가 가진 입력에 대한 조합을하지만 순서는 중요하지 않습니다, 즉 동일하다 .[5,0,0,0,5]
[5,5,0,0,0]
아래의 해시 함수는 충돌없이 완벽한 해시를 생성합니다!
def hash(x):
h = 0
for i in x:
h = 33*h+i
return h
그러나 해시는 엄청 나며이를 사용할 메모리가 충분하지 않습니다.
사용할 수있는 더 나은 알고리즘이 있습니까? 조회 테이블을 사용하고 키를 생성하여 내 문제를 해결할 수 있습니까?
hash
이미 많은 작업을 수행합니다. 메소드에 대한 후속 호출이 관련되어 있습니까? 예를 들어 중앙x
이 매트릭스를 통해 행 단위로 이동합니까?