Intel® C++ Compiler
Community support and assistance for creating C++ code that runs on platforms based on Intel® processors.
7839 Discussions

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

Steffen_S_1
Beginner
217 Views

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
Anoop_M_Intel
Employee
217 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
Reply