【发布时间】:2014-10-15 14:41:36
【问题描述】:
我需要读取(和写入)一些二进制小端文件。 我正在使用英特尔 FC 和英特尔 MPI 在 PC 上编写我的 fortran 代码。 I/O 在 PC 上运行良好,但最终原因是在 Bluegene/P 上运行程序。 Bluegene/P(XL Fortran 编译器)具有大字节序。当我需要非并行 I/O 操作时(如 fortran REED & WRITE) 我正在使用
call SETRTEOPTS('ufmt_littleendian=8')
不幸的是,当我需要并行 I/O 时,例如 MPI_FILE_READ,“SETRTEOPTS('ufmt_littleendian=8')”会被忽略。 我正在设置视图:
call MPI_FILE_SET_VIEW(ifile, offset, MPI_FLOAT, MPI_FLOAT, 'native', MPI_INFO_NULL, ierr)
我该怎么办?我不想创建自己的 DATAREP。还有其他方法吗?速度很重要。
【问题讨论】:
-
您可以尝试在 PC 和 BGP 系统上使用
external32表示。 -
@HristoIliev,他可以尝试,但它不会做任何事情。他必须在 Blue Gene 系统上建立自己的 MPICH——并非不可能,但我不会迈出第一步。
-
如果你读取数据成功了,只是字节顺序不对,你就不能交换字节吗?我一直这样做。或者先将文件转换为大端。
-
@VladimirF:字节交换实际上是这里最简单的部分。如何处理 PC fortran 编译器期望的 fortran 记录和 BG fortran 编译器期望的填充(如果有)不是更大的挑战吗?
-
@RobLatham 很可能,我几乎只使用流文件来避免这种复杂性,这就是我没有考虑这一点的原因。
标签: fortran mpi endianness mpi-io