New GPU example

This commit is contained in:
Salvatore Filippone
2021-04-07 13:10:40 +02:00
parent ec9ab0da4d
commit b5c301eb05
11 changed files with 594 additions and 585 deletions
+26 -20
View File
@@ -34,7 +34,7 @@ class="cmr-12">The code discussed here shows how to set up a program exploiting
class="cmr-12">capabilities of PSBLAS and AMG4PSBLAS. The code example is available in the</span>
<span
class="cmr-12">source distribution directory </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">amg4psblas/tests/gpu</span></span></span><span
class="cmtt-12">amg4psblas/examples/gpu</span></span></span><span
class="cmr-12">.</span>
<!--l. 427--><p class="indent" > <span
class="cmr-12">First of all, we need to include the appropriate modules and declare some auxiliary</span>
@@ -51,19 +51,16 @@ class="cmr-12">variables:</span>
<div class="center"
>
<!--l. 451--><p class="noindent" >
<!--l. 448--><p class="noindent" >
<div class="minipage"><pre class="verbatim" id="verbatim-10">
program&#x00A0;amg_d_pde3d
program&#x00A0;amg_dexample_gpu
&#x00A0;&#x00A0;use&#x00A0;psb_base_mod
&#x00A0;&#x00A0;use&#x00A0;amg_prec_mod
&#x00A0;&#x00A0;use&#x00A0;psb_krylov_mod
&#x00A0;&#x00A0;use&#x00A0;psb_util_mod
&#x00A0;&#x00A0;use&#x00A0;psb_gpu_mod
&#x00A0;&#x00A0;use&#x00A0;data_input
&#x00A0;&#x00A0;use&#x00A0;amg_d_pde3d_base_mod
&#x00A0;&#x00A0;use&#x00A0;amg_d_pde3d_exp_mod
&#x00A0;&#x00A0;use&#x00A0;amg_d_pde3d_gauss_mod
&#x00A0;&#x00A0;use&#x00A0;amg_d_genpde_mod
&#x00A0;&#x00A0;use&#x00A0;amg_d_pde_mod
&#x00A0;&#x00A0;implicit&#x00A0;none
&#x00A0;&#x00A0;.......
&#x00A0;&#x00A0;!&#x00A0;GPU&#x00A0;variables
@@ -72,7 +69,7 @@ program&#x00A0;amg_d_pde3d
&#x00A0;&#x00A0;type(psb_i_vect_gpu)&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;&#x00A0;::&#x00A0;igmold
&#x00A0;
</pre>
<!--l. 473--><p class="nopar" ></div></div>
<!--l. 467--><p class="nopar" ></div></div>
<br /> <div class="caption"
><span class="id">Listing 5: </span><span
class="content">setup of a GPU-enabled test program part one.</span></div><!--tex4ht:label?: x16-15001r5 -->
@@ -80,7 +77,15 @@ class="content">setup of a GPU-enabled test program part one.</span></div><!--te
</div><hr class="endfloat" />
<!--l. 481--><p class="indent" > <span
<!--l. 474--><p class="indent" > <span
class="cmr-12">In this particular example we are choosing to employ a </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">HLG</span></span></span> <span
class="cmr-12">data structure for</span>
<span
class="cmr-12">sparse matrices on GPUs; for more information please refer to the PSBLAS-EXT users&#8217;</span>
<span
class="cmr-12">guide.</span>
<!--l. 478--><p class="indent" > <span
class="cmr-12">We then have to initialize the GPU environment, and pass the appropriate MOLD</span>
<span
class="cmr-12">variables to the build methods (see also the PSBLAS and PSBLAS-EXT users&#8217;</span>
@@ -89,7 +94,7 @@ class="cmr-12">guides).</span>
<!--l. 484--><p class="indent" > <a
<!--l. 481--><p class="indent" > <a
id="x16-15002r6"></a><hr class="float"><div class="float"
>
@@ -97,7 +102,7 @@ class="cmr-12">guides).</span>
<div class="center"
>
<!--l. 500--><p class="noindent" >
<!--l. 497--><p class="noindent" >
<div class="minipage"><pre class="verbatim" id="verbatim-11">
&#x00A0;&#x00A0;call&#x00A0;psb_init(ctxt)
&#x00A0;&#x00A0;call&#x00A0;psb_info(ctxt,iam,np)
@@ -111,7 +116,7 @@ class="cmr-12">guides).</span>
&#x00A0;&#x00A0;call&#x00A0;prec%smoothers_build(a,desc_a,info,&#x00A0;amold=agmold,&#x00A0;vmold=vgmold,&#x00A0;imold=igmold)
&#x00A0;
</pre>
<!--l. 515--><p class="nopar" ></div></div>
<!--l. 512--><p class="nopar" ></div></div>
<br /> <div class="caption"
><span class="id">Listing 6: </span><span
class="content">setup of a GPU-enabled test program part two.</span></div><!--tex4ht:label?: x16-15002r6 -->
@@ -119,7 +124,7 @@ class="content">setup of a GPU-enabled test program part two.</span></div><!--te
</div><hr class="endfloat" />
<!--l. 522--><p class="indent" > <span
<!--l. 519--><p class="indent" > <span
class="cmr-12">Finally, we convert the input matrix, the descriptor and the vectors to use a</span>
<span
class="cmr-12">GPU-enabled internal storage format. We then preallocate the preconditioner</span>
@@ -130,7 +135,7 @@ class="cmr-12">GPU environment</span>
<!--l. 526--><p class="indent" > <a
<!--l. 523--><p class="indent" > <a
id="x16-15003r7"></a><hr class="float"><div class="float"
>
@@ -138,7 +143,7 @@ class="cmr-12">GPU environment</span>
<div class="center"
>
<!--l. 555--><p class="noindent" >
<!--l. 552--><p class="noindent" >
<div class="minipage"><pre class="verbatim" id="verbatim-12">
&#x00A0;&#x00A0;call&#x00A0;desc_a%cnv(mold=igmold)
&#x00A0;&#x00A0;call&#x00A0;a%cscnv(info,mold=agmold)
@@ -162,7 +167,7 @@ class="cmr-12">GPU environment</span>
&#x00A0;&#x00A0;stop
&#x00A0;
</pre>
<!--l. 582--><p class="nopar" ></div></div>
<!--l. 579--><p class="nopar" ></div></div>
<br /> <div class="caption"
><span class="id">Listing 7: </span><span
class="content">setup of a GPU-enabled test program part three.</span></div><!--tex4ht:label?: x16-15003r7 -->
@@ -170,7 +175,7 @@ class="content">setup of a GPU-enabled test program part three.</span></div><!--
</div><hr class="endfloat" />
<!--l. 590--><p class="indent" > <span
<!--l. 587--><p class="indent" > <span
class="cmr-12">It is very important to employ solvers that are suited to the GPU, i.e. solvers that</span>
<span
class="cmr-12">do NOT employ triangular system solve kernels. Solvers that satisfy this constraint</span>
@@ -188,9 +193,10 @@ class="cmtt-12">INVT</span></span></span>
</li>
<li class="itemize"><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">AINV</span></span></span></li></ul>
<!--l. 599--><p class="noindent" ><span
class="cmr-12">and their </span><span class="obeylines-h"><span class="verb"><span
class="cmtt-12">L1</span></span></span> <span
<!--l. 596--><p class="noindent" ><span
class="cmr-12">and their </span><span
class="cmmi-12">&#x2113;</span><sub><span
class="cmr-8">1</span></sub> <span
class="cmr-12">variants.</span>