Community
cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Beginner
26 Views

overloading operators for __mm512 datatypes with ICC >= 2016 not working

Hi,

I noticed, that it is no longer possible to overload the multiplication operator for vector datatypes with a length of 512 bit. While the code below compiled properly ICC 15, it no longer runs on ICC 16 (update 3) or ICC 17 (20160517).

static inline __m512d operator * (const __m512d& a, const __m512d& b) { return _mm512_mul_pd(a,b); }

static inline __m512d foo (const __m512d& a, const __m512d& b) {
	return a * b;
}

error: operation not supported for these simd operands

I assume, that it has something to do with the introduction of those operations for datatypes with length 128 bit and 256 bit (see http://developers-club.com/posts/265565/ ).

Is there any way to circumvent this problem except for

a) changing all occurrences of a*b to either intrinsics or a proper function

b) or introducing a new datatype as a wrapper?

It would also be nice, if either support for vector types of 512 bit length will be added in newer editions of ICC, or if the above way would work again.

 

Greetings,

Steffen

 

0 Kudos
1 Reply
Highlighted
Employee
26 Views

Hi Steffen,

I can reproduce this issue and looks like moving from 16.0 Update 2 to Update 3 introduced this error. I am escalating this issue to compiler engineering.

Thanks and Regards
Anoop

0 Kudos