В фортране есть понятие «чистых» функций, которые не меняют глобального состояния. И есть конструкции вида do concurrent, которые позволяют запускать содержащийся в них код параллельно, причем как именно это будет сделано - на усмотрение компилятора. И внутри этой конструкции как раз можно вызывать только чистые функции. В том числе недопустим всякий ввод-вывод и прочее.


Т.е. по-идее, в принципе нет каких-либо препятствий тому, чтобы содержащийся внутри код исполнялся на GPU, причем без какого либо вмешательства в сам код. Но вот сделано ли это?


UPD, чтобы было понятно:


do concurrent ипользуется в виде


do concurrent (i=1:N)
...
result(i) = ...
end do


А уже после окончания цикла ты что-то можешь с этим result делать


что просто очень похоже на то, как пишется код для GPU









 ,






URL записи