[[PageOutline]] = Page d'information sur le portage GPU de LMDZ = == Liste de liens divers == * la chaîne slack LMDZ/hackathon : [https://lmdz.slack.com/archives/C01TGQWR6J2] * la chaîne mattermost 'Portage accélérateurs' : [https://mattermost.lmd.ipsl.fr/lmdz/channels/portage-accelerateurs] * le google doc de Thomas utilisé pendant le Hackathon: [https://docs.google.com/document/d/1dSlVbJD1aMrB5wT-_TnYoMLUdaqSAfji1O8q_wzuDNE] [[BR]] == Règles de codage / portage == === Traitement des DATA === * Déclarer en {{{ !$acc data create (...) }}} les variables {{{ALLOCATABLE}}} d'un module. Elles seront déclarées en {{{ !$acc data present (...) }}} dans tous les modules les utilisant * Au début d'une routine: * déclarer en {{{ !$acc data create (...) }}} les tableaux locaux * déclarer en {{{ !$acc data copyin (...) }}} les tableaux en argument qui sont {{{ intent(IN) }}} * déclarer en {{{ !$acc data copyout (...) }}} les tableaux en argument qui sont {{{ intent(OUT) }}} * déclarer en {{{ !$acc data copy (...) }}} les tableaux en argument qui sont {{{ intent(INOUT) }}} * Pour les variables de modules: * On peut rajouter systématiquement après un {{{ !$OMP THREADPRIVATE(...)}}} le {{{!$acc declare create()}}} correspondant, e.g. {{{ REAL, SAVE, ALLOCATABLE :: t_seri(:,:), q_seri(:,:) !$OMP THREADPRIVATE(t_seri, q_seri) !$acc declare create(t_seri, q_seri) }}} [[BR]] == Mode d'emploi pour installer la branche portée sur jean-zay-pp == * la branche est ici: [https://svn.lmd.jussieu.fr/LMDZ/LMDZ6/branches/Portage_acc]