Fortran:KIND=8 数组到 KIND=4 的高效转换
Fortran: efficient conversion of KIND=8 array to KIND=4
我正在使用外部 Fortran 库,其中 returns 类型为 REAL(kind=8)
的大量数据。但是,我需要将数据写为 REAL(kind=4)
.
将大型数据数组转换为不同的 KIND
类型的最佳方法是什么?
我现在天真地只是这样做:
REAL(KIND=8), ALLOCATABLE :: data64(:,:)
REAL(KIND=4), ALLOCATABLE :: data32(:,:)
# allocate arrays and call external function
CALL some_external_function(data64)
# Convert to 32bit using simple assignment
data32 = data64
# Write out 32bit data....
WRITE(UOUT) data32
但是,这种方法要求我分配两个大数组而不是一个,并进行大量数据复制 - 在内存和处理方面似乎效率低下...
有没有更聪明的方法?
顺便说一句:矩阵的大小不一定很大——它们各不相同,但可能在 1000 x 1000 左右(但这将在一个循环中出现 100 次)。对于现代机器来说这不是问题,但正如其中一条评论所暗示的那样,我正在寻找一种 优雅 也很有效的解决方案!做作业似乎.....又懒又懒?
这里有优雅的给你
write(uout) real(data64,kind(data32))
我正在使用外部 Fortran 库,其中 returns 类型为 REAL(kind=8)
的大量数据。但是,我需要将数据写为 REAL(kind=4)
.
将大型数据数组转换为不同的 KIND
类型的最佳方法是什么?
我现在天真地只是这样做:
REAL(KIND=8), ALLOCATABLE :: data64(:,:)
REAL(KIND=4), ALLOCATABLE :: data32(:,:)
# allocate arrays and call external function
CALL some_external_function(data64)
# Convert to 32bit using simple assignment
data32 = data64
# Write out 32bit data....
WRITE(UOUT) data32
但是,这种方法要求我分配两个大数组而不是一个,并进行大量数据复制 - 在内存和处理方面似乎效率低下...
有没有更聪明的方法?
顺便说一句:矩阵的大小不一定很大——它们各不相同,但可能在 1000 x 1000 左右(但这将在一个循环中出现 100 次)。对于现代机器来说这不是问题,但正如其中一条评论所暗示的那样,我正在寻找一种 优雅 也很有效的解决方案!做作业似乎.....又懒又懒?
这里有优雅的给你
write(uout) real(data64,kind(data32))