LINUX.ORG.RU

«прозрачный» запуск фортрановского кода на GPU

 ,


0

1

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

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

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

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

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

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

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

★★★★★

Последнее исправление: cvs-255 (всего исправлений: 2)

Есть пара нюансов:

  1. GPU не любит if-ов

  2. В GPU специфическая работа с памятью

Наверное если обеспечить п2, то можно запускать. Ну дык это и к плюсовому коду относится, у меня коллега перенес свой плюсовый код на gpu просто натыкав туда команд host/device

AntonI ★★★★★
()
Последнее исправление: AntonI (всего исправлений: 1)
Ответ на: комментарий от grem

Да в принципе NVIDIA поставляет свой компилятор Фортрана для работы с GPU. Вообще много этих проектов. Но ТСу, небось, хочется знать, где именно что реально работает и как.

proud_anon ★★★★★
()
Ответ на: комментарий от proud_anon

ну главный затык c nvidia в том, что у меня не nvidia)

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от AntonI

В GPU специфическая работа с памятью

Я знаю это. И по идее если мы хотим исполнять код на gpu, то надо пройтись по дереву вызовов функций и посмотреть, какие переменные там читаются, и автоматически подгрузить их в память gpu.

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от proud_anon

Да в принципе NVIDIA поставляет свой компилятор Фортрана для работы с GPU.

Там свой синтаксис для вызова GPU, нвидиевское расширение (что фортрана, что C++). Я так понял, что автор спрашивал про код по стандарту Fortran, с «do concurrent», но чтобы он без изменений на уровне исходника был готов для компиляции для GPU.

seiken ★★★★★
()
Ответ на: комментарий от AntonI

GPU не любит if-ов

у меня в том коде немного if

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от seiken

но чтобы он без изменений на уровне исходника был готов для компиляции для GPU.

Да, это был бы оптимальный вариант. Требования к коду, который находится внутри do concurrent фактически совпадают с тем, что необходимо для выполнения кода на gpu. Т.е. это по сути готовый kernel

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 2)
Ответ на: комментарий от cvs-255

Тогда надо читать документацию к компилятору. Для портабельного кода есть стандарт OpenAcc, но там надо обмазываться директивами, и указывать всякие зависимости перед циклами и проч. Так, чтобы было все из коробки с стандартным фортраном и произвольным железом - такое вроде ни один компилятор не умеет.

Требования к коду, который находится внутри do concurrent фактически совпадают с тем, что необходимо для выполнения кода на gpu.

по идее, за вычетом прагм, OpenAcc так и работает, но прагмы надо самому ставить.

seiken ★★★★★
()
Последнее исправление: seiken (всего исправлений: 2)
Ответ на: комментарий от thunar

Наверное не могу, поскольку тут я как тот сосед который перепевает Карузо.

Но вещь банальная, поскольку там фактически SIMD, а ифы SIMD очевидно ломают.

Вы к нам на семинар когда то приходили, если чего - можете написать мне в почту и я дам контакты тех кто в этом компетентен;-)

AntonI ★★★★★
()
Ответ на: комментарий от AntonI

Как у Вас дела с PIC кодом?

Паршиво, в том плане что очень медленно всё делаю. В прошлом году получил красивые результаты в 2d3v задаче, отчитался. А дальше пока тупик. Эксперимент мне сейчас делать негде, а в расчёте нужно избавляться от скейлинга заряда, мельчить сетку и переходить в 3d3v. На старом OpenMP-коде такое уже не провернёшь, работаю потихоньку над версией для КУДЫ. Но слишком медленно работаю — хочется убиться уже — один хрен в этом году скорее всего не то что публикацию подготовить, даже принципиально новые результаты не успею получить.

thunar ★★★★★
()
Последнее исправление: thunar (всего исправлений: 3)
Ответ на: комментарий от thunar

У коллег давно есть 3D3V версия под cuda, если я не путаю. Может Вы с ними как то провзаимодействуете? Или для Вас разработка кода это самоцель?:-)

AntonI ★★★★★
()
Ответ на: комментарий от AntonI

Если память не изменяет, у них заточка под релятивистскую плазму, а у меня под холодную.

Ну я вообще вам отписал на почту, так-то всегда интересно посмотреть кто чем занимается, обменяться опытом.

Или для Вас разработка кода это самоцель?

Не то что самоцель, скорее желание не зависеть от сторонних лицензий и полностью ориентироваться в коде.

thunar ★★★★★
()
Ответ на: комментарий от AntonI

3D3V версия под cuda, если я не путаю

Я на вот этих ребят ориентируюсь, но там кишки нечитаемые совершенно — скольким людям не доавал почитать, всем плохо становилось. Но работает быстро.

thunar ★★★★★
()
Последнее исправление: thunar (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.