我正在尝试将我的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
}我查阅了这里文档,但是那里没有关于线程安全的内容。我关心的是这个片段是否线程安全?
发布于 2016-09-06 02:47:14
经过一天的调试和捕获数据竞赛并阅读源代码(这里 ),我可以得出结论,index.knnSearch并不是线程安全的。
在内部,indexTree正在knnSearch调用上进行更新。我通过为每个线程创建一个index副本来解决这个问题(是的,它很昂贵,但仍然比顺序代码更快)。
https://stackoverflow.com/questions/39257005
复制相似问题