I have 4 _m256d, how can I find the minimum among all 16 values? How can I know the minimum value come from which __m256d variable? and which element is it? assume part of values are the same in different __m256d variable
I'm trying but it doesn't work:
#include <immintrin.h>
#include <float.h>
int main()
{
// either v1[0] or v3[2] is the answer.
__m256d v1 = _mm256_set_pd(1.0, 2.0, 3.0, 4.0);
__m256d v2 = _mm256_set_pd(5.0, 6.0, 7.0, 8.0);
__m256d v3 = _mm256_set_pd(3.0, 4.0, 1.0, 2.0);
__m256d v4 = _mm256_set_pd(6.0, 5.0, 8.0, 7.0);
__m256d min = _mm256_set1_pd(DBL_MAX);
// Find the minimum among all 16 values
min = _mm256_min_pd(min, v1);
min = _mm256_min_pd(min, v2);
min = _mm256_min_pd(min, v3);
min = _mm256_min_pd(min, v4);
// Get a 4-bit mask of the minimum elements
int mask = _mm256_movemask_pd(_mm256_cmp_pd(min, min, _CMP_EQ_OQ));
// Extract the index of the minimum element
int index = __builtin_ffs(mask) - 1;
// Determine which __m256d variable the minimum value comes from and which element it is
__m256d* v[4] = {&v1, &v2, &v3, &v4};
int v_index = index / 4;
int elem_index = index % 4;
printf("The minimum value is %lf from v%d at element %d\n", min[elem_index], v_index + 1, elem_index);
return 0;
}