Slatec + CUDA Fortran

时间:2013-08-02 15:15:42

标签: cuda fortran equation-solving

我有用旧式Fortran 95编写的代码用于燃烧建模。该问题的一个特征是必须解决刚性ODE系统以考虑化学反应的影响。对于这个purpouse我使用Fortran SLATEC库,它也很老。解决过程很简单,只需要在计算域的每个单元中调用子程序ddriv3,看起来像这样:

do i = 1,Number_of_cells ! Number of cells is about 2000
call ddriv3(...)     ! All calls are independent on cell number i
end do

ddriv3非常复杂,并且利用了许多其他库函数。

有没有办法在没有为此目的搜索其他库的情况下获得CUDA Fortran的优势?如果我只是运行它作为“并行循环”是有效的,或者可能有另一种方式?

我很抱歉这样一个问题,不可避免地产生了最明显的答案:“你为什么不试着自己知道呢?”,但我处在一个非常困难的时间条件下。我对CUDA没有任何经验,我只想选择最合适,最简单的方法。

提前致谢!

1 个答案:

答案 0 :(得分:1)

如果不付出一些努力,您将无法使用或并行ddriv3电话。您对“并行循环”这一短语的使用向我建议您可能正在考虑使用OpenACC directives with Fortran,而不是CUDA Fortran,但在任何一种情况下,一般答案都没有任何不同。

作为Fortran库(可能是为x86使用而编译)的一部分的ddriv3调用不能直接用于CUDA Fortran(即在Fortran中使用CUDA GPU内核)或OpenACC Fortran中同样的原因:库代码是x86代码,不能在GPU上使用。

由于您可能有权访问ddriv3的源代码实现,因此您可能能够提取源代码,并且可以创建它的CUDA版本(或OpenACC不会阻塞的版本) ),但如果它使用许多其他库例程,则可能意味着您必须为每个库调用创建CUDA(或直接Fortran源,对于OpenACC)版本。如果您没有使用CUDA的经验,这可能不是您想要做的(我不知道。)如果沿着这条路走下去,那肯定意味着要更多地了解CUDA,或者至少将库调用转换为直接Fortran源代码(适用于OpenACC版本)。

由于上述原因,调查ddriv3调用是否存在GPU库替换(或类似内容)可能是有意义的(但您在问题中明确排除了该选项。)当然有GPU可以帮助解决ODE问题的图书馆。