<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Dear developers,<div><br></div><div>due to on-going internal restructuring it is very difficult for me to keep constantly aligned the plugin to the latest version of the trunk. Despite I tried to put in place a set of naive scripts (not perfect scripts, just something semi-automatic to help me figure out which changes in the trunk may impact on the GPU code), I have to manually look very often to the code and fix dependencies. Until now, my philosophy was to completely let the trunk completely ignore the existence of the QE-GPU plugin. However it is not practical from a development point of view, not anymore. </div><div><br></div><div>What I would like to do, is to let the code in the trunk (so the main code) call eventually GPU routines if the plugin is used. This can be easily achieved by isolate piece of code with a preprocessor macro (__CUDA). </div><div><br></div><div>Here an example of the changes I have in mind applied to "PW/scr/addusdens.f90"):</div><div><br></div><div><div><font face="Courier">!----------------------------------------------------------------------</font></div><div><font face="Courier">SUBROUTINE addusdens(rho)</font></div><div><font face="Courier">  !----------------------------------------------------------------------</font></div><div><font face="Courier">  !</font></div><div><font face="Courier">  USE realus,               ONLY : addusdens_r</font></div><div><font face="Courier">  USE control_flags,        ONLY : tqr</font></div><div><font face="Courier">  USE noncollin_module,     ONLY : nspin_mag</font></div><div><font face="Courier">  USE fft_base,             ONLY : dfftp</font></div><div><font face="Courier">  USE kinds,                ONLY : DP</font></div><div><font face="Courier">  !</font></div><div><font face="Courier">  IMPLICIT NONE</font></div><div><font face="Courier">  !</font></div><div><font face="Courier">  !</font></div><div><font face="Courier">  REAL(kind=dp), intent(inout) :: rho(dfftp%nnr,nspin_mag)</font></div><div><font face="Courier">  !</font></div><div><font face="Courier">  IF ( tqr ) THEN</font></div><div><span style="font-family: Courier; ">     CALL addusdens_r(rho,.true.)</span></div><div><font face="Courier">  ELSE</font></div><div><font face="Courier">#if defined(__CUDA)</font></div><div><font face="Courier">     CALL addusdens_g_gpu(rho)</font></div><div><span style="font-family: Courier; ">#else</span></div><div><font face="Courier">     CALL addusdens_g(rho)</font></div><div><font face="Courier">#endif</font></div><div><font face="Courier">  END IF</font></div><div><font face="Courier">  !</font></div><div><font face="Courier">  RETURN</font></div><div><font face="Courier">  !</font></div><div><font face="Courier">END SUBROUTINE addusdens</font></div></div><div><br></div><div><br></div><div>The routine "addusdens_r_gpu" will be in a separate file called for example "addusdens_gpu.f90" under the GPU directory. This file will be compiled iff the proper Makefile.gpu (generated by "GPU/install/configure") is used. From a generic non-GPU user perspective, any piece of code or routine encapsulated by __CUDA will be ignored. Simple but very effective.</div><div><br></div><div>I understand that introducing in several parts of the trunk the macro __CUDA may look a dirty move but this will save a lot of my time and it will simplify my job. Plus it might stimulate new people to develop code for QE-GPU.</div><div><br></div><div>Paolo, Layla… any opinion?</div><div><br></div><div>If I can do that, I expect to commit all the changes by mid of this week.</div><div><br></div><div>Cheers,</div><div>Filippo</div><div><br></div><div><div apple-content-edited="true">
<div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div style="color: rgb(0, 0, 0); font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; orphans: 2; text-align: -webkit-auto; text-indent: 0px; widows: 2; border-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; orphans: 2; text-align: -webkit-auto; text-indent: 0px; widows: 2; border-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; orphans: 2; text-align: -webkit-auto; text-indent: 0px; widows: 2; border-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2; border-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2; border-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2; border-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2; border-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2; border-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2; border-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2; border-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2; border-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2; border-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; orphans: 2; text-indent: 0px; widows: 2; border-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">--<br>Mr. Filippo SPIGA, M.Sc.</div><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><a href="http://filippospiga.me">http://filippospiga.me</a> ~ skype: filippo.spiga<br><br>«Nobody will drive us out of Cantor's paradise.» ~ David Hilbert</div></span></div></span></div></span></div></span></div></span></div></span></div></span></div></span></div></span></div></span></div></span></div></span></div></span></div></span></div></div></div></div>
</div>
<br></div></body></html>