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

问题描述 投票:0回答:2

我正在尝试将我的 ML 问题与 flann Index 并行化。简而言之,我的代码如下所示:

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,但那里没有关于线程安全的内容。 我关心的是这个片段是否是线程安全的?

c++ multithreading opencv openmp
2个回答
4
投票

经过一天的调试和捕获数据竞争并阅读源代码(此处),我可以得出结论:

index.knnSearch
不是线程安全的。

在内部,

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


0
投票

你可以在github下载一个简单的kd-tree,(只有一个h文件,不到1000行)来代替它,效果很好

© www.soinside.com 2019 - 2024. All rights reserved.