利用MPI实现并行的线性筛数法
-
串行
mpic++ normal_find_prime.cpp -o normal_find_prime
-
并行
mpic++ parallel_find_prime.cpp -o parallel_find_prime
-
串行
mpirun -n 1 normal_find_prime 0 [i]
-
并行
mpirun -n [进程数] --oversubscribe parallel_find_prime [i]
- 进程数 :新建的进程数
- i : ��筛选小于等于 2^i*1000 的素数
统计rank为0的进程所花的时间,使用MPI_WTime()获取时间,再做差
i | n=2^i*1000 | 素数个数 | 进程数目 | Paraleel Time | Sequential Time |
---|---|---|---|---|---|
0 | 1000 | 168 | 16 | 0.00392103 | 0.000045061 |
1 | 2000 | 303 | 23 | 0.00455213 | 0.000077009 |
2 | 4000 | 550 | 32 | 0.00591898 | 0.000188828 |
3 | 8000 | 1007 | 32 | 0.00641418 | 0.000288963 |
4 | 16000 | 1862 | 32 | 0.00623393 | 0.000584841 |
5 | 32000 | 3432 | 32 | 0.00634909 | 0.001288890 |
6 | 64000 | 6413 | 32 | 0.00835586 | 0.002485040 |
7 | 128000 | 11987 | 32 | 0.00759101 | 0.004801030 |
8 | 256000 | 22525 | 32 | 0.01062920 | 0.011015900 |
9 | 512000 | 42445 | 32 | 0.01356720 | 0.020990800 |