<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:΢ÈíÑźÚ
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>Hi Barry,<br><br>Thanks for your email. sorry i did not make it clear. Here is a more detailed one:<br><br>int dim, i, j;<br>int NDOF=3,  NX=5, NY=5;<br><br> for(dim=0; dim<NDOF; dim++)<br>{<br>      for(i=0; i<NX; i++)<br>      {<br>          for(j=0; j<NY; j++)<br>          {<br>                //compute inpx<br>                 Set values for vec inpx, which has a dimension of 256*256<br>                //compute inpw<br>                Set values for vec inpw, which has a dimension of 256*256<br>                //fast convolution<br>               i am following ex158 in src/mat/examples using the petsc and fftw interface, the mat is created using        MatCreateFFT()<br>         }<br>     }<br>}<br><br>The values of inpx and inpw are changing with the indices dim, i and j, but the lengths are the same all the time and the convolution can be calculated separately. I am thinking about two options:<br>option1: using MPI to do the fast convolution for each inpx and inpw simulataneously, i.e. , do NDOF*NX*NY convolutions in parallel<br>option2: in convolution, define an extended matrix and vector to store all the values from the NDOF*NX*NY convolutions, and do MatMult(), VecPointwiseMult(), MatMultTranpose() on the extended objects at the same time.<br><br>I would very much appreciate your comments. Thanks.<br><br><br><br><div>> Subject: Re: [petsc-users] efficiency of parallel convolution<br>> From: bsmith@mcs.anl.gov<br>> Date: Wed, 6 Aug 2014 10:13:34 -0500<br>> CC: petsc-users@mcs.anl.gov<br>> To: tlk0812@hotmail.com<br>> <br>> <br>>   It is difficult to understand what you are doing here. What is dim? What is NX and NY?   Is the length of inpx and inpw 256*256 ?  Are you using a PETSc Mat like AIJ to apply the ¡°fast convolution¡± or some custom MATSHELL?  Is the ¡°fast convolution¡± the same for each dim, i and j or is it different ?<br>> <br>>   Barry<br>> <br>> On Aug 5, 2014, at 1:24 AM, LikunTan <tlk0812@hotmail.com> wrote:<br>> <br>> > Hi all,<br>> > <br>> > I am calculating the multiplication of matrix and vector using fast convolution, but this has to be done for many times. Here is a brief framework of my code:<br>> > <br>> > for(dim=0; dim<NDOF; dim++)<br>> > {<br>> >      for(i=0; i<NX; i++)<br>> >      {<br>> >          for(j=0; j<NY; j++)<br>> >          {<br>> >                //compute inpx<br>> >                //compute inpw<br>> >                //fast convolution<br>> >           }<br>> >      }<br>> > }<br>> > <br>> > The fast convolution needs to compute multiple times within the for loops. The dimension of the input vector is 256*256. The most time consuming parts are MatMult(), VecPoinstwiseMult() and MatMultTranspose() during fast convolution. The optimal number of processors is 2. Further increase of processor numbers will reduce the efficiency. In this case, would you please suggest a way to improve efficiency and fully make use of parallelization?  Thanks.<br>> <br></div>                                        </div></body>
</html>