2012-11-10 1 views
6

저는 고차원 NLP (비선형 프로그래밍)와 관련된 실시간 응용 프로그램을위한 algorthim을 작성하려고합니다.Matlab fmincons와 ipopt와 같은 C++의 NLP 솔버 사이의 성능 차이는 무엇입니까?

임 플리 멘 테이션이 있기 전에는 실시간 애플리케이션에 적합한 지 알아보기 위해 알고리즘을 타이밍해야하므로 Matlab의 기본 fmincon을 기준으로 사용합니다.

경험에 따르면 matlab 알고리즘은 느린 것에서 진도가 그들의 C++ 카운터보다 느린 경향이 있으므로이 특별한 경우에 어떤 종류의 성능 향상을 기대할 수 있습니까?

내 작업은 대부분 실시간 응용 프로그램과 관련되어 있으므로 NLP (비선형 프로그래밍)를 거의 사용하지 않기 때문에 직장 동료에게 물어 보았으므로 처음에는 ipopt를 사용해 보도록 권하고 웹 사이트를 봤습니다. Matlab에 대한 벤치마킹이나 알고리즘의 세부 사항에 관한 주제가 많지 않습니다 (적어도 Matlab에서는 algorthim의 세부 사항을 확인하는 것이 어렵지 않습니다). 그래서 기본적으로 정확성/견고성/최적화성에 대해서는 거의 생각하지 않습니다. 그것에 대해.

NLP의 C++ 임 플리 멘 테이션에 관한 도움은 매우 도움이 될 것입니다. 미리 감사드립니다.

+1

검색 문제는 도메인에 따라 크게 달라집니다. 당신이 얻게 될 확실한 대답은 두 시스템이 실제로 직면 할 수있는 실제 문제를 해결하고 어떻게 수행 하는지를 보는 것입니다. – Isaac

답변

2

이러한 종류의 문제 중 상당수는 큰 O (n^~ 3) 행렬 곱셈에 의해 지배됩니다. 이 경우에 두 시스템이 동일한 알고리즘을 사용하는 것과 성능이 유사 할 것이고 언어에 의존하지 않을 것입니다. 기본 행렬 곱하기 기능이 기본적으로 asm으로 구현됩니다.

알고리즘이 이와 같은 단순한 함수에 의해 지배되지 않고 C++ 라이브러리보다 훨씬 많은 메모리 관리가 필요하다면 (3 ~ 10 배 빠른 속도로) 이길 수 있습니다.

(많은 사람들이 이러한 유형의 수치 계산을 위해 설계된 GPU에 OpenCL을 사용하여 20-100 배 범위의 가격 대비 성능 차이를 보이기보다는 성능이 중요한 경우입니다. 더 빨리 필요할 경우 클러스터에 연결하십시오.)

+0

많은 부분에서 동의하지만 GPU가 예제를 통해 SQP를 사용하여 개선 할 수 있다고 생각합니다. 실제로 GPU의 분기 성능이 매우 낮고 캐시가 매우 낮은 것을 고려하면 실제로이 방법은 많은 분기가 있어야 제대로 작동합니다 (기본적으로 GPU가 메모리 대역폭에서 CPU보다 유리한 이점을 완전히 제거함), GPU의 implentation이 CPU 성능보다 현저히 느리지 않으면 놀랄 것입니다. – user0002128

+0

CPU보다 GPU 장점은 대용량 병렬 아키텍처입니다.이 아키텍처는 사실상 수천 개의 프로세서 코어와 CPU 10 대 정도를 가지고 있습니다. 문제가 데이터 병렬 구조로 세분화 될 수 있다면 (모든 것이 가능하지는 않습니다) GPU는 몇 배의 승수를 얻습니다. http://www.youtube.com/watch?v=IEWGTpsFtt8 –

관련 문제