OpenMP与MPI:并行计算的高效实现
1. OpenMP相关内容
1.1 超线性加速比
超线性加速比指的是性能优于强缩放的理想缩放曲线。这可能是因为较小的数组大小能适配更高层次的缓存,从而带来更好的缓存性能。
1.2 Kahan求和的OpenMP实现
对于增强精度的Kahan求和算法,由于存在循环依赖,不能使用编译指示让编译器生成多线程实现。其实现步骤如下:
1. 在计算的第一阶段,对每个线程上的值进行求和。
2. 跨线程对这些值求和以得到最终结果。
以下是具体代码:
#include <stdlib.h>
#include <omp.h>
double do_kahan_sum(double* restrict var, long ncells)
{
struct esum_type{
double sum;
double correction;
};
int nthreads = 1;
int thread_id = 0;
#ifdef _OPENMP
nthreads = omp_get_num_threads();
thread_id = omp_get_thread_num();
#endif
struct esum_type local;
local.sum = 0.0;
local.correction = 0.0;
int tbegin = ncells *
OpenMP与MPI并行计算详解
超级会员免费看
订阅专栏 解锁全文
852

被折叠的 条评论
为什么被折叠?



