opencv::flann:Index knnsearch线程安全吗?



我正试图将我的ML问题与flann索引并行化。我的代码大致如下:

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
}

我在这里查阅了文档,但是没有关于线程安全的任何内容。我担心的是这个片段是否线程安全?

经过一天的调试和捕获数据竞争并阅读源代码(在这里),我可以得出结论,index.knnSearch不是线程安全的。

内部,indexTree正在更新knnSearch呼叫。我通过为每个线程创建index的副本来解决这个问题(是的,它很昂贵,但仍然比顺序代码快)。

最新更新