Skip to main content

Posts

Showing posts from August, 2018

数学库GSL学习(1)

数学库GSL学习(1) Linux下安装 在官网下载某一版本 解压 tar -xzvf gsl-2.5.tar.gz 安装 ​ x 1 cd gsl-2.5 2 ​ 3 ./autogen.sh 4 ​ 5 ./configure --enable-maintainer-mode 6 ​ 7 make 8 ​ 9 make install 编写文件 example.c xxxxxxxxxx 15 1 #include <iostream> 2 #include <iomanip> 3 #include <gsl/gsl_sf_bessel.h> 4 using namespace std ; 5 ​ 6 int main ( void ) 7 { 8         double x = 5.0 ; 9         double y = gsl_sf_bessel_J0 ( x ); 10         cout . setf ( ios::fixed ); 11         cout << "J0(" << setprecision ( 1 ) << x << ") = " ; 12         cout . setf ( ios::scientific , ios::floatfield ); 13         cout << setprecision ( 18 ) << y << endl ; 14         return 0 ;

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