【发布时间】:2016-09-12 05:46:47
【问题描述】:
我正在尝试用 C++ 创建线程。我当然觉得在 for 循环中创建线程并不意味着并行。但我想并行化下面的代码逻辑。
for(int i = 0; i < 100000; i++) // for each instance in the dataset
{
for(int j = 0; j < 100000; j++) // target each other instance
{
if(i == j) continue;
float distance = 0;
for(int k = 0; k < 2000; k++)
{
float a = dataset->get_instance(i)->get(k)->operator float();
float b = dataset->get_instance(j)->get(k)->operator float();
float diff = a - b
distance += diff * diff;
}
distance = distance + 10;
}
}
上面的代码段有没有并行的可能性?或者任何人都可以提供一些代码示例来理解线程的类似并行化。
【问题讨论】:
-
嗯,首先你需要知道你有多少个硬件核心。然后你需要以最有效的方式衡量和划分工作。所以,基本上尝试和失败直到成功。
-
这段代码似乎没有做任何事情。
distance在for(j)循环内声明,因此外部的值未知。 -
@kfsone:我已经更新了距离外的用法,请您提供任何指针或给我任何代码逻辑作为结果。
-
你需要先让我们知道你想要并行化什么。您正在尝试计算两点之间的最短距离,这不需要并行化。
-
distance仍然只在j循环内已知,因此您在i循环末尾添加的代码无效,smallestDistance 也有同样的问题。编译器可以很容易地省略整个函数:godbolt.org/g/ywcq9x
标签: c++ multithreading c++11 parallel-processing c++14