Skip to main content

Posts

Showing posts with the label parallel

OpenMP三种并行方式的对比

OpenMP三种并行方式的对比 算例 对 的值通过级数进行计算,采用的公式为如下。 假设需要计算前N项的级数和,则 的表达式为: 计算 分别使用OpenMP中的 共享任务结构 、 private和critical语句 、 并行归约 与串行程序进行计算精度和时间的对比,计算中N取值为10000000,对比结果如下: pi : 3.14159 Seriel Process Total Time: 0.069s pi : 2.63998 Parallel Process 1 Total Time: 0.309s pi : 2.82509 Parallel Process 2 Total Time: 0.044s pi : 3.14159 Parallel Process 3 Total Time: 0.035s 其中:Parallel Process 1为 共享任务结构 ,Parallel Process 2为 private和critical语句 、Parallel Process 3为 并行归约 。 可以看出P1和P2与 的值相差较远,P3算的最精确;P1所使用的时间比串行还要多,P2和P3所使用的时间都比串行少。 对于此问题,P3是最优的选择方案。 代码 // test case of OpenMP ​ #include <iostream> #include <omp.h> #include <time.h> ​ using namespace std ; ​ static long num_steps = 10000000 ; double step ; #define NUM_THREADS 2 ​ ​ int SerielProcess () { clock_t startTime , endTime ; startTime = clock (); ​ int i ; double x , pi , sum = 0.0 ; step = 1.0 / ( double ) num_steps ; for ( i = 0 ; i < num_steps ; i ++ ) { x ...