std-simd icon indicating copy to clipboard operation
std-simd copied to clipboard

hmin and / or imin

Open dcampora opened this issue 4 years ago • 1 comments

Hi there,

Thanks a lot for your work on std-simd, it's looking very well so far!

I was attempting my first code at using your library. I have previously used Vc, as well as other vectorization libraries. I bumped into the following use-case: I would like to calculate the index of the lowest element in a vector, out of some active elements in a mask. Looking at the following document:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/n4808.pdf

I found that there is hmin, which can accept a const_where_expression, which sort-of does what I want but not quite, since this returns the value of the lowest element, not the index. In order to further fetch the index, I figured one can create yet another mask comparing with the obtained value, and then find the index of that. Ie. see the following pseudo-code:

Testcase

const auto best_scatter = std::experimental::parallelism_v2::hmin(std::experimental::const_where_expression(mask, scatter));
const auto best_mask = best_scatter == scatter;
const auto best_scatter_index = std::experimental::parallelism_v2::find_first_set(best_mask);

With this, I have two questions:

  • I cannot find hmin anywhere in the library. Perhaps I am looking at an outdated documentation?
  • The above code looks cumbersome. Would you suggest a better practice using std-simd?

dcampora avatar Jul 13 '20 11:07 dcampora

As a user, having member functions simd::min_element & simd::max_element instead of hmin and hmax would reduce my cognitive burden. They would give a nod to the std algorithms that return by iterator rather than value.

boblytton avatar Jan 30 '23 13:01 boblytton