<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Hello Sirui! in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959444#M15771</link>
    <description>&lt;P&gt;Hello Sirui!&lt;/P&gt;
&lt;P&gt;What numbers confused you?&lt;/P&gt;
&lt;P&gt;I will try to explain some numbers, probably it will clarify the situation. :)&lt;/P&gt;
&lt;P&gt;[rank=0]&amp;nbsp; local_nx =&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;-- local_nx usually is approximately N/P, but not always. E.g. if N=128, P=2 then both local_nx is 64. But in this particular case local_nx(rank=0) is not equal to local_nx(rank=1) &lt;BR /&gt;[rank=0] &amp;nbsp;local_x_start=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;[rank=0] &amp;nbsp;local_out_nx=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;BR /&gt;[rank=0] &amp;nbsp;local_out_x_start= 1&lt;BR /&gt;[rank=0] &amp;nbsp;local_size=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp; &amp;lt;-- local_size is approximately equal to local_nx, but may be greater, because of internal CDFT algorithm&lt;/P&gt;
&lt;P&gt;[rank=1]&amp;nbsp; local_nx= &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp; &amp;lt;-- local_nx(rank=0) + local_nx(rank=1) = N. &lt;BR /&gt;[rank=1]&amp;nbsp; local_x_start= &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;BR /&gt;[rank=1]&amp;nbsp; local_out_nx=&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 2&lt;BR /&gt;[rank=1]&amp;nbsp; local_out_x_start= 5&lt;BR /&gt;[rank=1]&amp;nbsp; local_size=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 &amp;lt;-- e.g. here CDFT needs array of size 3, instead of 2&lt;/P&gt;
&lt;P&gt;As it says in "Memory size for local data" section in "&lt;A href="http://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-022CD4E5-45D2-4FE0-B636-01E985A02F17.htm#GUID-022CD4E5-45D2-4FE0-B636-01E985A02F17"&gt;distributing data among processes&lt;/A&gt;" article sizes of local arrays should be at least local_size. But of cause only first local_nx (local_out_nx) elements are meaningful. Hence&lt;/P&gt;
&lt;P&gt;[fortran&lt;EM&gt;&lt;/EM&gt;]&lt;/P&gt;
&lt;P&gt;DO i=1,localsize&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in_local(i) = in(i+x_start-1)&lt;BR /&gt;ENDDO&lt;/P&gt;
&lt;P&gt;DO i=1,localsize&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(*,*) in_local(i),i+x_start-1,'for rank=',rank&lt;BR /&gt;ENDDO&lt;/P&gt;
&lt;P&gt;[/fortran&lt;EM&gt;&lt;/EM&gt;]&lt;/P&gt;
&lt;P&gt;logically should be replaced with&lt;/P&gt;
&lt;P&gt;[fortran&lt;EM&gt;&lt;/EM&gt;]&lt;/P&gt;
&lt;P&gt;DO i=1,local_nx&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in_local(i) = in(i+x_start-1)&lt;BR /&gt;ENDDO&lt;/P&gt;
&lt;P&gt;DO i=1,local_out_nx&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(*,*) in_local(i),i+outx_start-1,'for rank=',rank&lt;BR /&gt;ENDDO&lt;/P&gt;
&lt;P&gt;[/fortran&lt;EM&gt;&lt;/EM&gt;]&lt;/P&gt;
&lt;P&gt;Anyway, there is an error in the sequence of numbers (rank=0, index = 4 somehow duplicates index=6)... I will dig in it more and write here later.&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;</description>
    <pubDate>Mon, 13 May 2013 05:34:57 GMT</pubDate>
    <dc:creator>Evarist_F_Intel</dc:creator>
    <dc:date>2013-05-13T05:34:57Z</dc:date>
    <item>
      <title>Cluster FFT of 1D array using MPI</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959441#M15768</link>
      <description>&lt;P&gt;Dear. Intel Members,&lt;/P&gt;
&lt;P&gt;I have a question about &lt;A href="http://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-022CD4E5-45D2-4FE0-B636-01E985A02F17.htm#GUID-022CD4E5-45D2-4FE0-B636-01E985A02F17"&gt;distributing data among processes&lt;/A&gt; when using Intel MKL cluster FFT functions for 1D transforms. I am testing 1D FFT of an array of six complex numbers. The result obtained using one process is correct. However, the result obtained using two processes has wrong indices (the numbers are correct).&amp;nbsp; The results and source codes are pasted below. I am confused about how data are distributed among processes, although I have read through the manual. Any advice is greatly appreciated.&lt;/P&gt;
&lt;P&gt;Sirui&lt;/P&gt;
&lt;P&gt;________________________________________&lt;/P&gt;
&lt;P&gt;one process results:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;local_nx=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;local_x_start=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;local_out_nx=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;local_out_x_start=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;local_size=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;input global array&lt;BR /&gt;&amp;nbsp;(0.0000000E+00,1.000000)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;&amp;nbsp;(1.000000,1.000000)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;BR /&gt;&amp;nbsp;(2.000000,1.000000)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;BR /&gt;&amp;nbsp;(3.000000,1.000000)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;BR /&gt;&amp;nbsp;(4.000000,1.000000)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;BR /&gt;&amp;nbsp;(5.000000,1.000000)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;output local array with global index&lt;BR /&gt;&amp;nbsp;(15.00000,6.000000)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;(-3.000000,5.196153)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;(-3.000000,1.732051)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;(-3.000000,0.0000000E+00)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;(-3.000000,-1.732051)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;(-3.000000,-5.196152)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;successfully done&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;Two processes result:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;local_nx=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;local_x_start=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;local_out_nx=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;local_out_x_start=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;local_size=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;input global array&lt;BR /&gt;&amp;nbsp;(0.0000000E+00,1.000000)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;&amp;nbsp;(1.000000,1.000000)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;BR /&gt;&amp;nbsp;(2.000000,1.000000)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;BR /&gt;&amp;nbsp;(3.000000,1.000000)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;BR /&gt;&amp;nbsp;(4.000000,1.000000)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;BR /&gt;&amp;nbsp;(5.000000,1.000000)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;local_nx=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;&amp;nbsp;local_x_start=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;&amp;nbsp;local_out_nx=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;&amp;nbsp;local_out_x_start=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;&amp;nbsp;local_size=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;(-3.000000,0.0000000E+00)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;&amp;nbsp;(-3.000000,-1.732051)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;&amp;nbsp;(-3.000000,-5.196152)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;&amp;nbsp;output local array with global index&lt;BR /&gt;&amp;nbsp;(15.00000,6.000000)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;(-3.000000,5.196153)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;(-3.000000,1.732051)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;(-3.000000,-1.732051)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 for rank=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;&amp;nbsp;successfully done&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;My source code is the following.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; program main&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USE mmpivardef&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USE MKL_CDFT&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; USE mpi&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IMPLICIT NONE&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; complex(4), allocatable, dimension(:) :: in,work,in_local&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTEGER(4), parameter :: N=6&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; integer(4) :: i,j,localsize&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INTEGER(4) :: status,local_nx,x_start,local_out_nx,out_xstart&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TYPE(DFTI_DESCRIPTOR_DM), POINTER :: My_Desc1_Handle&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CALL MPI_INIT(ierr)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CALL MPI_COMM_DUP(MPI_COMM_WORLD,MCW,ierr)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CALL MPI_COMM_RANK(MCW,rank,ierr)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CALL MPI_COMM_SIZE(MCW,msize,ierr)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; allocate(in(N))&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = DftiCreateDescriptorDM(MCW,My_Desc1_Handle, &amp;amp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DFTI_SINGLE,DFTI_COMPLEX,1,N)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = DftiGetValueDM(My_Desc1_Handle,CDFT_LOCAL_SIZE,localsize)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = DftiGetValueDM(My_Desc1_Handle,CDFT_LOCAL_NX,local_nx)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = DftiGetValueDM(My_Desc1_Handle,CDFT_LOCAL_X_START, x_start)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = DftiGetValueDM(My_Desc1_Handle,CDFT_LOCAL_OUT_NX, local_out_nx)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = DftiGetValueDM(My_Desc1_Handle,CDFT_LOCAL_OUT_X_START, out_xstart)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(*,*) 'local_nx=',local_nx,'for rank=',rank&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(*,*) 'local_x_start=',x_start,'for rank=',rank&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(*,*) 'local_out_nx=',local_out_nx,'for rank=',rank&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(*,*) 'local_out_x_start=',out_xstart,'for rank=',rank&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(*,*) 'local_size=',localsize,'for rank=',rank&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(*,*)&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ALLOCATE(in_local(localsize))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ALLOCATE(work(localsize))&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = DftiSetValueDM(My_Desc1_Handle,CDFT_WORKSPACE,work)&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do i=1,N&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; j=i-1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in(i)=cmplx(j,1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enddo&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF (rank.eq.0) THEN&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(*,*) 'input global array'&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Do i=1,N&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(*,*) in(i),i&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENDDO&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENDIF&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(*,*)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DO i=1,localsize&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in_local(i) = in(i+x_start-1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENDDO&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = DftiCommitDescriptorDM(My_Desc1_Handle)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = DftiComputeForwardDM(My_Desc1_Handle,in_local)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF (rank.eq.0) write(*,*) 'output local array with global index'&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DO i=1,localsize&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(*,*) in_local(i),i+x_start-1,'for rank=',rank&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ENDDO&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; status = DftiFreeDescriptorDM(My_Desc1_Handle)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DEALLOCATE(in_local,work,in)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF (rank.eq.0) write(*,*) 'successfully done'&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CALL MPI_FINALIZE(ierr)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end program&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Sun, 12 May 2013 20:40:42 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959441#M15768</guid>
      <dc:creator>siruitan</dc:creator>
      <dc:date>2013-05-12T20:40:42Z</dc:date>
    </item>
    <item>
      <title>Sirui, </title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959442#M15769</link>
      <description>&lt;P&gt;Sirui,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Could you suggest which version of Intel MKL you are using now?&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Regards,&lt;BR /&gt;Chao&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 13 May 2013 02:42:35 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959442#M15769</guid>
      <dc:creator>Chao_Y_Intel</dc:creator>
      <dc:date>2013-05-13T02:42:35Z</dc:date>
    </item>
    <item>
      <title>Hi Chao,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959443#M15770</link>
      <description>&lt;P&gt;Hi Chao,&lt;/P&gt;
&lt;P&gt;Thank you for your prompt reply. I have both MKL 10.3.11 and MKL 11.0.1 available. They gave me the same results.&lt;/P&gt;
&lt;P&gt;Best,&lt;/P&gt;
&lt;P&gt;Sirui&lt;/P&gt;</description>
      <pubDate>Mon, 13 May 2013 03:00:40 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959443#M15770</guid>
      <dc:creator>siruitan</dc:creator>
      <dc:date>2013-05-13T03:00:40Z</dc:date>
    </item>
    <item>
      <title>Hello Sirui!</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959444#M15771</link>
      <description>&lt;P&gt;Hello Sirui!&lt;/P&gt;
&lt;P&gt;What numbers confused you?&lt;/P&gt;
&lt;P&gt;I will try to explain some numbers, probably it will clarify the situation. :)&lt;/P&gt;
&lt;P&gt;[rank=0]&amp;nbsp; local_nx =&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;-- local_nx usually is approximately N/P, but not always. E.g. if N=128, P=2 then both local_nx is 64. But in this particular case local_nx(rank=0) is not equal to local_nx(rank=1) &lt;BR /&gt;[rank=0] &amp;nbsp;local_x_start=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;[rank=0] &amp;nbsp;local_out_nx=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;BR /&gt;[rank=0] &amp;nbsp;local_out_x_start= 1&lt;BR /&gt;[rank=0] &amp;nbsp;local_size=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp; &amp;lt;-- local_size is approximately equal to local_nx, but may be greater, because of internal CDFT algorithm&lt;/P&gt;
&lt;P&gt;[rank=1]&amp;nbsp; local_nx= &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp; &amp;lt;-- local_nx(rank=0) + local_nx(rank=1) = N. &lt;BR /&gt;[rank=1]&amp;nbsp; local_x_start= &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;BR /&gt;[rank=1]&amp;nbsp; local_out_nx=&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 2&lt;BR /&gt;[rank=1]&amp;nbsp; local_out_x_start= 5&lt;BR /&gt;[rank=1]&amp;nbsp; local_size=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 &amp;lt;-- e.g. here CDFT needs array of size 3, instead of 2&lt;/P&gt;
&lt;P&gt;As it says in "Memory size for local data" section in "&lt;A href="http://software.intel.com/sites/products/documentation/hpc/mkl/mklman/GUID-022CD4E5-45D2-4FE0-B636-01E985A02F17.htm#GUID-022CD4E5-45D2-4FE0-B636-01E985A02F17"&gt;distributing data among processes&lt;/A&gt;" article sizes of local arrays should be at least local_size. But of cause only first local_nx (local_out_nx) elements are meaningful. Hence&lt;/P&gt;
&lt;P&gt;[fortran&lt;EM&gt;&lt;/EM&gt;]&lt;/P&gt;
&lt;P&gt;DO i=1,localsize&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in_local(i) = in(i+x_start-1)&lt;BR /&gt;ENDDO&lt;/P&gt;
&lt;P&gt;DO i=1,localsize&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(*,*) in_local(i),i+x_start-1,'for rank=',rank&lt;BR /&gt;ENDDO&lt;/P&gt;
&lt;P&gt;[/fortran&lt;EM&gt;&lt;/EM&gt;]&lt;/P&gt;
&lt;P&gt;logically should be replaced with&lt;/P&gt;
&lt;P&gt;[fortran&lt;EM&gt;&lt;/EM&gt;]&lt;/P&gt;
&lt;P&gt;DO i=1,local_nx&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in_local(i) = in(i+x_start-1)&lt;BR /&gt;ENDDO&lt;/P&gt;
&lt;P&gt;DO i=1,local_out_nx&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write(*,*) in_local(i),i+outx_start-1,'for rank=',rank&lt;BR /&gt;ENDDO&lt;/P&gt;
&lt;P&gt;[/fortran&lt;EM&gt;&lt;/EM&gt;]&lt;/P&gt;
&lt;P&gt;Anyway, there is an error in the sequence of numbers (rank=0, index = 4 somehow duplicates index=6)... I will dig in it more and write here later.&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 13 May 2013 05:34:57 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959444#M15771</guid>
      <dc:creator>Evarist_F_Intel</dc:creator>
      <dc:date>2013-05-13T05:34:57Z</dc:date>
    </item>
    <item>
      <title>Hi EVARIST F.,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959445#M15772</link>
      <description>&lt;P&gt;Hi EVARIST F.,&lt;/P&gt;
&lt;P&gt;Thank you for pointing out the difference between local_size and local_nx/local_out_nx. I agree with you that localsize logically should be replaced by local_nx/local_out_nx in the piece of code you quoted. What really confuses me is the error in the sequence of numbers, as you mentioned at the end of your message. Any advice is greatly appreciated.&lt;/P&gt;
&lt;P&gt;Sirui&lt;/P&gt;</description>
      <pubDate>Mon, 13 May 2013 14:08:47 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959445#M15772</guid>
      <dc:creator>siruitan</dc:creator>
      <dc:date>2013-05-13T14:08:47Z</dc:date>
    </item>
    <item>
      <title>Sirui,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959446#M15773</link>
      <description>&lt;P&gt;Sirui,&lt;/P&gt;
&lt;P&gt;I finally found out that this is a bug in DftiGetValueDM. Returned values &lt;STRONG&gt;local_out_nx, local_out_x_start&lt;/STRONG&gt; are incorrect. For your example with N = 6, correct values should be the following:&lt;/P&gt;
&lt;P&gt;[rank=0]&amp;nbsp; local_nx =&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;BR /&gt;[rank=0] &amp;nbsp;local_x_start=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;BR /&gt;[rank=0] &amp;nbsp;local_out_nx=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;3&lt;/STRONG&gt;&lt;BR /&gt;[rank=0] &amp;nbsp;local_out_x_start= 1&lt;BR /&gt;[rank=0] &amp;nbsp;local_size=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;[rank=1]&amp;nbsp; local_nx= &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;BR /&gt;[rank=1]&amp;nbsp; local_x_start= &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;BR /&gt;[rank=1]&amp;nbsp; local_out_nx=&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;STRONG&gt;3&lt;/STRONG&gt;&lt;BR /&gt;[rank=1]&amp;nbsp; local_out_x_start=&amp;nbsp; &lt;STRONG&gt;4&lt;/STRONG&gt;&lt;BR /&gt;[rank=1]&amp;nbsp; local_size=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;/P&gt;
&lt;P&gt;This is why you got incorrect sequence of numbers (actually rank=0, index = 4 is simply redundant).&lt;/P&gt;
&lt;P&gt;Unfortunately there is no easy way to determine what out_nx and out_x_start should be even if you know the length of FFT transform and number of MPI procs. But if number of MPI processes is a perfect square then this problem should not appear. I filed a bug and it will be fixed in our future releases.&lt;/P&gt;
&lt;P&gt;Thank you for your help!&lt;/P&gt;</description>
      <pubDate>Tue, 14 May 2013 03:53:05 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959446#M15773</guid>
      <dc:creator>Evarist_F_Intel</dc:creator>
      <dc:date>2013-05-14T03:53:05Z</dc:date>
    </item>
    <item>
      <title>Evarist,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959447#M15774</link>
      <description>&lt;P&gt;Evarist,&lt;/P&gt;
&lt;P&gt;I suspected that the local_out_nx and local_out_x_start returned from DftiGetValueDM were incorrect. Your answer confirmed my guess. Based on my experiments, local_out_nx is always equal to local_nx and local_out_x_start is always equal to local_x_start. What's interesting is that IFFT(FFT(A))==A. That implies somehow DftiComputeBackwardDM is able to figure out the correct data distribution. Anyway, I am looking forward to the new releases with the bug fixed. Thank you for your helpful comments!&lt;/P&gt;
&lt;P&gt;Sirui&lt;/P&gt;</description>
      <pubDate>Tue, 14 May 2013 04:19:48 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959447#M15774</guid>
      <dc:creator>siruitan</dc:creator>
      <dc:date>2013-05-14T04:19:48Z</dc:date>
    </item>
    <item>
      <title>Sirui,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959448#M15775</link>
      <description>&lt;P&gt;Sirui,&lt;/P&gt;
&lt;P&gt;You are absolutely right about the same values. DftiGetValueDM returns out values using the same formula as for in values. But internal parameters are correct and that is why DftiComputeBackwardDM knows about data distribution.&lt;/P&gt;</description>
      <pubDate>Tue, 14 May 2013 04:28:59 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959448#M15775</guid>
      <dc:creator>Evarist_F_Intel</dc:creator>
      <dc:date>2013-05-14T04:28:59Z</dc:date>
    </item>
    <item>
      <title>Hi Sirui,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959449#M15776</link>
      <description>&lt;P&gt;Hi Sirui,&lt;/P&gt;
&lt;P&gt;You can use the CQ DPD200338629 as reference when the bug fix is ready.&lt;/P&gt;
&lt;P&gt;Thanks&lt;BR /&gt;Chao&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 15 May 2013 08:24:45 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959449#M15776</guid>
      <dc:creator>Chao_Y_Intel</dc:creator>
      <dc:date>2013-05-15T08:24:45Z</dc:date>
    </item>
    <item>
      <title>Hi Sirui,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959450#M15777</link>
      <description>&lt;P&gt;Hi Sirui,&lt;/P&gt;
&lt;P&gt;could you check the latest MKL 11.0 update? This problem is expected to be fixed in the new releae now.&lt;/P&gt;
&lt;P&gt;Regards,&lt;BR /&gt;Chao&lt;/P&gt;</description>
      <pubDate>Mon, 03 Jun 2013 02:01:29 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959450#M15777</guid>
      <dc:creator>Chao_Y_Intel</dc:creator>
      <dc:date>2013-06-03T02:01:29Z</dc:date>
    </item>
    <item>
      <title>Hi Chao,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959451#M15778</link>
      <description>&lt;P&gt;Hi Chao,&lt;/P&gt;
&lt;P&gt;Could you please specify the release number of the lasted MKL 11.0 update you mentioned? Thank you.&lt;/P&gt;
&lt;P&gt;Sirui&lt;/P&gt;</description>
      <pubDate>Mon, 03 Jun 2013 03:10:56 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959451#M15778</guid>
      <dc:creator>siruitan</dc:creator>
      <dc:date>2013-06-03T03:10:56Z</dc:date>
    </item>
    <item>
      <title>Sirui, </title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959452#M15779</link>
      <description>&lt;P&gt;Sirui,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I had a few clarification: we are planning to include the fix in the next update 5 release (possibly in the MKL 11.0 update 5). but this release is not available yet. I will keep you post when it is ready. Sorry for the confusion.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Regards,&lt;BR /&gt; Chao&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 03 Jun 2013 03:34:16 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/Cluster-FFT-of-1D-array-using-MPI/m-p/959452#M15779</guid>
      <dc:creator>Chao_Y_Intel</dc:creator>
      <dc:date>2013-06-03T03:34:16Z</dc:date>
    </item>
  </channel>
</rss>

