- 締切済み
openCVでのNEON最適化
openCVのNEON対応に関して質問です。 (オープンソースの開発の仕方についての質問になるかもしれませんが。) 最近openCVのNEON対応に興味を持ち始め、 gitリポジトリをcloneしてソースの中身を追っています。 しかし、私の実力不足により具体的にどのような方法で NEONによる最適化を実現しているのか追いきれていません。 まず始めにcloneしてきたディレクトリ以下をARM_NEONやuint8x16_t等の キーワードで検索すると、極々一部の関数(normHamming)等にしか 明示的にNEON化されている箇所が見当たりません。 しかし一方で、http://code.opencv.org/projects/opencv/wikiから 「neon optimization」等のキーワードで検索をかけると、 下記のようにNEON対応された関数がいくつもあるように読み取れます。 http://code.opencv.org/projects/opencv/repository/revisions/42e0214de51394d9d2a2aa293cbda40145a720a9 そこでdiffを眺めるとGET_OPTIMIZED(hoge)というような マクロ経由で最適化対応をしているようです。 しかし、今度はGET_OPTIMIZEDでソースコードに検索をかけると、precomp.cppの中に 以下のような記述が見つかりました。 #ifdef HAVE_TEGRA_OPTIMIZATION #include "opencv2/core/core_tegra.hpp" #else #define GET_OPTIMIZED(func) (func) #endif 一見マクロ側は何もしていないように見えてしまいますが、 これから、どのようにNEON最適化が行われるのでしょうか? 現時点で全く想像が付かないため、何かしらの推測が出来る方が いましたらご教示頂ければ幸いです。 以上、よろしくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
補足
ありがとうございます。 関数名切り替え用のマクロというイメージなのですね。 また、肝心の"core_tegra.cpp"はopenCVのソースツリーには含まれていませんでした。 以下を見るとTEGRA最適化周りはオープンソースでは無いとの回答があり、 https://groups.google.com/forum/?fromgroups=#!searchin/android-opencv/tegra/android-opencv/Gjz8T7cNN8E/SPHwFrEJJJQJ 以下のようにNVIDIAからTEGRAに最適化後のopenCVライブラリが提供されていたりするようなので、 https://developer.nvidia.com/tegra-android-development-pack 実質的にNEON最適化(画素値に対するループ処理部の書き直し)はopenCVのプロジェクト内ではほぼ進められておらず、非オープンソースの外部ライブラリを取り込んで対応しているという事でしょうか。