Arrays Fortran/Arrayfire尺寸标注问题
我目前正在使用Arrayfire加速Fortran CFD解算器。我们实现Fortran数组的方式意味着二维Fortran数组由(N,M,1)表示,而不仅仅是(N,M),允许可分配数组处理二维或三维参数。但是,当将其中一个复制到设备以成为Arrayfire阵列时,似乎会自动为其指定尺寸(N,M),而不是(N,M,1)。将阵列复制回主机时,这会导致维度不匹配 有没有办法改变这种行为?重写大部分解算器以不同方式处理二维数组是相当棘手的 下面是一个显示此行为的测试用例:Arrays Fortran/Arrayfire尺寸标注问题,arrays,fortran,arrayfire,Arrays,Fortran,Arrayfire,我目前正在使用Arrayfire加速Fortran CFD解算器。我们实现Fortran数组的方式意味着二维Fortran数组由(N,M,1)表示,而不仅仅是(N,M),允许可分配数组处理二维或三维参数。但是,当将其中一个复制到设备以成为Arrayfire阵列时,似乎会自动为其指定尺寸(N,M),而不是(N,M,1)。将阵列复制回主机时,这会导致维度不匹配 有没有办法改变这种行为?重写大部分解算器以不同方式处理二维数组是相当棘手的 下面是一个显示此行为的测试用例: program testcas
program testcase
use arrayfire
implicit none
real,dimension(4,4,1) :: a = 5.0
real,dimension(:,:,:),allocatable :: b
type(array) ARR1
ARR1 = a
b=ARR1
end program testcase
我也曾在Arrayfire论坛上问过这个问题,但我只是想知道是否有其他人认为这是一个问题
编辑:这不再是一个问题,因为只有测试用例使用2D数组执行
谢谢,Harry(在评论和编辑中回答。请参阅)
OP写道:
这不再是一个问题,因为只有测试用例是使用2D阵列执行的
像:b(:,:,1)=ARR1这样的东西不是一个好的解决方案吗?问题是,在程序中,函数必须处理2(N,M,1)和3(N,M,O)维参数,因此我将所有3维都作为可分配的。