gpt4 book ai didi

c - OpenMP 中没有加速

转载 作者:行者123 更新时间:2023-11-30 21:27:44 25 4
gpt4 key购买 nike

我实现了模拟的并行版本(使用基于大量内存的 Wolff 算法的模型模拟),但它比串行版本慢 3 倍。

O不知道该怎么办。以下是代码的一些解释:
对于每个线程,我都有一个 int 的 3d 数组(大小为 60*60*60 、 100*100*100),这些数组保存在 heap 中(由malloc())。
几乎每个线程所做的一切都依赖于这些数组(对这些数组进行大量读写)。

因为数组位于堆中,所以它比串行版本慢?

或者因为我的程序严重依赖内存(大量读写),所以速度较慢?

或者我错过了什么?

谢谢!

void start()
{
/*initialize gnuplot*/
init_gnuplot(config0);

#pragma omp parallel
{

#pragma omp single
{
calculate_threads_T_interval();
}

#pragma omp barrier

config c = config0;

c.T_initial = thread_T_start[omp_get_thread_num()];
c.T_final = thread_T_end[omp_get_thread_num()];
/*create new system*/
System *system = newSystem(c);

/*measure initial values of M and E*/
measure_Magnetization(system);
measure_Energy(system);

/*change system T to its initial value*/
system->T = c.T_initial;

#pragma omp barrier
/*run the algorithm*/
run_T_interval(system, c);
}
}

最佳答案

如果没有看到您的代码,很难明确回答,但速度减慢的一个潜在原因是 OpenMP 在创建/管理线程时会产生一定的开销。如果任务加速小于开销,您将看到更长的执行时间。

堆与堆栈的访问时间通常可以忽略不计并且取决于体系结构,但您不应该看到与之有显着差异。如果您与它们也存储在堆中的顺序版本进行比较,那么这没有关系。

我会检查您是否正确使用 OpenMP。首先尝试在几段代码上实现它并查看效果。

关于c - OpenMP 中没有加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48158432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com