기본적으로 AVX2 내장 함수로 이와 동등한 것을 작성하려면 어떻게해야합니까? 여기서 result_in_float
은 __m256
이고 은 short int*
또는 short int[8]
입니다.avx 명령어를 사용하여 float 벡터를 짧은 int로 변환하려면 어떻게해야합니까?
for(i = 0; i < 8; i++)
result[i] = (short int)result_in_float[i];
나는 수레가 __m256i _mm256_cvtps_epi32(__m256 m1)
이 고유 사용하여 32 개 비트 정수로 변환 할 수 있다는 것을 알고 있지만, 어떻게 더 16 개 비트 정수로 이러한 32 개 비트 정수를 변환하는 아무 생각이 없습니다. 그리고 나는 그 값을 (16 비트 정수 형태로) 메모리에 저장하는 것을 원하지 않으며 벡터 명령을 사용하여 그 값을 모두 수행하려고합니다.
인터넷 검색을 통해 _mm256_mask_storeu_epi16
이라는 이름의 내장이 발견되었지만 그 사용법에 대한 예를 찾을 수 없어서 트릭을 수행 할 수 있는지 확실하지 않습니다.
내가 모두 C와 C를 사용 ++. 그리고 이러한 내장 함수는 둘 중 하나에서 호출 할 수 있습니다. 그래서, 그것이 바로 그 이유입니다. – pythonic
적절한 바이트 선택으로 vpshufb를 사용한 다음 상위 128 비트 레인에서 하위로 값을 가져 오는 임의의 셔플을 사용합니다. –
오버 플로우를 감싸는 대신에 포화 시키면 괜찮습니까? (int에서 short로, 즉 float에서 int step으로)? – harold