mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 05:54:32 +00:00 
			
		
		
		
	Lots of changes required to compile for MIC under ICPC
This commit is contained in:
		@@ -143,10 +143,10 @@ namespace Grid {
 | 
			
		||||
	     *                } 
 | 
			
		||||
             */
 | 
			
		||||
            zvec vzero,ymm0,ymm1,real,imag;
 | 
			
		||||
            vzero =  _mm512_setzero();
 | 
			
		||||
            vzero =(zvec)_mm512_setzero();
 | 
			
		||||
            ymm0 =  _mm512_swizzle_pd(a.v, _MM_SWIZ_REG_CDAB); // 
 | 
			
		||||
            real =  _mm512_mask_or_epi64(a.v, 0xAAAA,vzero, ymm0);
 | 
			
		||||
            imag =  _mm512_mask_sub_pd(a.v, 0x5555,vzero, ymm0);
 | 
			
		||||
            real =(zvec)_mm512_mask_or_epi64((__m512i)a.v, 0xAA,(__m512i)vzero,(__m512i) ymm0);
 | 
			
		||||
            imag =  _mm512_mask_sub_pd(a.v, 0x55,vzero, ymm0);
 | 
			
		||||
            ymm1 =  _mm512_mul_pd(real, b.v);
 | 
			
		||||
            ymm0 =  _mm512_swizzle_pd(b.v, _MM_SWIZ_REG_CDAB); // OK
 | 
			
		||||
            ret.v=  _mm512_fmadd_pd(ymm0,imag,ymm1);
 | 
			
		||||
@@ -250,7 +250,8 @@ friend inline void vstore(const vComplexD &ret, ComplexD *a){
 | 
			
		||||
	  _mm_stream_pd((double *)&out.v,in.v);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef AVX512
 | 
			
		||||
	  _mm512_stream_pd((double *)&out.v,in.v);
 | 
			
		||||
	  _mm512_storenrngo_pd((double *)&out.v,in.v);
 | 
			
		||||
	  //	  _mm512_stream_pd((double *)&out.v,in.v);
 | 
			
		||||
	  //Note v has a3 a2 a1 a0
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef QPX
 | 
			
		||||
@@ -277,7 +278,7 @@ friend inline void vstore(const vComplexD &ret, ComplexD *a){
 | 
			
		||||
	    ret.v    = _mm_shuffle_pd(tmp,tmp,0x1);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef AVX512
 | 
			
		||||
	    ret.v = _mm512_mask_sub_pd(in.v, 0xaaaa,ret.v, in.v);             
 | 
			
		||||
	    ret.v = _mm512_mask_sub_pd(in.v, 0xaa,ret.v, in.v);             
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef QPX
 | 
			
		||||
	     assert(0);
 | 
			
		||||
@@ -297,7 +298,7 @@ friend inline void vstore(const vComplexD &ret, ComplexD *a){
 | 
			
		||||
          ret.v    =_mm_shuffle_pd(tmp.v,tmp.v,0x1);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef AVX512
 | 
			
		||||
          ret.v = _mm512_mask_sub_pd(in.v,0xaaaa,ret.v,in.v); // real -imag 
 | 
			
		||||
          ret.v = _mm512_mask_sub_pd(in.v,0xaa,ret.v,in.v); // real -imag 
 | 
			
		||||
	  ret.v = _mm512_swizzle_pd(ret.v, _MM_SWIZ_REG_CDAB);// OK
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef QPX
 | 
			
		||||
@@ -319,7 +320,7 @@ friend inline void vstore(const vComplexD &ret, ComplexD *a){
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef AVX512
 | 
			
		||||
          tmp.v    = _mm512_swizzle_pd(in.v, _MM_SWIZ_REG_CDAB);// OK
 | 
			
		||||
	  ret.v    = _mm512_mask_sub_pd(tmp.v,0xaaaa,ret.v,tmp.v); // real -imag 
 | 
			
		||||
	  ret.v    = _mm512_mask_sub_pd(tmp.v,0xaa,ret.v,tmp.v); // real -imag 
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef QPX
 | 
			
		||||
            assert(0);
 | 
			
		||||
@@ -337,7 +338,7 @@ friend inline void vstore(const vComplexD &ret, ComplexD *a){
 | 
			
		||||
	 return ComplexD(c_[0]+c_[2],c_[1]+c_[3]);
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef AVX512
 | 
			
		||||
            return ComplexD(_mm512_mask_reduce_add_pd(0x5555, in.v),_mm512_mask_reduce_add_pd(0xAAAA, in.v));
 | 
			
		||||
            return ComplexD(_mm512_mask_reduce_add_pd(0x55, in.v),_mm512_mask_reduce_add_pd(0xAA, in.v));
 | 
			
		||||
#endif 
 | 
			
		||||
#ifdef QPX
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -133,7 +133,7 @@ namespace Grid {
 | 
			
		||||
            cvec vzero,ymm0,ymm1,real, imag;
 | 
			
		||||
            vzero = _mm512_setzero();
 | 
			
		||||
            ymm0  = _mm512_swizzle_ps(a.v, _MM_SWIZ_REG_CDAB); // 
 | 
			
		||||
            real  = _mm512_mask_or_epi32(a.v, 0xAAAA,vzero, ymm0);
 | 
			
		||||
            real  = (__m512)_mm512_mask_or_epi32((__m512i)a.v, 0xAAAA,(__m512i)vzero,(__m512i)ymm0);
 | 
			
		||||
            imag  = _mm512_mask_sub_ps(a.v, 0x5555,vzero, ymm0);
 | 
			
		||||
            ymm1  = _mm512_mul_ps(real, b.v);
 | 
			
		||||
            ymm0  = _mm512_swizzle_ps(b.v, _MM_SWIZ_REG_CDAB); // OK
 | 
			
		||||
@@ -199,7 +199,8 @@ namespace Grid {
 | 
			
		||||
	  _mm_stream_ps((float *)&out.v,in.v);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef AVX512
 | 
			
		||||
	  _mm512_stream_ps((float *)&out.v,in.v);
 | 
			
		||||
	  _mm512_storenrngo_ps((float *)&out.v,in.v);
 | 
			
		||||
  //	  _mm512_stream_ps((float *)&out.v,in.v);
 | 
			
		||||
	  //Note v has a3 a2 a1 a0
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef QPX
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,10 @@
 | 
			
		||||
 | 
			
		||||
namespace Grid {
 | 
			
		||||
 | 
			
		||||
#define _mm256_set_m128i(hi,lo) _mm256_insertf128_si256(_mm256_castsi128_si256(lo),(hi),1)
 | 
			
		||||
// _mm256_set_m128i(hi,lo); // not defined in all versions of immintrin.h
 | 
			
		||||
#ifndef _mm256_set_m128i
 | 
			
		||||
#define _mm256_set_m128i(hi,lo) _mm256_insertf128_si256(_mm256_castsi128_si256(lo),(hi),1)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  typedef uint32_t Integer;
 | 
			
		||||
 | 
			
		||||
@@ -110,7 +112,8 @@ namespace Grid {
 | 
			
		||||
            ret.v = _mm_mul_epi32(a.v,b.v);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef AVX512
 | 
			
		||||
            ret.v = _mm512_mul_epi32(a.v,b.v);
 | 
			
		||||
	    //            ret.v = _mm512_mul_epi32(a.v,b.v);
 | 
			
		||||
	    ret.v = _mm512_mullo_epi32(a.v,b.v);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef QPX
 | 
			
		||||
            // Implement as array of ints is only option
 | 
			
		||||
 
 | 
			
		||||
@@ -184,7 +184,7 @@ namespace Grid {
 | 
			
		||||
	  _mm_stream_pd((double *)&out.v,in.v);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef AVX512
 | 
			
		||||
	  _mm512_stream_pd((double *)&out.v,in.v);
 | 
			
		||||
	  _mm512_storenrngo_pd((double *)&out.v,in.v);
 | 
			
		||||
	  //Note v has a3 a2 a1 a0
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef QPX
 | 
			
		||||
 
 | 
			
		||||
@@ -216,7 +216,8 @@ friend inline void vstore(const vRealF &ret, float *a){
 | 
			
		||||
	  _mm_stream_ps((float *)&out.v,in.v);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef AVX512
 | 
			
		||||
	  _mm512_stream_ps((float *)&out.v,in.v);
 | 
			
		||||
	  _mm512_storenrngo_ps((float *)&out.v,in.v);
 | 
			
		||||
	  //	  _mm512_stream_ps((float *)&out.v,in.v);
 | 
			
		||||
	  //Note v has a3 a2 a1 a0
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef QPX
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user