[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/session.php on line 580: sizeof(): Parameter must be an array or an object that implements Countable
[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/session.php on line 636: sizeof(): Parameter must be an array or an object that implements Countable
3.14.by forum • Cuda Fortran на PGI
Page 1 of 1

Cuda Fortran на PGI

Posted: Mon Nov 29, 2010 6:45 pm
by Faustus
Есть ли кто кто баловался фортраном, по работе пришлось написать программу по методам частиц, там подразумевается интенсивное взвешивание в shared-памяти и без аналога volatile не обойтись. хотя это слово и было включено в стандарт фортрана 2003, есть подозрение что cuda с ним не совместимо. Есть ли у кого-нить опыт по этому вопросу? я в тупике.

Re: Cuda Fortran на PGI

Posted: Tue Nov 30, 2010 12:05 am
by BarsMonster
Faustus wrote:Есть ли кто кто баловался фортраном, по работе пришлось написать программу по методам частиц, там подразумевается интенсивное взвешивание в shared-памяти и без аналога volatile не обойтись. хотя это слово и было включено в стандарт фортрана 2003, есть подозрение что cuda с ним не совместимо. Есть ли у кого-нить опыт по этому вопросу? я в тупике.
Если прямо указывать что переменная в shared-памяти, то volatile указывать не надо - компилятор ни за что в регистр её не запихает.
Но пользоваться совместным доступом потоков к одной переменной надо крайне аккуратно...

Re: Cuda Fortran на PGI

Posted: Tue Nov 30, 2010 9:30 am
by Faustus
Пардон, я двусмысленно отписался. Я имел в виду, что команда volatile есть в cuda fortran (PGI), но у меня есть сомнения, что она компилируется в ядро.
Вот что пишут в Version Programming Guide 3.0 странице 100:
This behavior can be changed using the volatile keyword: If a variable located in global or shared memory is declared as volatile, the compiler assumes that its value can be changed at any time by another thread and therefore any reference to this variable compiles to an actual memory read instruction.
Т.е. смысл то в том, что бы указать valatile для shared,чтобы она не менялась, до следующего обращения к ней другими потоками.
Моя программа подразумевает сохрание результатов в массиве shared в случайном порядке всеми потоками,для чего собственно и нужно это ключевое слово.
BarsMonster wrote:Но пользоваться совместным доступом потоков к одной переменной надо крайне аккуратно...

Программа для глобальной памяти работает достаточно правдиво, хотя и не быстро (5-кратное ускорение). Дальнейшая оптимизация, это работа с shared, но тут-то и начинаются проблемы.