Cuda Fortran на PGI
Moderator: BarsMonster
-
- Posts: 2
- Joined: Mon Nov 29, 2010 6:35 pm [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable
Cuda Fortran на PGI
Есть ли кто кто баловался фортраном, по работе пришлось написать программу по методам частиц, там подразумевается интенсивное взвешивание в shared-памяти и без аналога volatile не обойтись. хотя это слово и было включено в стандарт фортрана 2003, есть подозрение что cuda с ним не совместимо. Есть ли у кого-нить опыт по этому вопросу? я в тупике.
- BarsMonster
- Site Admin
- Posts: 1118
- Joined: Wed Oct 01, 2008 7:58 pm [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable
Re: Cuda Fortran на PGI
Если прямо указывать что переменная в shared-памяти, то volatile указывать не надо - компилятор ни за что в регистр её не запихает.Faustus wrote:Есть ли кто кто баловался фортраном, по работе пришлось написать программу по методам частиц, там подразумевается интенсивное взвешивание в shared-памяти и без аналога volatile не обойтись. хотя это слово и было включено в стандарт фортрана 2003, есть подозрение что cuda с ним не совместимо. Есть ли у кого-нить опыт по этому вопросу? я в тупике.
Но пользоваться совместным доступом потоков к одной переменной надо крайне аккуратно...
-
- Posts: 2
- Joined: Mon Nov 29, 2010 6:35 pm [phpBB Debug] PHP Warning: in file [ROOT]/vendor/twig/twig/lib/Twig/Extension/Core.php on line 1266: count(): Parameter must be an array or an object that implements Countable
Re: Cuda Fortran на PGI
Пардон, я двусмысленно отписался. Я имел в виду, что команда 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 в случайном порядке всеми потоками,для чего собственно и нужно это ключевое слово.
Программа для глобальной памяти работает достаточно правдиво, хотя и не быстро (5-кратное ускорение). Дальнейшая оптимизация, это работа с shared, но тут-то и начинаются проблемы.
Вот что пишут в 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, но тут-то и начинаются проблемы.
Who is online
Users browsing this forum: No registered users and 1 guest