我一直在玩OpenMP,并试图看看我是否可以在特定的C ++代码中获得加速。
#pragma omp parallel for
for (Index j=alignedSize; j<size; ++j)
{
res[j] = cj.pmadd(lhs0(j), pfirst(ptmp0), res[j]);
res[j] = cj.pmadd(lhs1(j), pfirst(ptmp1), res[j]);
res[j] = cj.pmadd(lhs2(j), pfirst(ptmp2), res[j]);
res[j] = cj.pmadd(lhs3(j), pfirst(ptmp3), res[j]);
}
我是OpenMP的新手,所以对我很温柔,但是有人可以解释为什么这段代码最终加倍执行时间而不是加快速度吗?
我正在运行4核,以防万一。
答案 0 :(得分:2)
res
条目的大小是多少?如果它小于缓存行的大小,则可能false sharing。
答案 1 :(得分:0)
典型cpu的最小值是128字节的块,然后你需要统一的最后一级缓存。