我正在尝试在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;
}
}
上面的代码段是否有并行性的可能性?或者有没有人可以提供给我一些代码示例来理解类似线程的并行化。
for(j)
循环中声明了distance
,所以它的值在外部是未知的。 - kfsonedistance
仍然只在j
循环内部可知,因此您在i
循环末尾添加的代码是无效的,并且smallestDistance
也有同样的问题。编译器可以轻松省略整个函数:https://godbolt.org/g/ywcq9x - kfsone