2012-02-19 5 views
4

큰 2D 배열의 값을 중심으로 값의 작은 2D 배열을 이동하고 더 작은 배열의 해당 값보다 큰 큰 배열의 값을 값으로 설정해야합니다 더 작은 배열의. 일종의 이미지 컴 포지 팅을 생각해보십시오. 그러나 2 개의 2D 플로트 배열을 사용하십시오. 가능한 한 빨리이 일을해야합니다. NEON Assembly, Accelerate 프레임 워크 또는 내가 들어 보지 못한 다른 방법을 사용하여 최적화 할 수있는 방법이 있는지 궁금합니다. 값을 비교하고 바꾸기 위해 double 중첩 된 for 루프보다 훨씬 빠른 것이 있습니까? 예를 들어, 2D 배열 대신에 1D 배열로 값을 저장하는 것이 더 빠를 것입니까? 또는 각 열 아래로 이동하는 대신 행에서 값에 액세스하는 것이 더 빠릅니까? 내가 얻을 수있는 여분의 속도를 짜내려고 노력하지만 어떻게할지는 모르겠다.iOS에서 배열의 빠른 비교

답변

2

원하는 작업을 수행하는 Accelerate 프레임 워크의 기능을 알지 못합니다. 어셈블리 언어로 직접 이동하지 않고 vmin_f32 내장 함수를 사용하여 한 번에 두 쌍의 부동 소수점을 처리하거나 vminq_f32을 사용하여 한 번에 네 쌍을 처리 할 수 ​​있으므로 NEON을 사용하여 가속화 할 수 있습니다.

이러한 링크를 사용하면 내장 함수를 사용하여 시작하는 데 도움이 있습니다,하지만 난 정말 당신을 위해 더 나은 조언을하지 않습니다 ARM NEON Optimization. An Example


ARM Information Center - NEON Intrinsics

How to use the multiply and accumulate intrinsics in ARM Cortex-a8? 나는 neon intrinsics tutorial 인터넷 검색으로 사람들을 발견했다.

엑스 코드 4.2 : /Developer/Library/PrivateFrameworks/DTISAReferenceGuide.framework/Versions/A/Resources/ARMISA.pdf
엑스 코드 4.3 : /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/Frameworks/DTISAReferenceGuide.framework/Versions/A/Resources/ARMISA.pdf

0

당신이 structs의 1 차원 C 배열을 비교해야하는 경우, 당신은 시도 할 수 있습니다 또한

는 개발자 도구 패키지는 일부 ARM 아키텍처 설명서가 포함되어 memcmp() 루프보다 for 루프가 더 효율적인지 확인하십시오. 일종의 배열 해시를 감당할 수 있다면 배열이 다른 경우 성능이 크게 향상 될 수 있습니다. 예를 들어, 부동 소수점 배열이있는 경우 합계를 해시로 사용할 수 있습니다. 배열의 해시가 다른 경우 배열을 전혀 비교할 필요가 없습니다. 반면에 배열이 실제로 대부분 같다고 예상하면 해시 계산만으로는 작업 속도가 느려집니다.

해시 계산을 통해 창의력을 발휘하면 도움이 될 수 있습니다. 2D 배열의 경우 해시는 1D 배열 해시의 다항식이거나 배열 크기, 1D 배열 해시의 해시 등과 같은 메타 데이터가 포함 된 struct 일 수 있습니다. 은 1D 배열 해시의 해시보다 더 빠릅니다. 최악의 시나리오 (배열이 동일 할 때)에서 큰 수열 배열을 비교할 때 똑 바른 단일 스레드 for 루프가 발생합니다.