Software Archive
Read-only legacy content
17061 Discussions

strange behaviour with icpc 2016,2017 and _m512d arithmetic

thomas_guignon
Beginner
266 Views

Hello, the following sample code is compiled with icpc (version 16.0.2 (gcc version 4.9.3 compatibility)

#include <stdio.h>
#include <immintrin.h>

/*
inline __m512d operator+(const __m512d  val1, __m512d  val2){
  return _mm512_add_pd(val1, val2);
}
*/

int main(int argc, char **argv)
{
  __m512d a={1,2,3,4,1,2,3,4},b={5,6,7,8,5,6,7,8},c;
 
  c=a+b;

  double *pc = (double *)&c;

  printf("c = %e %e %e %e %e %e %e %e \n",
         pc[0],
         pc[1],
         pc[2],
         pc[3],
         pc[4],
         pc[5],
         pc[6],
         pc[7]
         );

  return 1;
}

we get the following error:

$icpc -xMIC-AVX512  main.cpp
main.cpp(14): error: operation not supported for these simd operands
    c=a+b;
       ^

compilation aborted for main.cpp (code 2)

If we uncomment the operator overloading compilation is fine.

If we move to intel 2017 (icpc version 17.0.0 (gcc version 5.4.0 compatibility) we have the same error when operator overload is commented (which seems to be coherent)  BUT also when overload is not commented !

So my questions are:

Why arithmetic with __m512d does not works with intel2016 and intel217 (works perfectly with AVX/AVX2 types)

Why operator overloading does not work with intel2017?

Best regards

T. Guignon

 

 

 

0 Kudos
1 Reply
shaunak_j_
Beginner
266 Views

Hi ,

I can reproduce this issue and looks like moving from your current version to Updated can reduce this error. I am escalating this issue to compiler engineering.

Thanks and Regards,

COFPROG Team.

http://cupofprogramming.blogspot.com

0 Kudos
Reply