- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
With the latest C++ compiler 14.0 SP1, Update 1 it is now possible to use the Intel compiler to port code from MIC to AVX512.
When starting to port code to AVX512, i noticed that some functionality that was available on MIC could be missing.
For example on MIC i could gather 8 or 16 bit data and upconvert this into an integer, e.g. for signed 16 bit integer data
_mm512_i32extgather_epi32(aIndexVector, aArray, _MM_UPCONV_EPI32_SINT16, _MM_SCALE_2, _MM_HINT_NONE);
When trying to porting this to AVX512 i was not able to achieve exacly the same with the new ISA..
Interestingly, the compiler documentation that comes with the latest SP1 update1 compiler mentions that upconversion is still possible for gather with AVX512 and one can find the follwoing AVX512 intrinsic in the docu
_mm512_i32gather_epi32
extern __m512i __cdecl _mm512_i32gather_epi32(__m512i vindex, void const* base_addr, _MM_UPCONV_EPI32_ENUM upconv, int scale, int hint);
But i can not find a suitable intrinsic for AVX512 that is able to do this in the zmmintrin.h file that works for AVX512.
Is the AVX512 documentation wrong - or the zmmintrin.h file that does not contain such an AVX512 gather instruction that allows upconversion?
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Ok, so in zmmintrin.h there is:
#define _mm512_i32gather_epi32(index, addr, scale) \
_mm512_i32extgather_epi32((index), (addr), _MM_UPCONV_EPI32_NONE, \
(scale), _MM_HINT_NONE)
but what you need is:
#define _mm512_i32gather_epi32(index, addr, scale) \
_mm512_i32extgather_epi32((index), (addr), _MM_UPCONV_EPI32_ENUM, \
(scale), _MM_HINT_NONE)
Have I got this right? If so, I will see if I can find someone to tell me where it is or when it will be available.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
In the latest Intel Compiler documentation for AVX512, the gather intrinsic is described as
__m512i _mm512_i32gather_epi32(__m512i vindex, void const* base_addr, _MM_UPCONV_EPI32_ENUM upconv, int scale, int hint);
but in the zmmintrin.h it occurs only in the form
__m512i _mm512_i32gather_epi32(__m512i vindex, void const* base_addr, int scale);
so without an upconvert and without a memory hint. So the question is what version of gather is correct?
If the zmmintrin.h is correct this would mean that the documentation should be updated, since the upconvert and the memory hint are no longer supported with a gather on AVX512.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page