早教吧 育儿知识 作业答案 考试题库 百科 知识分享

请看看则个fortran结合openmp并行程序,为什么老出错?programsctimplicitnoneinclude'omplib.h'integerk,dct;dct=0;C$OMPPARALLELPRIVATE(B)1dok=1,1000dct=dct+1;enddowrite(*,*)"dc

题目详情
请看看则个fortran结合openmp并行程序,为什么老出错?
program sct
implicit none
include 'omp_lib.h'

integer k,dct;
dct=0;

C$OMP PARALLEL PRIVATE(B)

1do k=1,1000

dct=dct+1;

enddo

write(*,*)"dct=", dct
pause
end program sct
编译的时候提示 Error: Syntax error, found IDENTIFIER 'PARALLEL' when expecting one of: => = . ( : % 等一共9个错误,指向了C$OMP PARALLEL PRIVATE(B)语句.
如果删除这一句,又会提示:无法解析的外部符号 _OMP_SET_NUM_THREADS 等20个错误.最后把include 'omp_lib.h'删除,才能通过.
请问什么什么地方出错了?是不是include 'omp_lib.h'这一句有问题?
上面有一句话我贴错了, C$OMP PARALLEL PRIVATE(B) 这一句应该是 C$OMP PARALLEL DO. 另外我用的是VS 2005和intel fortran9.1.
▼优质解答
答案和解析
才发现你这源程序混合了C、F77、F95三种语法……
而且没有恰当使用private保护变量或者reduction.
正确的写法(F95+OpenMP):
program sct
use omp_lib
implicit none
integer k,dct
dct=0
\x09
!$OMP parallel do reduction(+:dct)
do k=1,1000
dct=dct+1
enddo
!$OMP end parallel do
write(*,*)"dct=",dct
pause
end program sct