mpiswgfortran编译器如何编译从核函数?
-
使用mpiswgfortran编译从核函数时,加-mslave选项会出现以下错误。
有没有可以参考的mpiswgfortran编译器的使用示例。
-
可能因为你没有去掉-mhost吧。。。
仔细看看报错信息。。。
-
应该是去掉了的,以下是编译脚本,只要加上-mslave,它就会报错。
-
@steed 可能mpiswgfortran默认是编译主核的,你试试从核用sw5gfortran看看链接在一起会不会有问题?
-
@段晓辉 换用sw5gfortran可以链接成功,不过还有一个问题,就是无法获取从核ID号
获取从核编号的C语言代码(DMA_getid.c)#include <slave.h> #include <math.h> #include <stdio.h> void get_myid_(int*t) { *t = athread_get_id(-1); }
从核测试代码(grist_nh_driver_module_slave.F90)
subroutine slave_grist_nh_dynamics_run_diagvars1 implicit none !从核局存变量 integer :: i,j integer :: slave_id,reply call get_myid(slave_id) print*,slave_id end subroutine
主程序代码(main.F90)
program main implicit none integer,external :: slave_grist_nh_dynamics_run_diagvars1 call athread_init() call athread_spawn(slave_grist_nh_dynamics_run_diagvars1,1) call athread_join() call athread_halt() end program
提交脚本
bsub -b -I -q q_sw_expr -n 1 -cgsp 64 -host_stack 256 -share_size 4096 ./main
错误信息
-
@steed 在 mpiswgfortran编译器如何编译从核函数? 中说:
program main
implicit none
integer,external :: slave_grist_nh_dynamics_run_diagvars1call athread_init()
call athread_spawn(slave_grist_nh_dynamics_run_diagvars1,1)
call athread_join()
call athread_halt()end program
从核的函数叫
grist_nh_dynamics_run_diagvars1
, 编译器会自动在前面加slave_
-
@段晓辉 这个好像加不加都可以,现在的问题是用mpiswgfortran系列的编译器,从核函数里面无法获取从核ID号。不知道有没有什么解决方案?
-
@steed fortran调c, c调athread_get_id
或者试试链接时加入-Wl,-defsym,myid_=_MYID
,然后用integer, external :: myid试一下(这个从没试过不保证能用)。。。