sudo yum install gcc-gfortran
sudo yum install libomp
使用OpenMP指令简化并行化,核心指令包括:
!$omp parallel do
:并行化循环,自动分配线程。!$omp critical
:定义临界区,保护共享资源。omp_get_thread_num()
:获取当前线程编号。omp_get_num_threads()
:获取总线程数。示例代码(数组并行求和):
program parallel_sum
use omp_lib
implicit none
integer, parameter :: n = 1000000
real :: a(n), total_sum = 0.0
integer :: i
! 初始化数组
a = 1.0
! 并行求和(使用临界区保护共享变量)
!$omp parallel do reduction(+:total_sum)
do i = 1, n
total_sum = total_sum + a(i)
!$omp end parallel do
print *, "Total Sum: ", total_sum
end program parallel_sum
reduction(+:total_sum)
确保多个线程安全累加结果,避免竞争条件。-fopenmp
选项启用OpenMP支持:gfortran -fopenmp -o parallel_sum parallel_sum.f90
./parallel_sum
输出示例:Total Sum: 1000000.000000
gdb
调试多线程程序,设置断点并查看线程状态:gdb ./parallel_sum
(gdb) break main
(gdb) run
(gdb) info threads
OMP_NUM_THREADS
环境变量设置线程数,例如:export OMP_NUM_THREADS=4
reduction
或critical
机制。openmpi
)。参考资料: