parallel-processing - 使用 OpenMP 时性能最差
问题描述
我正在尝试使用 OpenMP 并行化我的代码,基本上攻击每个我认为值得并行化的 for 循环。但我无法在任何实现中获得更好的性能。这是一个简单的例子:
double start = omp_get_wtime();
#pragma omp parallel for collapse(2)
for(int y=0;y<hl;y++)
for(int x=0;x<wl;x++)
{
dI_l[x + y*wl][0] = 0.25f * (dI_lm[2*x + 2*y*wlm1][0] +
dI_lm[2*x+1 + 2*y*wlm1][0] +
dI_lm[2*x + 2*y*wlm1+wlm1][0] +
dI_lm[2*x+1 + 2*y*wlm1+wlm1][0]);
}
double end = omp_get_wtime();
std::cout << " wall time : " << end - start << std::endl;
没有编译指示的时间会有所不同,但大约是:0.000385959。当我添加编译指示时:0.00149408。
我尝试添加具有不同数量的块和许多其他实现的“计划”子句,但我似乎从未获得更好的性能。
hl 是 240,wl 是 340。dI_l 和 dI_lm 是 Eigen::Vector3f 类型的指针。
知道我应该改进什么以获得更好的性能吗?
解决方案
推荐阅读
- c++ - std::byte 不是“std”的成员
- python - 如何退货?
- javascript - 使用数组和基本 js 知识创建 SPA 井字游戏
- typescript - 强制字符串类型成为 TypeScript 中字符串数组的一部分
- php - HTML/PHP 按月用颜色分组表
- java - Kubernetes 上的 Apache Ignite 与 TcpDiscoverySharedFsIpFinder:集群似乎解体了
- .net-core - 带有 .Net Core 的 AWS Secret Manager 引发套接字异常
- android-studio - 将 build.gradle 从 2.3.3 更新到 3.4.1,但我仍然收到重新“编译”被“实现”替换的警告?
- python - 有没有办法优雅地在圆圈内绘制箭头
- ios - KeyboardLayoutGuide 在 iMessage 应用程序中不起作用