42 static const int BLOCK_SIZE = 8;
60#ifdef ARCANE_USE_AVX512_SCATTERGATHER
64 v0 =
_mm512_set_pd(base[idx[7]],base[idx[6]],base[idx[5]],base[idx[4]],
65 base[idx[3]],base[idx[2]],base[idx[1]],base[idx[0]]);
72#ifdef ARCANE_USE_AVX512_SCATTERGATHER
84 Real operator[](Integer i)
const {
return ((
const Real*)&v0)[i]; }
85 Real& operator[](Integer i) {
return ((
Real*)&v0)[i]; }
88 void set(ARCANE_RESTRICT
Real* base,
const ARCANE_RESTRICT
Int32* idx)
const
90#ifdef ARCANE_USE_AVX512_SCATTERGATHER
91 __m256i idx2 = _mm256_loadu_si256((__m256i*)idx);
92 _mm512_i32scatter_pd(base,idx2,v0, 8);
106 void set(ARCANE_RESTRICT
Real* base,
const Int32IndexType* simd_idx)
const
108 this->set(base,(
const Int32*)simd_idx);
111 void set(ARCANE_RESTRICT
Real* base,
const Int32IndexType& simd_idx)
const
113#ifdef ARCANE_USE_AVX512_SCATTERGATHER
114 _mm512_i32scatter_pd(base,simd_idx.v0,v0, 8);
116 this->set(base,&simd_idx);
121 void set(ARCANE_RESTRICT Real* base)
const
132 inline AVX512SimdReal operator- ()
const
134 return AVX512SimdReal(_mm512_sub_pd(_mm512_setzero_pd(),v0));
138 void operator=(
Real _v);