如何使用 Parallel.For 重新实现下面的循环?
for (int i = 0; i < data.Length; ++i)
{
int cluster = clustering[i];
for (int j = 0; j < data[i].Length; ++j)
means[cluster][j] += data[i][j]; // accumulate sum
}
获得更好的性能和速度是目标。
如何使用 Parallel.For 重新实现下面的循环?
for (int i = 0; i < data.Length; ++i)
{
int cluster = clustering[i];
for (int j = 0; j < data[i].Length; ++j)
means[cluster][j] += data[i][j]; // accumulate sum
}
获得更好的性能和速度是目标。
您几乎可以只替换外循环。但是,您需要注意设置,因为您正在从多个线程设置值:
Parallel.For(0, data.Length, i =>
{
int cluster = clustering[i];
for (int j = 0; j < data[i].Length; ++j)
Interlocked.Add(ref means[cluster][j], data[i][j]);
});
但是,这可能不会运行得更快,实际上可能运行得更慢,因为您很容易引入错误共享,因为所有内容都在读取和写入相同的数组。