설명서에 따르면 AVX-512
명령어 세트의 gcc 4.9
에서 지원되지만 gcc 4.8
이 있습니다. 우리가있는 경우 네, 말, 문서를 통해보고, 이제AVX-512 마스크 시뮬레이션 지침
__mm128i sum = _mm_add_epi16(sum, _mm_cvtepu8_epi16(*(__m128i *) &mem));
: 저는 현재 메모리 블록 (가, 256 바이트로 보장 그래서 오버 플로우 걱정을)를 합산이 같은 코드를 남은 바이트, 내가 사용할 수 있습니다
__mm128i sum = _mm_add_epi16(sum,
_mm_mask_cvtepu8_epi16(_mm_set1_epi16(0),
(__mmask8)_mm_set_epi16(0,0,0,0,1,1,1,1),
*(__m128i *) &mem));
이
그러나, _mm_mask_cvtepu8_epi16
이다 (참고 ... __mmask8
의 종류는 내가 찾을 수 있습니다 어디서나 문서화하지 않는 것, 그래서 나는 추측하고있다) AVX-512
지시 사항, 그래서 거기에 duplic하는 방법입니다 먹은거야? 나는 시도 : 그냥 직접 for (int i = 0; i < remaining_bytes; i++) sum += mem[i];
더 나은 성능을 준 있도록
mm_mullo_epi16(_mm_set_epi16(0,0,0,0,1,1,1,1),
_mm_cvtepu8_epi16(*(__m128i *) &mem));
그러나 캐시 매점이 있었다. 귀하의 예제 문제를 들어
당신이 뭘하고 있는지 분명하지 않습니다. AVX512 하드웨어를 가지고 있지만 지원할 컴파일러가 없습니까? 128b (예 :'_mm_mask_cvtepu8_epi16') 및 256b 마스크 작업에는 KNL에없는'AVX-512VL '이 필요하지 않습니다. SSE 전용 솔루션이 필요하십니까? –
for (int i = 0; i
@ Zboson, 예,이 시점에서 컴파일러를 쉽게 업그레이드 할 수 없습니다.특히 간단한 for 루프에 대해서는 아무런 문제가 없습니다 만 실제 루프 몸체는 단지 합계보다 조금 복잡하기 때문에 더 좋은 방법이 있는지 궁금해했습니다. 저는 원이 있고 그 사이의 상대적인 무게를 계산하고 있습니다. (왼쪽 및 오른쪽) 및 (위 및 아래) 반쪽. –