2016-08-31 4 views
0

私のML問題をflann Indexと並列化しようとしています。一言で言えば私のコードは次のようになります。opencv :: flann:インデックスknnsearchスレッドセーフですか?

Index index(dict, KDTreeIndexParams(TREE_NUM)); // HUGE dict, very expensive to construct -- prefer to create it once. 
#pragma omp parallel for 
for (int i = 0; i < featuresize; i++) { 
    // creating thread-local params 
    auto denseTF = index.knnSearch(<thread-local params>); 
    // not relevant code 
} 

私はドキュメントhereを見上げたが、そこスレッドの安全性については何もありません。 私の懸念は、このスニペットがスレッドセーフであるかどうかです。

+0

ドキュメントはその点で少し不足していますか?あなたのケースでは、その情報が重要なので、OpenCV開発者に尋ねることを考えましたか? – Harald

答えて

2

データレースをデバッグしてキャッチしてソースコード(here)を読み取った後、私はindex.knnSearchがスレッドセーフではないと結論づけることができます。

indexTreeknnSearchで更新されています。私は各スレッドのためにindexのコピーを作成することでこの問題を解決しました(はい、高価ですが、シーケンシャルコードよりも高速です)。

関連する問題