<?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 matrix matrix multiplication using BLAS3 routine gemm in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/matrix-matrix-multiplication-using-BLAS3-routine-gemm/m-p/947334#M14998</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;I have some problems using the gemm routine, please see:&lt;/P&gt;
&lt;P&gt;[fortran]&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; program mm_test&lt;BR /&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;BR /&gt;! test matrix matrix multiplication&lt;BR /&gt;!&lt;BR /&gt;! compile&lt;BR /&gt;!&lt;BR /&gt;!ifort&amp;nbsp;&amp;nbsp; -w mm_test.f90 \&lt;BR /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "/opt/intel/composer_xe_2011_sp1.9.293/mkl/lib/intel64"/libmkl_intel_lp64.a \&lt;BR /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -Wl,--start-group \&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; "/opt/intel/composer_xe_2011_sp1.9.293/mkl/lib/intel64"/libmkl_intel_thread.a \&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; "/opt/intel/composer_xe_2011_sp1.9.293/mkl/lib/intel64"/libmkl_core.a \&lt;BR /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -Wl,--end-group \&lt;BR /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -L"/opt/intel/composer_xe_2011_sp1.9.293/mkl/../compiler/lib/intel64" -liomp5 -lpthread \&lt;BR /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -o x_mm&lt;BR /&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;implicit none&lt;BR /&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;integer&amp;nbsp;&amp;nbsp; (kind = 4)&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; :: i,j&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;real&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (kind = 4)&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; :: a(2,3),b(3,2),c(2,2),alpha, beta&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;complex&amp;nbsp;&amp;nbsp; (kind = 8)&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; :: ca(2,3),cb(3,2),cc(2,2),calpha, cbeta&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;character (len = 1)&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; :: transa,transb&lt;BR /&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;BR /&gt;! real example&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;transa = 'N'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;transb = 'N'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;alpha&amp;nbsp; = 1.0&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;beta&amp;nbsp;&amp;nbsp; = 0.0&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;a(1,1) = 1.0&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;a(1,2) = 2.0&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;a(1,3) = 3.0&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;a(2,1) = 4.0&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;a(2,2) = 5.0&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;a(2,3) = 6.0&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;b = transpose(a)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;call sgemm(transa, transb, 2, 2, 3, alpha, a, 2, b, 3, beta, c, 2)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;print*,'result for real numbers'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;do i = 1,2&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;do j = 1,2&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;print*,i,j,c(i,j)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;enddo ! j&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;enddo ! i&lt;BR /&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;BR /&gt;! double complex numbers&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;transa = 'N'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;transb = 'N'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;calpha&amp;nbsp; = DCMPLX(1.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;cbeta&amp;nbsp;&amp;nbsp; = DCMPLX(0.0,0.0)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(1,1) = DCMPLX(1.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(1,2) = DCMPLX(2.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(1,3) = DCMPLX(3.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(2,1) = DCMPLX(4.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(2,2) = DCMPLX(5.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(2,3) = DCMPLX(6.0,0.0)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;cb = dconjg(transpose(ca))&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;call dzgemm(transa, transb, 2, 2, 3, calpha, ca, 2, cb, 3, cbeta, cc, 2)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;print*,'result for complex numbers'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;do i = 1,2&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;do j = 1,2&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;print*,i,j,cc(i,j)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;enddo ! j&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;enddo ! i&lt;BR /&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;BR /&gt;! double complex numbers test with internal conjugate transpose&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;transa = 'N'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;transb = 'C'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;calpha&amp;nbsp; = DCMPLX(1.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;cbeta&amp;nbsp;&amp;nbsp; = DCMPLX(0.0,0.0)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(1,1) = DCMPLX(1.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(1,2) = DCMPLX(2.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(1,3) = DCMPLX(3.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(2,1) = DCMPLX(4.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(2,2) = DCMPLX(5.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(2,3) = DCMPLX(6.0,0.0)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;call dzgemm(transa, transb, 2, 2, 3, calpha, ca, 2, ca, 2, cbeta, cc, 2)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;print*,'result for complex numbers test'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;do i = 1,2&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;do j = 1,2&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;print*,i,j,cc(i,j)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;enddo ! j&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;enddo ! i&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end program mm_test&lt;/P&gt;
&lt;P&gt;[/fortran]&lt;/P&gt;
&lt;P&gt;it produces the following screen output&lt;/P&gt;
&lt;P&gt;[plain]&lt;/P&gt;
&lt;P&gt;result for real numbers&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 14.00000&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp; 32.00000&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 32.00000&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp; 77.00000&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;result for complex numbers&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 (15.0000000000000,0.000000000000000E+000)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 (36.0000000000000,0.000000000000000E+000)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 (0.000000000000000E+000,0.000000000000000E+000)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 (0.000000000000000E+000,0.000000000000000E+000)&lt;BR /&gt;&amp;nbsp;result for complex numbers test&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 (15.0000000000000,0.000000000000000E+000)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 (36.0000000000000,0.000000000000000E+000)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 (0.000000000000000E+000,0.000000000000000E+000)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 (0.000000000000000E+000,0.000000000000000E+000)&lt;/P&gt;
&lt;P&gt;[/plain]&lt;/P&gt;
&lt;P&gt;I wonder why the resulting complex matrix is not symmetric (like in the real number example), although it should be? Can anybody help me?&lt;/P&gt;
&lt;P&gt;Thank you in advance.&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Eide&lt;/P&gt;</description>
    <pubDate>Mon, 12 Nov 2012 11:27:28 GMT</pubDate>
    <dc:creator>eide</dc:creator>
    <dc:date>2012-11-12T11:27:28Z</dc:date>
    <item>
      <title>matrix matrix multiplication using BLAS3 routine gemm</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/matrix-matrix-multiplication-using-BLAS3-routine-gemm/m-p/947334#M14998</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;I have some problems using the gemm routine, please see:&lt;/P&gt;
&lt;P&gt;[fortran]&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; program mm_test&lt;BR /&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;BR /&gt;! test matrix matrix multiplication&lt;BR /&gt;!&lt;BR /&gt;! compile&lt;BR /&gt;!&lt;BR /&gt;!ifort&amp;nbsp;&amp;nbsp; -w mm_test.f90 \&lt;BR /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "/opt/intel/composer_xe_2011_sp1.9.293/mkl/lib/intel64"/libmkl_intel_lp64.a \&lt;BR /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -Wl,--start-group \&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; "/opt/intel/composer_xe_2011_sp1.9.293/mkl/lib/intel64"/libmkl_intel_thread.a \&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; "/opt/intel/composer_xe_2011_sp1.9.293/mkl/lib/intel64"/libmkl_core.a \&lt;BR /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -Wl,--end-group \&lt;BR /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -L"/opt/intel/composer_xe_2011_sp1.9.293/mkl/../compiler/lib/intel64" -liomp5 -lpthread \&lt;BR /&gt;!&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -o x_mm&lt;BR /&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;implicit none&lt;BR /&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;integer&amp;nbsp;&amp;nbsp; (kind = 4)&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; :: i,j&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;real&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (kind = 4)&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; :: a(2,3),b(3,2),c(2,2),alpha, beta&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;complex&amp;nbsp;&amp;nbsp; (kind = 8)&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; :: ca(2,3),cb(3,2),cc(2,2),calpha, cbeta&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;character (len = 1)&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; :: transa,transb&lt;BR /&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;BR /&gt;! real example&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;transa = 'N'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;transb = 'N'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;alpha&amp;nbsp; = 1.0&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;beta&amp;nbsp;&amp;nbsp; = 0.0&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;a(1,1) = 1.0&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;a(1,2) = 2.0&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;a(1,3) = 3.0&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;a(2,1) = 4.0&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;a(2,2) = 5.0&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;a(2,3) = 6.0&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;b = transpose(a)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;call sgemm(transa, transb, 2, 2, 3, alpha, a, 2, b, 3, beta, c, 2)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;print*,'result for real numbers'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;do i = 1,2&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;do j = 1,2&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;print*,i,j,c(i,j)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;enddo ! j&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;enddo ! i&lt;BR /&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;BR /&gt;! double complex numbers&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;transa = 'N'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;transb = 'N'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;calpha&amp;nbsp; = DCMPLX(1.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;cbeta&amp;nbsp;&amp;nbsp; = DCMPLX(0.0,0.0)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(1,1) = DCMPLX(1.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(1,2) = DCMPLX(2.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(1,3) = DCMPLX(3.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(2,1) = DCMPLX(4.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(2,2) = DCMPLX(5.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(2,3) = DCMPLX(6.0,0.0)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;cb = dconjg(transpose(ca))&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;call dzgemm(transa, transb, 2, 2, 3, calpha, ca, 2, cb, 3, cbeta, cc, 2)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;print*,'result for complex numbers'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;do i = 1,2&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;do j = 1,2&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;print*,i,j,cc(i,j)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;enddo ! j&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;enddo ! i&lt;BR /&gt;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;BR /&gt;! double complex numbers test with internal conjugate transpose&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;transa = 'N'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;transb = 'C'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;calpha&amp;nbsp; = DCMPLX(1.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;cbeta&amp;nbsp;&amp;nbsp; = DCMPLX(0.0,0.0)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(1,1) = DCMPLX(1.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(1,2) = DCMPLX(2.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(1,3) = DCMPLX(3.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(2,1) = DCMPLX(4.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(2,2) = DCMPLX(5.0,0.0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ca(2,3) = DCMPLX(6.0,0.0)&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;call dzgemm(transa, transb, 2, 2, 3, calpha, ca, 2, ca, 2, cbeta, cc, 2)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;print*,'result for complex numbers test'&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;do i = 1,2&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;do j = 1,2&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;print*,i,j,cc(i,j)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;enddo ! j&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;enddo ! i&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;end program mm_test&lt;/P&gt;
&lt;P&gt;[/fortran]&lt;/P&gt;
&lt;P&gt;it produces the following screen output&lt;/P&gt;
&lt;P&gt;[plain]&lt;/P&gt;
&lt;P&gt;result for real numbers&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 14.00000&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp; 32.00000&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp; 32.00000&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp; 77.00000&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;result for complex numbers&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 (15.0000000000000,0.000000000000000E+000)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 (36.0000000000000,0.000000000000000E+000)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 (0.000000000000000E+000,0.000000000000000E+000)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 (0.000000000000000E+000,0.000000000000000E+000)&lt;BR /&gt;&amp;nbsp;result for complex numbers test&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 (15.0000000000000,0.000000000000000E+000)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 (36.0000000000000,0.000000000000000E+000)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 (0.000000000000000E+000,0.000000000000000E+000)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 (0.000000000000000E+000,0.000000000000000E+000)&lt;/P&gt;
&lt;P&gt;[/plain]&lt;/P&gt;
&lt;P&gt;I wonder why the resulting complex matrix is not symmetric (like in the real number example), although it should be? Can anybody help me?&lt;/P&gt;
&lt;P&gt;Thank you in advance.&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Eide&lt;/P&gt;</description>
      <pubDate>Mon, 12 Nov 2012 11:27:28 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/matrix-matrix-multiplication-using-BLAS3-routine-gemm/m-p/947334#M14998</guid>
      <dc:creator>eide</dc:creator>
      <dc:date>2012-11-12T11:27:28Z</dc:date>
    </item>
    <item>
      <title>You are not calling dzgemm</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/matrix-matrix-multiplication-using-BLAS3-routine-gemm/m-p/947335#M14999</link>
      <description>You are not calling dzgemm with arguments of the specified types. To catch this kind of error, add the following statement to your source code and the compiler will tell you what the errors are:
&lt;BR /&gt;
[fortran]          include 'mkl.fi'[/fortran]</description>
      <pubDate>Mon, 12 Nov 2012 21:11:19 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/matrix-matrix-multiplication-using-BLAS3-routine-gemm/m-p/947335#M14999</guid>
      <dc:creator>mecej4</dc:creator>
      <dc:date>2012-11-12T21:11:19Z</dc:date>
    </item>
    <item>
      <title>Hi mecej,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/matrix-matrix-multiplication-using-BLAS3-routine-gemm/m-p/947336#M15000</link>
      <description>Hi mecej,

thank you very much. The first matrix has to be double precision - now it is correct. Thanks for the tip with the include file.

Cheers Eide</description>
      <pubDate>Mon, 12 Nov 2012 21:40:33 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/matrix-matrix-multiplication-using-BLAS3-routine-gemm/m-p/947336#M15000</guid>
      <dc:creator>eide</dc:creator>
      <dc:date>2012-11-12T21:40:33Z</dc:date>
    </item>
  </channel>
</rss>

