mpiswgfortran编译器如何编译从核函数?



  • 使用mpiswgfortran编译从核函数时,加-mslave选项会出现以下错误。
    0_1555665786119_9b9e1ad3-4648-4181-bfea-ab5809cadab8-image.png

    有没有可以参考的mpiswgfortran编译器的使用示例。



  • 可能因为你没有去掉-mhost吧。。。
    仔细看看报错信息。。。



  • 应该是去掉了的,以下是编译脚本,只要加上-mslave,它就会报错。
    0_1555899221472_aef38fe3-89ad-43a2-9dae-593de01daa65-image.png



  • @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
    错误信息
    0_1556004137860_57505181-3da1-41f7-84ce-bd6d8f1a996b-image.png



  • @steedmpiswgfortran编译器如何编译从核函数? 中说:

    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

    从核的函数叫grist_nh_dynamics_run_diagvars1, 编译器会自动在前面加slave_



  • @段晓辉 这个好像加不加都可以,现在的问题是用mpiswgfortran系列的编译器,从核函数里面无法获取从核ID号。不知道有没有什么解决方案?



  • @steed fortran调c, c调athread_get_id
    或者试试链接时加入-Wl,-defsym,myid_=_MYID,然后用integer, external :: myid试一下(这个从没试过不保证能用)。。。


登录后回复