iOS
의 경우 OpenCV
을 사용하여 컴퓨팅 집약적 인 앱을 완료했습니다. 물론 그것은 느렸다. 하지만 그것은 내 PC 프로토 타입보다 200 배 더 느린 것과 같았다. 그래서 나는 그것을 최적화하고 있었다. 매우 처음 15 초에서 나는 0.4 초의 속도를 얻을 수 있었다. 나는 모든 것을 발견하고 다른 사람들이 나누고 싶어하는 것이 있을지 궁금합니다. 내가 무슨 짓을 :IOS/iPad/iPhone의 최대 속도
대체 "
double
"데이터 유형은 OpenCV의 내부에 "float
". 더블은 64 비트이고 32 비트 CPU는 쉽게 처리 할 수 없기 때문에 플로트는 나에게 약간의 속도를 주었다. OpenCV는 자주 double을 사용합니다."
-mpfu=neon
"을 컴파일러 옵션에 추가했습니다. 부작용은 에뮬레이터 컴파일러가 더 이상 작동하지 않고 모든 것이 네이티브 하드웨어에서만 테스트 될 수 있다는 새로운 문제였습니다.및
cos()
을 90 개의 값 찾아보기 테이블로 대체했습니다. 속도 향상은 엄청났습니다! 이러한 최적화가 어떤 속도 향상도주지 않는 PC와는 다소 반대입니다. 각도로 작업하는 코드가 있었고이 값은sin()
및 에 대한 라디안으로 변환되었습니다. 이 코드도 삭제되었습니다. 그러나 조회 테이블은 일을했다.사용 설정
"thumb optimizations"
. 일부 블로그 게시물은 정확히 반대를 권장하지만 엄지 손가락은 일반적으로armv6
에서 느리게 진행되기 때문입니다.armv7
은 문제가 없으며 빠르고 작게 만듭니다.엄지 손가락 최적화와
-mfpu=neon
이 잘 작동하고 충돌이 발생하지 않도록하기 위해 armv6 타겟을 완전히 제거했습니다. 내 코드는 모두armv7
으로 컴파일되며 앱 스토어의 요구 사항으로도 나와 있습니다. 즉, 최소iPhone
은3GS
이됩니다. 나이 든 것을 버리는 것이 좋습니다. 어쨌든 이전 버전은 느린 CPU를 사용하고 CPU 집약적 인 앱은 오래된 장치에 설치하면 나쁜 사용자 환경을 제공합니다. 물론은 내가 OpenCV의에서
"dead code"
을 삭제-O3 flag
을 사용합니다. OpenCV를 최적화 할 때 종종 프로젝트에 필요하지 않은 코드가 있음을 알았습니다. 예를 들어 종종 여분의 픽셀 크기가 8 비트인지 32 비트인지를 확인하기 위해"if()"
이 있으며, 8 비트 만 필요하다는 것을 알고 있습니다. 이렇게하면 일부 코드가 제거되고 최적화 프로그램이 더 많은 것을 제거하거나 상수로 대체 할 수있는 기회를 제공합니다. 또한 코드는 캐시에 더 잘 들어 맞습니다.
다른 트릭과 아이디어가 있습니까? 엄지 손가락을 사용하고 삼각법을 조회로 대체하는 나를 위해 나를지지하는 사람이 나를 놀라게했습니다. 어쩌면 더 많은 것을 할 수있는 응용 프로그램을 만들 수 있을지 알고 있습니까?
이 Accelerate는 나에게 처음 접했습니다. 어셈블리 수준의 사고가 필요하기 때문에 사용하기가 다소 어렵습니다. 그러나 여전히 가능하고 어쩌면 시도 할 것입니다. 나는 우리가 여기에서 더 유용한 힌트를 얻는 지보고 싶기 때문에 나중에 받아 들여야한다. –
WWDC 2012 비디오에는 Accelerate 프레임 워크를 전적으로 다루는 세션이 있습니다. 너는 그것을 봐야한다 ^^ – borrrden
http://adcdownload.apple.com//wwdc_2012/wwdc_2012_session_pdfs/session_708__the_accelerate_framework.pdf 과 https://developer.apple.com/videos/wwdc/2012/#708이 보인다. 그것에 대한 링크가 될 –