假设我有三个整数向量:
我想运行以下代码:
int i,j;
for ( i = 0; i < vect1.size(); i++)
{
for ( j = 0; j < mainVect.size(); j++)
{
if (vect1[i] == mainVect[j])
{
vect2[i]++;
}
}
}
花了很长时间才完成……我如何加快运行速度,我有多处理器。作为尝试,我在之前的代码之前添加了以下句子(我读到它是并行运行的)
#pragma omp parallel for private(i, j) shared( mainVect, vect1, vect2)
但是还是慢...
如果我将 for 循环分成 4 个部分;例如,我如何让这些 for 循环同时运行,例如
for ( i = 0; i < vect1.size()/4; i++)
{
}
for ( i = vect1.size()/4; i < vect1.size()/2; i++)
{
}
.... and so on
或者其他方法...
PS: Windows google cloud machine, n1-standard-4 (4 vCPUs, 15 GB memory) ..运行上述代码时CPU利用率只有27%。
使用线程是一种可能的解决方案。
但主要问题是:你想解决什么问题?
如果我理解正确的话,您就是在计算 vect1 中某个元素在 mainVect 中出现的次数。由于您不需要知道在哪里,您可以重新排列 mainVect(的副本)。
我的方法是:
这种方法的复杂度是 O(n log n)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句