c - 并行内循环减慢程序
问题描述
我正在尝试将程序优化为实验。
当我并行化前两个外部循环(使用“it”和“i”)时,我发现执行时间存在显着差异。但是当我试图并行化最里面的循环时,程序变得比顺序循环慢得多。我也尝试过使用归约,但结果是一样的。
这是我应该期待的还是我在并行化上犯了一个错误?
当我使用“nowait”子句时,它比前两个并行化运行得更快。
#pragma omp parallel private(it,i,j) firstprivate(u,sigma,dt,mu)
{
for (it = 0; it < itime; it++) {
for (i = 0; i < n; i++) {
sum = 0.0;
#pragma omp for schedule(static)
for (j = 0; j < n; j+=1) {
sum += sigma[i * n + j] * (u[j] - u[i]);
}
#pragma omp atomic write
uplus[i]= (u[i] + dt * (mu - u[i])) + dt * sum / divide;
if (u[i] > uth) {
#pragma omp atomic write
uplus[i] = 0.0;
if (it >= ttransient) {
#pragma omp atomic
omega1[i] += 1.0;
}
}
}
}//omp end
解决方案
推荐阅读
- javascript - Javascript增量循环(倒序)
- python - Django + HTML:即使我没有提交兴趣,为什么我的模板中的 if 条件也会失败?
- python - 使用空白数据将字符串转换为日期时间
- android - 关闭 DialogFragment 时出现 NullPointerException
- javascript - 未捕获(承诺中)IntegrationError:stripe.confirmCardPayment 意图秘密的值无效
- r - 如何重塑df,以便我们可以为每个ID拥有一条记录
- python - 如何在不重启程序的情况下更新数组和for循环?
- python - flask-sqlAlchemy 在插入/更新之前执行功能
- java - 当任务通过执行器服务提交给线程池中的线程时,如何保证一次只能有1个线程占用一个同步任务?
- reactjs - 如何从我的应用程序打开 react-admin 源映射?