发送/接收 MPI-Fortran-Java

Posted

技术标签:

【中文标题】发送/接收 MPI-Fortran-Java【英文标题】:Send / Receive MPI-Fortran-Java 【发布时间】:2018-12-04 00:24:35 【问题描述】:

我在 Open-MPI 和 Java 中有一个发送/接收实现。目标是将 Fortran 字符集发送到 Java。当 Java 接收到这个字符串时,它会打印以下结果。 Result send/receive

我的 Fortran 代码是:

program simple4 
  implicit none 
  include 'mpif.h' 

  integer ierr,my_rank,size 
  integer src, dest, tag, position, charSize 
  integer status(MPI_STATUS_SIZE) 
  CHARACTER*80 TEXT

  call mpi_init(ierr) 
  call mpi_comm_rank(MPI_COMM_WORLD,my_rank,ierr) 
  call mpi_comm_size(MPI_COMM_WORLD,size,ierr) 

  src = 0 
  dest = 1 
  tag = 999

  if(my_rank.eq.0) then
    position = 0 
    TEXT = "PRO" 
    call MPI_SEND(TEXT, 3, MPI_CHARACTER, dest, tag, MPI_COMM_WORLD, ierr) 
  else 
    print *, "Fortran process ", my_rank
  end if 

  call mpi_finalize(ierr)

end

我的 Java 代码是:

....
char[] textChar = new char[3];
MPI.COMM_WORLD.recv(textChar, 3, MPI.CHAR, sourceRank, messageTag);
String text = String.copyValueOf(textChar);
System.out.println("Java - Text receive: " + text);

我的代码会出现什么问题? Fortran和Java这样就不能通信了?另一种解决方案是什么?

【问题讨论】:

【参考方案1】:

根本原因是 Fortran CHARACTERASCII 中,而 Java StringUnicode 中,因此涉及一些额外的步骤。

这是你在 Java 中可以做的事情的 sn-p

byte[] textByte = new byte[3];
MPI.COMM_WORLD.recv(textByte, 3, MPI.BYTE, sourceRank, messageTag);
String text = new String(textByte, java.nio.charset.Charset.forName("UTF-8"));
System.out.println("Java - Text receive: " + text);

【讨论】:

默认情况下 Fortran 字符是 ASCII,但一些广泛使用的 Fortran 编译器也支持 Unicode 作为非默认字符类型。这可能指向在通信的双方都使用 Unicode,尽管我不确定 MPI 与 Unicode 配合得如何。 好点!我猜MPI_INTEGER2 将是要使用的 Fortran 数据类型,但是 Java 呢?

以上是关于发送/接收 MPI-Fortran-Java的主要内容,如果未能解决你的问题,请参考以下文章

从/向一个发送者/接收者并发接收/发送

我用udp发送一个16进制包,接收端怎么解析。

uart接收和发送数据

STM32 串口为啥只能接收发送的部分数据

请问java消息怎么发送图片文件,又怎么接收呢?

SpringMVC+ActiveMQ发送消息并接收返回值的问题