Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.

Question using vdmul

Ferriere__Axelle
Beginner
659 Views

On my MAC with Intel, using vdmul does not make the multiplication of two matrices faster than the usual A*B multiplication. 

Is this normal? Or does it mean that maybe I did not install MKL properly?

Thank you very much in advance for your help

 

0 Kudos
4 Replies
Zhen_Z_Intel
Employee
659 Views

Dear customer,

The performance depends on the size of your calculating vectors and parallelization of your program and even your system workaround(CPU, OS, compiler...)Could you please provide more information and a test sample to show how you implement and how you compared with. So that I could help you to have a check. Thanks.

Best regards,
Fiona

0 Kudos
Ferriere__Axelle
Beginner
659 Views

Dear Fiona, thank you for your answer.

The code I'm implementing is the following:

program MAIN
        
    implicit none
    
    integer, parameter :: Na = 250, Nx = 100, NS = Na*Nx    
    
    integer            :: rA, cA, rB, cB, icA, icB, ic
    real(8) 		:: t_in, t_out
  
    real(8)            :: A(NS,Na), B(NS,Nx), KK(NS,NS)
    
    A = 1.0D0
    B = 2.0D0 
    
    rA = size(A,1)
    cA = size(A,2)
    rB = size(B,1)
    cB = size(B,2)    

    KK = 0.0D0

    call cpu_time(t_in)    
    do icA = 1, cA        
        do icB = 1, cB            
            ic = (icA - 1)*cB + icB       
            KK(:,ic) = A(:,icA)*B(:,icB)
        end do        
    end do
    call cpu_time(t_out)
    print *, '("Computing KK without vdmul takes = ",f2.6," seconds.")', t_out - t_in 

   call cpu_time(t_in)
   do icA = 1, cA
        do icB = 1, cB
            ic = (icA - 1)*cB + icB
            call vdmul( rA, A(:,icA), B(:,icB), KK(:,ic) )                                                                                                                    
        end do
    end do
    call cpu_time(t_out)
    print *, '("Computing KK with vdmul takes = ",f2.6," seconds.")', t_out - t_in
   
end program MAIN

The output I'm getting is as follows: 

 ("Computing KK without vdmul takes = ",f2.6," seconds.")   1.02616200000000     

 ("Computing KK with vdmul takes = ",f2.6," seconds.")      1.16865000000000 

 

I have tried varied sizes for Na and Nx: usually there is no significant difference using vdmul; if at all, it's slowlier in the latter case. The only thing that makes a significant difference for the speed of the code is whether the following line is commented or not: 

    KK = 0.0D0

I'm using OS X 10.11.6. Thank you for your help, and best regards,

Axelle

0 Kudos
TimP
Honored Contributor III
659 Views
Auto vectorization of your source code ought to achieve full performance. If there is further performance to be gained by threading, it may be done better outside the inner loop. Anyway threading would at best reduce elapsed but not cpu time so if vdmul does that you may want system_clock
0 Kudos
Ferriere__Axelle
Beginner
659 Views

Dear Tim,

I see, thanks a lot for your quick reply!

Best,

Axelle

0 Kudos
Reply