Performance 用fortran高效构造结构化矩阵
离开Fortran已经好几年了,现在我必须拿起它,重新开始使用它 我想用entryi,j构造一个矩阵,形式为fx_I,y_j,其中f是两个变量的函数,例如fx,y=cosx-y。在Matlab或pythonumpy中,有一些有效的方法来处理此类特定问题。我想知道Fortran中是否有这样的优化Performance 用fortran高效构造结构化矩阵,performance,matrix,fortran,fortran90,Performance,Matrix,Fortran,Fortran90,离开Fortran已经好几年了,现在我必须拿起它,重新开始使用它 我想用entryi,j构造一个矩阵,形式为fx_I,y_j,其中f是两个变量的函数,例如fx,y=cosx-y。在Matlab或pythonumpy中,有一些有效的方法来处理此类特定问题。我想知道Fortran中是否有这样的优化 顺便说一句,在Fortran中,向量化操作比do/for循环更快,就像在Matlab和Numpy中一样吗?如果你所说的向量化与你在Matlab和Python中的意思相同,你在整个数组中调用的缩写形式,那么
顺便说一句,在Fortran中,向量化操作比do/for循环更快,就像在Matlab和Numpy中一样吗?如果你所说的向量化与你在Matlab和Python中的意思相同,你在整个数组中调用的缩写形式,那么不,这些形式通常较慢,因为它们比简单循环更难优化。更快的是编译器实际使用CPU的向量指令,但这是另一回事。编译器更容易将它们用于简单循环 Fortran具有基本函数、do concurrent、forall和where构造、隐含循环和数组构造。在这里重复它们是没有意义的,它们已经在本网站或教程中被描述了很多次 您的示例最简单的方式是使用循环
do j = 1, ny
do i = 1, nx
entry(i,j) = f(x(i), y(j))
end do
end do
短方法之一,您可能指的是类似Python的向量化,将是整个数组操作,例如
A = cos(B)
C = A * B
D = f(A*B)
类似的。对数组的每个元素调用的函数必须是元素。这些操作不一定有效。例如,最后一次调用可能需要创建一个临时数组,这在使用循环时是可以避免的。谢谢。你提到的每一个学期我都很熟悉,那时我在大学时代比你小三四岁。现在有点令人失望,我不得不再次从零开始。