<?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 FYI, Here is my compile in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/issue-of-2d-fft-with-openmp/m-p/1176968#M29018</link>
    <description>&lt;P&gt;FYI, Here is my compile command: &amp;nbsp;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;source /opt/intel/compilers_and_libraries_2018.2.199/linux/bin/compilervars.sh intel64&lt;/P&gt;

&lt;P&gt;ifort -module ./ -i8 -fpp -warn all -warn errors&amp;nbsp; -qopenmp &lt;STRONG&gt;-c ${MKLROOT}/include/mkl_dfti.f90 &lt;/STRONG&gt;-o mkl_dfti.o&lt;/P&gt;

&lt;P&gt;ifort -DMKLI8 -static-intel -qopenmp -i8 -O3 -o fft2dcc FFT2dcc2.f90&lt;STRONG&gt; -module ./&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;-Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_ilp64.a ${MKLROOT}/lib/intel64/libmkl_core.a ${MKLROOT}/lib/intel64/libmkl_intel_thread.a -Wl,--end-group&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 02 May 2018 08:55:18 GMT</pubDate>
    <dc:creator>Ying_H_Intel</dc:creator>
    <dc:date>2018-05-02T08:55:18Z</dc:date>
    <item>
      <title>issue of 2d fft with openmp</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/issue-of-2d-fft-with-openmp/m-p/1176965#M29015</link>
      <description>&lt;P&gt;Hi, I'm having trouble with 2d fft&amp;nbsp;using intel 2018 compiler.&lt;SPAN style="font-size: 1em;"&gt;&amp;nbsp;I tracked it down and reproduce the behavior in this simple code. The sample code applies forward and backwar&lt;/SPAN&gt;&lt;SPAN style="font-size: 1em;"&gt;d 2d &lt;/SPAN&gt;fft&lt;SPAN style="font-size: 1em;"&gt;, and is supposed to bring back the original value. But if I do&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;setenv&lt;SPAN style="font-size: 1em;"&gt; MKL_DYNAMIC false&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;setenv&lt;SPAN style="font-size: 1em;"&gt; OMP_NUM_THREADS 10&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;and run the code, the result is wrong.&lt;/P&gt;

&lt;P&gt;Here is my sample code. Any insight is appreciated. Thank you.&lt;/P&gt;

&lt;P&gt;ifort version: 18.0.2 20180210&lt;/P&gt;

&lt;P&gt;MKL version: ics-2018.update.2/compilers_and_libraries_2018.2.199&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em;"&gt;Xi&lt;/SPAN&gt;&lt;SPAN style="font-size: 1em;"&gt;n&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;
	&lt;STYLE type="text/css"&gt;p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #000000; min-height: 13.0px} p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ba2da2} p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400} p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d12f1b} span.s1 {font-variant-ligatures: no-common-ligatures; color: #ba2da2} span.s2 {font-variant-ligatures: no-common-ligatures} span.s3 {font-variant-ligatures: no-common-ligatures; color: #272ad8} span.s4 {font-variant-ligatures: no-common-ligatures; color: #000000} span.s5 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}
	&lt;/STYLE&gt;
&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;Program&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; fft&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;dcc&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;! to compile the code, do the following:&lt;/P&gt;

&lt;P class="p2"&gt;&lt;SPAN class="s1"&gt;! ifort -c -DMKLI8 -qopenmp -I${MKLROOT}/include/intel64/ilp64 -O3 -o fft2dcc.o fft2dcc.F90&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&lt;SPAN class="s1"&gt;! ifort -DMKLI8 -static-intel -qopenmp -O3 -o fft2dcc fft2dcc.o&amp;nbsp;&amp;nbsp;-Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_ilp64.a ${MKLROOT}/lib/intel64/libmkl_core.a ${MKLROOT}/lib/intel64/libmkl_intel_thread.a -Wl,--&lt;/SPAN&gt;&lt;SPAN class="s2" style="color: rgb(186, 45, 162);"&gt;end&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;-group&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;use&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; MKL_DFTI&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;use&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; omp_lib&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;implicit&lt;/SPAN&gt;&lt;SPAN class="s4"&gt; &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;none&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;integer&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; :: nx, ny, nw, nfreq, ier, iw, iy, ix&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;complex&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;, &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;allocatable&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;, &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;dimension&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;(:,:,:) :: wave&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;integer&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; :: nthreads&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;type&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;(DFTI_DESCRIPTOR), &lt;/SPAN&gt;&lt;SPAN class="s1"&gt;pointer&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; :: plan&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;real&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; :: fscale, bscale&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;nx = &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;640&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;ny = &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;640&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;nw = &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;224&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;nthreads = omp_get_num_threads()&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;fscale = &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1.0&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;bscale = &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1.0&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;/float(nx*ny)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;ier = ccfft&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;d_plan(nx,ny,nx,fscale,bscale,plan,nthreads)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;allocate&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;(wave(nx,ny,nw))&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p4"&gt;&lt;SPAN class="s2"&gt;!$omp parallel &lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p4"&gt;&lt;SPAN class="s2"&gt;!$omp master&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;print&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; *, omp_get_num_threads()&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p4"&gt;&lt;SPAN class="s2"&gt;!$omp end master&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p4"&gt;&lt;SPAN class="s2"&gt;!$omp end parallel&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p4"&gt;&lt;SPAN class="s2"&gt;! first touch memory&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p4"&gt;&lt;SPAN class="s2"&gt;!$omp parallel do default(shared), private(ix,iy,iw)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;do&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; iw = &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;, nw&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s1"&gt;do&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; iy = &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;, ny&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s1"&gt;do&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; ix = &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;, nx&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;wave(ix,iy,iw) = cmplx(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;0.0&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;0.0&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s4"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;enddo&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s4"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;enddo&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p4"&gt;&lt;SPAN class="s4"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;! inject source&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;wave(nx/&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,ny/&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,iw) = cmplx(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1.0&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;0.0&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;enddo&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;print&lt;/SPAN&gt;&lt;SPAN class="s4"&gt; *&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;print&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; *, &lt;/SPAN&gt;&lt;SPAN class="s5"&gt;"Before"&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;, wave(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;318&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;:&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;322&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;320&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;print&lt;/SPAN&gt;&lt;SPAN class="s4"&gt; *&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p4"&gt;&lt;SPAN class="s2"&gt;!$OMP PARALLEL DO DEFAULT(SHARED), PRIVATE(iw)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;do&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; iw=&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,nw&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s1"&gt;call&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; ccfft&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;d_exe(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,wave(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,iw),plan)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s1"&gt;call&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; ccfft&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;d_exe(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;-1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,wave(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,iw),plan)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;enddo&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;print&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; *, &lt;/SPAN&gt;&lt;SPAN class="s5"&gt;"After"&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;, wave(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;318&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;:&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;322&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;320&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;deallocate&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;(wave)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;contains&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;integer&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; &lt;/SPAN&gt;&lt;SPAN class="s1"&gt;function&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; ccfft&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;d_plan &amp;amp;&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;( n&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;, n&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;, ldn&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;, fscale, bscale, plan, nthreads )&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;use&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; MKL_DFTI&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;implicit&lt;/SPAN&gt;&lt;SPAN class="s4"&gt; &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;none&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;integer&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;, &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;intent&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;(&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;in&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;), &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;optional&lt;/SPAN&gt;&lt;SPAN class="s4"&gt; :: nthreads&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;integer&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;, &lt;/SPAN&gt;&lt;SPAN class="s1"&gt;intent&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;(&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;in&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;)&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;:: n&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;, n&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;, ldn&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;real&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;,&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;intent&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;(&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;in&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;)&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;:: fscale, bscale&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;type&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;(DFTI_DESCRIPTOR), &lt;/SPAN&gt;&lt;SPAN class="s1"&gt;pointer&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; :: plan&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;integer&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; :: ier&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;#ifdef MKLI&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;8&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;integer&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;(kind=&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;8&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;) :: dim, nsize(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;), strides(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;3&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;), nthreads_in, status&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s4"&gt;#&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;else&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;integer&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;(kind=&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;4&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;) :: dim, nsize(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;), strides(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;3&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;), nthreads_in, status&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s4"&gt;#&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;endif&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;ier = &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;0&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p4"&gt;&lt;SPAN class="s2"&gt;!--- add some error checking for sizes&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;dim = &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;nsize(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;) = n&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;nsize(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;) = n&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;strides(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;) = &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;0&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;strides(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;) = &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;strides(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;3&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;) = ldn&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;status = DftiCreateDescriptor(plan,DFTI_SINGLE,DFTI_COMPLEX,dim,nsize(&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;:dim))&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;if&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; (&lt;/SPAN&gt;&lt;SPAN class="s1"&gt;.NOT.&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; DftiErrorClass(Status, DFTI_NO_ERROR)) &lt;/SPAN&gt;&lt;SPAN class="s1"&gt;then&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p5"&gt;&lt;SPAN class="s1"&gt;print&lt;/SPAN&gt;&lt;SPAN class="s4"&gt; *, &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;'error 1'&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s1"&gt;call&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; DftiStatusPrint(Status)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ier = &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;-1&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s4"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;return&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;endif&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;nthreads_in = &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;1&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;if&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; (present(nthreads)) nthreads_in = nthreads&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;status = DftiSetValue(plan,DFTI_NUMBER_OF_USER_THREADS,nthreads_in)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;status = DftiSetValue(plan,DFTI_INPUT_STRIDES,strides)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p4"&gt;&lt;SPAN class="s2"&gt;!--- this corresponding to isign &amp;lt; 0 usage at BP&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p4"&gt;&lt;SPAN class="s2"&gt;! bscale= 1.0/float(n1*n2)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;status = DftiSetValue(plan,DFTI_FORWARD_SCALE,bscale)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p4"&gt;&lt;SPAN class="s2"&gt;!--- this corresponding to isign &amp;gt; 0 usage at BP&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p4"&gt;&lt;SPAN class="s2"&gt;! fscale= 1.0&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;status = DftiSetValue(plan,DFTI_BACKWARD_SCALE,fscale)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;status = DftiCommitDescriptor(plan)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p5"&gt;&lt;SPAN class="s1"&gt;if&lt;/SPAN&gt;&lt;SPAN class="s4"&gt; (status /= &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;0&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;) &lt;/SPAN&gt;&lt;SPAN class="s1"&gt;print&lt;/SPAN&gt;&lt;SPAN class="s4"&gt; *, &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;'DftiCommitDescriptor returned '&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;, status&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;ccfft&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;d_plan = ier&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;end&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; &lt;/SPAN&gt;&lt;SPAN class="s1"&gt;function&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; ccfft&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;d_plan&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;subroutine&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; ccfft&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;d_exe( isign, cdata, plan )&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;use&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; MKL_DFTI&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;implicit&lt;/SPAN&gt;&lt;SPAN class="s4"&gt; &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;none&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;integer&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;, &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;intent&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;(&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;in&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;)&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;:: isign&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;complex&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;, &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;intent&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;(&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;inout&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;) :: cdata(*)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;type&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;(DFTI_DESCRIPTOR), &lt;/SPAN&gt;&lt;SPAN class="s1"&gt;pointer&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; :: plan&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;#ifdef MKLI&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;8&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;integer&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;(kind=&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;8&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;) :: status&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s4"&gt;#&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;else&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;integer&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;(kind=&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;4&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;) :: status&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s4"&gt;#&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;endif&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;if&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; ( isign &amp;lt; &lt;/SPAN&gt;&lt;SPAN class="s3"&gt;0&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; ) &lt;/SPAN&gt;&lt;SPAN class="s1"&gt;then&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;status = DftiComputeForward( plan, cdata )&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;else&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;status = DftiComputeBackward( plan, cdata )&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;endif&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;end&lt;/SPAN&gt;&lt;SPAN class="s4"&gt; &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;subroutine&lt;/SPAN&gt;&lt;SPAN class="s4"&gt; ccfft&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;2&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;d_exe&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;subroutine&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; DftiStatusPrint(status)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;use&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; MKL_DFTI&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;implicit&lt;/SPAN&gt;&lt;SPAN class="s4"&gt; &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;none&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;#ifdef MKLI&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;8&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;integer&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;(kind=&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;8&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;) :: status&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s4"&gt;#&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;else&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;integer&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;(kind=&lt;/SPAN&gt;&lt;SPAN class="s3"&gt;4&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;) :: status&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s4"&gt;#&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;endif&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;character&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;(DFTI_MAX_MESSAGE_LENGTH) :: error_message&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s2"&gt;error_message = DftiErrorMessage(status)&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;print&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; *, &lt;/SPAN&gt;&lt;SPAN class="s5"&gt;'Error message: '&lt;/SPAN&gt;&lt;SPAN class="s2"&gt;, error_message&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p5"&gt;&lt;SPAN class="s1"&gt;print&lt;/SPAN&gt;&lt;SPAN class="s4"&gt; *, &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;'Error status = '&lt;/SPAN&gt;&lt;SPAN class="s4"&gt;, status&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p1"&gt;&lt;SPAN class="s1"&gt;end&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; &lt;/SPAN&gt;&lt;SPAN class="s1"&gt;subroutine&lt;/SPAN&gt;&lt;SPAN class="s2"&gt; DftiStatusPrint&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p2"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p3"&gt;&lt;SPAN class="s2"&gt;end&lt;/SPAN&gt;&lt;SPAN class="s4"&gt; &lt;/SPAN&gt;&lt;SPAN class="s2"&gt;Program&lt;/SPAN&gt;&lt;/P&gt;

&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;

&lt;P class="p3"&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 01 May 2018 19:38:42 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/issue-of-2d-fft-with-openmp/m-p/1176965#M29015</guid>
      <dc:creator>Wang__Xin</dc:creator>
      <dc:date>2018-05-01T19:38:42Z</dc:date>
    </item>
    <item>
      <title>I tried to compile your code</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/issue-of-2d-fft-with-openmp/m-p/1176966#M29016</link>
      <description>&lt;P&gt;I tried to compile your code but I received compilation errors with the first line of your proposed compilation. Other people may be able to&amp;nbsp;help you. Here is your organized code for better interpretation:&lt;/P&gt;

&lt;PRE class="brush:fortran;"&gt;Program fft2dcc

    ! to compile the code, do the following:
    ! ifort -c -DMKLI8 -qopenmp -I${MKLROOT}/include/intel64/ilp64 -O3 -o fft2dcc.o fft2dcc.F90
    ! ifort -DMKLI8 -static-intel -qopenmp -O3 -o fft2dcc fft2dcc.o  -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_ilp64.a ${MKLROOT}/lib/intel64/libmkl_core.a ${MKLROOT}/lib/intel64/libmkl_intel_thread.a -Wl,--end-group

    use MKL_DFTI
    use omp_lib

    implicit none

    integer :: nx, ny, nw, nfreq, ier, iw, iy, ix
    complex, allocatable, dimension(:,:,:) :: wave
    integer :: nthreads
    type(DFTI_DESCRIPTOR), pointer :: plan
    real :: fscale, bscale

    nx = 640
    ny = 640
    nw = 224

    nthreads = omp_get_num_threads()
    fscale = 1.0
    bscale = 1.0/float(nx*ny)
    ier = ccfft2d_plan(nx,ny,nx,fscale,bscale,plan,nthreads)

    allocate(wave(nx,ny,nw))

    !$omp parallel
    !$omp master

    print *, omp_get_num_threads()

    !$omp end master
    !$omp end parallel

    ! first touch memory
    !$omp parallel do default(shared), private(ix,iy,iw)

    do iw = 1, nw
        do iy = 1, ny
            do ix = 1, nx
                wave(ix,iy,iw) = cmplx(0.0,0.0)
            enddo
        enddo
              ! inject source
        wave(nx/2,ny/2,iw) = cmplx(1.0,0.0)
    enddo

 

    print *
    print *, "Before", wave(318:322,320,1)
    print *

    !$OMP PARALLEL DO DEFAULT(SHARED), PRIVATE(iw)

    do iw=1,nw
        call ccfft2d_exe(1,wave(1,1,iw),plan)
        call ccfft2d_exe(-1,wave(1,1,iw),plan)
    enddo

    print *, "After", wave(318:322,320,1)

    deallocate(wave)

contains

    integer function ccfft2d_plan &amp;amp;
    ( n1, n2, ldn1, fscale, bscale, plan, nthreads )

        use MKL_DFTI
        implicit none

        integer, intent(in), optional :: nthreads
        integer, intent(in)  :: n1, n2, ldn1
        real,    intent(in)  :: fscale, bscale
        type(DFTI_DESCRIPTOR), pointer :: plan

        integer :: ier

#ifdef MKLI8

        integer(kind=8) :: dim, nsize(2), strides(3), nthreads_in, status

#else

        integer(kind=4) :: dim, nsize(2), strides(3), nthreads_in, status

#endif

 

        ier = 0
        !--- add some error checking for sizes
        dim = 2

        nsize(1) = n1
        nsize(2) = n2
        strides(1) = 0
        strides(2) = 1
        strides(3) = ldn1

        status = DftiCreateDescriptor(plan,DFTI_SINGLE,DFTI_COMPLEX,dim,nsize(1:dim))

        if (.NOT. DftiErrorClass(Status, DFTI_NO_ERROR)) then

            print *, 'error 1'
            call DftiStatusPrint(Status)
            ier = -1
            return

        endif


        nthreads_in = 1
        if (present(nthreads)) nthreads_in = nthreads
        status = DftiSetValue(plan,DFTI_NUMBER_OF_USER_THREADS,nthreads_in)
        status = DftiSetValue(plan,DFTI_INPUT_STRIDES,strides)

        !--- this corresponding to isign &amp;lt; 0 usage at BP
        ! bscale= 1.0/float(n1*n2)
        status = DftiSetValue(plan,DFTI_FORWARD_SCALE,bscale)
        !--- this corresponding to isign &amp;gt; 0 usage at BP
        ! fscale= 1.0
        status = DftiSetValue(plan,DFTI_BACKWARD_SCALE,fscale)
        status = DftiCommitDescriptor(plan)

        if (status /= 0) print *, 'DftiCommitDescriptor returned ', status

        ccfft2d_plan = ier

    end function ccfft2d_plan
 
    subroutine ccfft2d_exe( isign, cdata, plan )

        use MKL_DFTI
        implicit none
        integer, intent(in)  :: isign
        complex, intent(inout) :: cdata(*)
        type(DFTI_DESCRIPTOR), pointer :: plan


#ifdef MKLI8

        integer(kind=8) :: status

#else

        integer(kind=4) :: status

#endif

        if ( isign &amp;lt; 0 ) then
            status = DftiComputeForward( plan, cdata )
        else
            status = DftiComputeBackward( plan, cdata )
        endif

    end subroutine ccfft2d_exe

    subroutine DftiStatusPrint(status)

        use MKL_DFTI
        implicit none

#ifdef MKLI8

        integer(kind=8) :: status

#else

        integer(kind=4) :: status

#endif

        character(DFTI_MAX_MESSAGE_LENGTH) :: error_message

 

        error_message = DftiErrorMessage(status)
        print *, 'Error message: ', error_message
        print *, 'Error status = ', status

    end subroutine DftiStatusPrint

end Program
&lt;/PRE&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 01 May 2018 22:46:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/issue-of-2d-fft-with-openmp/m-p/1176966#M29016</guid>
      <dc:creator>vahid_a_</dc:creator>
      <dc:date>2018-05-01T22:46:00Z</dc:date>
    </item>
    <item>
      <title>Hi Xin, Vahid,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/issue-of-2d-fft-with-openmp/m-p/1176967#M29017</link>
      <description>&lt;P&gt;Hi Xin, Vahid,&lt;BR /&gt;
	​Thank you for the reports.&amp;nbsp;&lt;/P&gt;

&lt;P&gt;I try to build the code and&amp;nbsp;attach some trick at the end&amp;nbsp;of message. &amp;nbsp;Basically i can reproduce the&amp;nbsp; problem Xin reported. .&lt;BR /&gt;
	​It looks MKL_DYNAMIC=false or true problems,&lt;/P&gt;

&lt;P&gt;&lt;SPAN class="fontstyle0"&gt;&lt;FONT face="Verdana" size="2"&gt;Some Intel MKL routines may use fewer OpenMP threads than suggested by the threading controls if&lt;BR /&gt;
	either the underlying algorithms do not support the suggested number of OpenMP threads or the&lt;BR /&gt;
	routines perform better with fewer OpenMP threads because of lower OpenMP overhead and/or better&lt;BR /&gt;
	data locality. Set the &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class="fontstyle2"&gt;&lt;FONT size="2"&gt;MKL_DYNAMIC &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class="fontstyle0"&gt;&lt;FONT face="Verdana" size="2"&gt;environment variable to &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class="fontstyle2"&gt;&lt;FONT size="2"&gt;FALSE &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class="fontstyle0"&gt;&lt;FONT face="Verdana" size="2"&gt;or call &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class="fontstyle2"&gt;&lt;FONT size="2"&gt;mkl_set_dynamic(0) &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class="fontstyle0"&gt;&lt;FONT face="Verdana" size="2"&gt;to&lt;BR /&gt;
	use the suggested number of OpenMP threads whenever the algorithms permit and regardless of&lt;BR /&gt;
	OpenMP overhead and data locality.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;BR style=" 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; " /&gt;
	&amp;nbsp;&lt;/P&gt;

&lt;P&gt;But as we discussed in&amp;nbsp; &lt;A href="https://software.intel.com/en-us/forums/intel-math-kernel-library/topic/759099" target="_blank"&gt;https://software.intel.com/en-us/forums/intel-math-kernel-library/topic/759099&lt;/A&gt;&lt;BR /&gt;
	&lt;BR /&gt;
	​The plan is not thead safe, it may need private for each thread (include openMP thread).&lt;/P&gt;

&lt;P&gt;Best Regards,&lt;BR /&gt;
	​Ying&lt;/P&gt;</description>
      <pubDate>Wed, 02 May 2018 08:52:36 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/issue-of-2d-fft-with-openmp/m-p/1176967#M29017</guid>
      <dc:creator>Ying_H_Intel</dc:creator>
      <dc:date>2018-05-02T08:52:36Z</dc:date>
    </item>
    <item>
      <title>FYI, Here is my compile</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/issue-of-2d-fft-with-openmp/m-p/1176968#M29018</link>
      <description>&lt;P&gt;FYI, Here is my compile command: &amp;nbsp;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;source /opt/intel/compilers_and_libraries_2018.2.199/linux/bin/compilervars.sh intel64&lt;/P&gt;

&lt;P&gt;ifort -module ./ -i8 -fpp -warn all -warn errors&amp;nbsp; -qopenmp &lt;STRONG&gt;-c ${MKLROOT}/include/mkl_dfti.f90 &lt;/STRONG&gt;-o mkl_dfti.o&lt;/P&gt;

&lt;P&gt;ifort -DMKLI8 -static-intel -qopenmp -i8 -O3 -o fft2dcc FFT2dcc2.f90&lt;STRONG&gt; -module ./&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;-Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_ilp64.a ${MKLROOT}/lib/intel64/libmkl_core.a ${MKLROOT}/lib/intel64/libmkl_intel_thread.a -Wl,--end-group&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 02 May 2018 08:55:18 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/issue-of-2d-fft-with-openmp/m-p/1176968#M29018</guid>
      <dc:creator>Ying_H_Intel</dc:creator>
      <dc:date>2018-05-02T08:55:18Z</dc:date>
    </item>
    <item>
      <title>Ying, thanks for the reply. </title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/issue-of-2d-fft-with-openmp/m-p/1176969#M29019</link>
      <description>&lt;P&gt;Ying, thanks for the reply.&amp;nbsp;&lt;/P&gt;

&lt;P&gt;The MKL manual illustrates four ways to parallelize FFT application. &lt;SPAN style="font-size: 1em;"&gt;The sample code I provided mimics one of the techniques. You can find the example in the manual&amp;nbsp;&lt;/SPAN&gt;by searching 'Using&lt;SPAN style="color: rgb(8, 96, 168); font-size: 9pt; font-family: font000000001c72381a;"&gt;&amp;nbsp;Parallel Mode with a Common Descriptor'&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="font-size: 1em;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 03 May 2018 04:06:06 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/issue-of-2d-fft-with-openmp/m-p/1176969#M29019</guid>
      <dc:creator>Wang__Xin</dc:creator>
      <dc:date>2018-05-03T04:06:06Z</dc:date>
    </item>
    <item>
      <title> </title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/issue-of-2d-fft-with-openmp/m-p/1176970#M29020</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;Hi Xin,&lt;BR /&gt;
	&lt;BR /&gt;
	​Right,&amp;nbsp;&amp;nbsp;the example &amp;nbsp;'Using&amp;nbsp;Parallel Mode with a Common Descriptor'&amp;nbsp;are supposed for that purpose.&amp;nbsp;&amp;nbsp;&amp;nbsp;originally , &amp;nbsp;i&amp;nbsp; had supposed&amp;nbsp;possible out-sync in&amp;nbsp;forward and&amp;nbsp;Backforward.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp; do iw=1,nw&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call ccfft2d_exe(1,wave(1,1,iw),plan)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call ccfft2d_exe(-1,wave(1,1,iw),plan)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; enddo&lt;BR /&gt;
	​further test to separate them&lt;BR /&gt;
	&lt;BR /&gt;
	!$OMP PARALLEL DO DEFAULT(SHARED), PRIVATE(iw)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; do iw=1,nw&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call ccfft2d_exe(1,wave(1,1,iw),plan)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; enddo&lt;BR /&gt;
	&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp;!&amp;nbsp;&amp;nbsp; !$OMP PARALLEL DO DEFAULT(SHARED), PRIVATE(iw)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp; do iw=1,nw&lt;BR /&gt;
	&amp;nbsp;call ccfft2d_exe(-1,wave(1,1,iw),plan)&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enddo​&lt;BR /&gt;
	But the issue is still existing., if wit MKL_DYNAMIC=true, everything looks fine, if with MKL_DYNAMIC=false, then wrong result.&lt;/P&gt;

&lt;P&gt;So the problem should&amp;nbsp; not here&amp;nbsp;, we will look into details about the implementation.&lt;BR /&gt;
	&lt;BR /&gt;
	​Best Regards,&lt;BR /&gt;
	Ying&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&lt;BR /&gt;
	&lt;BR /&gt;
	&lt;BR /&gt;
	&lt;BR /&gt;
	&lt;BR /&gt;
	&lt;BR /&gt;
	&lt;BR /&gt;
	&lt;BR /&gt;
	&lt;BR /&gt;
	&lt;BR /&gt;
	&lt;BR /&gt;
	&lt;BR /&gt;
	&lt;BR /&gt;
	&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 03 May 2018 07:50:00 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/issue-of-2d-fft-with-openmp/m-p/1176970#M29020</guid>
      <dc:creator>Ying_H_Intel</dc:creator>
      <dc:date>2018-05-03T07:50:00Z</dc:date>
    </item>
    <item>
      <title>Hi Xin, </title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/issue-of-2d-fft-with-openmp/m-p/1176971#M29021</link>
      <description>&lt;P style="background-color: transparent; color: rgb(83, 87, 94); font-family: &amp;amp;quot;Arial&amp;amp;quot;,&amp;amp;quot;宋体&amp;amp;quot;,&amp;amp;quot;Tahoma&amp;amp;quot;,&amp;amp;quot;Helvetica&amp;amp;quot;,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 19.5px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"&gt;Hi Xin,&amp;nbsp;&lt;BR style="background-attachment: scroll; background-clip: border-box; background-color: transparent; background-image: none; background-origin: padding-box; background-position-x: 0%; background-position-y: 0%; background-repeat: repeat; background-size: auto; color: rgb(83, 87, 94); cursor: text; font-family: &amp;amp;quot;Arial&amp;amp;quot;,&amp;amp;quot;宋体&amp;amp;quot;,&amp;amp;quot;Tahoma&amp;amp;quot;,&amp;amp;quot;Helvetica&amp;amp;quot;,sans-serif; font-size: 13px; line-height: 19.5px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-height: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; word-wrap: break-word;" /&gt;
	&lt;BR style="background-attachment: scroll; background-clip: border-box; background-color: transparent; background-image: none; background-origin: padding-box; background-position-x: 0%; background-position-y: 0%; background-repeat: repeat; background-size: auto; color: rgb(83, 87, 94); cursor: text; font-family: &amp;amp;quot;Arial&amp;amp;quot;,&amp;amp;quot;宋体&amp;amp;quot;,&amp;amp;quot;Tahoma&amp;amp;quot;,&amp;amp;quot;Helvetica&amp;amp;quot;,sans-serif; font-size: 13px; line-height: 19.5px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-height: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; word-wrap: break-word;" /&gt;
	​Our developer team should&amp;nbsp; fix the problem in MKL 2019 version. which is available in IRC or YUM, APT now.&lt;/P&gt;

&lt;P style="background-color: transparent; color: rgb(83, 87, 94); font-family: &amp;amp;quot;Arial&amp;amp;quot;,&amp;amp;quot;宋体&amp;amp;quot;,&amp;amp;quot;Tahoma&amp;amp;quot;,&amp;amp;quot;Helvetica&amp;amp;quot;,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 19.5px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"&gt;Could you please to try it and let us know if any feedback.&lt;/P&gt;

&lt;P style="background-color: transparent; color: rgb(83, 87, 94); font-family: &amp;amp;quot;Arial&amp;amp;quot;,&amp;amp;quot;宋体&amp;amp;quot;,&amp;amp;quot;Tahoma&amp;amp;quot;,&amp;amp;quot;Helvetica&amp;amp;quot;,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 19.5px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"&gt;Thanks&lt;/P&gt;

&lt;P style="background-color: transparent; color: rgb(83, 87, 94); font-family: &amp;amp;quot;Arial&amp;amp;quot;,&amp;amp;quot;宋体&amp;amp;quot;,&amp;amp;quot;Tahoma&amp;amp;quot;,&amp;amp;quot;Helvetica&amp;amp;quot;,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 19.5px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"&gt;Ying&lt;/P&gt;

&lt;P style="background-color: transparent; color: rgb(83, 87, 94); font-family: &amp;amp;quot;Arial&amp;amp;quot;,&amp;amp;quot;宋体&amp;amp;quot;,&amp;amp;quot;Tahoma&amp;amp;quot;,&amp;amp;quot;Helvetica&amp;amp;quot;,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 19.5px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"&gt;P.S How to get Intel MKL etc: &amp;nbsp;&lt;/P&gt;

&lt;P style="background-color: transparent; color: rgb(83, 87, 94); font-family: &amp;amp;quot;Arial&amp;amp;quot;,&amp;amp;quot;宋体&amp;amp;quot;,&amp;amp;quot;Tahoma&amp;amp;quot;,&amp;amp;quot;Helvetica&amp;amp;quot;,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 19.5px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; -webkit-text-stroke-width: 0px; white-space: normal; word-spacing: 0px;"&gt;&lt;A href="https://software.intel.com/en-us/articles/how-to-get-intel-mklippdaal" target="_blank"&gt;https://software.intel.com/en-us/articles/how-to-get-intel-mklippdaal&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 09 Oct 2018 02:43:34 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/issue-of-2d-fft-with-openmp/m-p/1176971#M29021</guid>
      <dc:creator>Ying_H_Intel</dc:creator>
      <dc:date>2018-10-09T02:43:34Z</dc:date>
    </item>
  </channel>
</rss>

