OpenMP与阵列元素的并行化 我一直在玩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]); } #pragma omp parallel for 对于(索引j=alignedSize;j

OpenMP与阵列元素的并行化 我一直在玩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]); } #pragma omp parallel for 对于(索引j=alignedSize;j,c++,openmp,eigen,C++,Openmp,Eigen,一个res条目的大小是多少?如果它小于一个缓存线的大小,那么它很有可能。一个res条目的大小是多少?如果它小于一个缓存线的大小,那么它很有可能。典型cpu的最小值是128字节的块,然后您需要统一的最后一个级别缓存。典型cpu的最小值是128字节的块,然后需要统一的最后一级缓存。一个res条目有8字节长,因此假设一个64字节长的缓存线,看起来我想为每个线程分配8次迭代?类似于调度的pragma omp parallel(静态,8)?一个res条目有8字节长,因此假设有一个64字节长的缓存线,看起来

一个
res
条目的大小是多少?如果它小于一个缓存线的大小,那么它很有可能。

一个
res
条目的大小是多少?如果它小于一个缓存线的大小,那么它很有可能。

典型cpu的最小值是128字节的块,然后您需要统一的最后一个级别缓存。

典型cpu的最小值是128字节的块,然后需要统一的最后一级缓存。

一个res条目有8字节长,因此假设一个64字节长的缓存线,看起来我想为每个线程分配8次迭代?类似于调度的pragma omp parallel(静态,8)?一个res条目有8字节长,因此假设有一个64字节长的缓存线,看起来我希望为每个线程分配8次迭代?类似于
#pragma omp parallel for schedule(静态,8)
?您是如何测量时间的?您的具体结果是什么?您能否以a的形式提供代码?系统的具体处理器型号和内存设置是什么?您是如何测量时间的?您的具体结果是什么?您能否以a的形式提供代码?系统的具体处理器型号和内存设置是什么?