В фортране есть понятие «чистых» функций, которые не меняют глобального состояния. И есть конструкции вида do concurrent
, которые позволяют запускать содержащийся в них код параллельно, причем как именно это будет сделано - на усмотрение компилятора. И внутри этой конструкции как раз можно вызывать только чистые функции. В том числе недопустим всякий ввод-вывод и прочее.
Т.е. по-идее, в принципе нет каких-либо препятствий тому, чтобы содержащийся внутри код исполнялся на GPU, причем без какого либо вмешательства в сам код. Но вот сделано ли это?
UPD, чтобы было понятно:
do concurrent ипользуется в виде
do concurrent (i=1:N)
...
result(i) = ...
end do
А уже после окончания цикла ты что-то можешь с этим result делать
что просто очень похоже на то, как пишется код для GPU