ThreadsX.jl icon indicating copy to clipboard operation
ThreadsX.jl copied to clipboard

Support for argmin, argmax?

Open pitsianis opened this issue 4 years ago • 2 comments

As the title says, is there a way to support ThreadsX.argmin and ThreadsX.argmax? Sorry I am too new with Julia to be able to help.

The way I see it is to define the argmax reduction

oneargmax((mxi,mx),(i,ai)) = (mx<ai) ? (i,ai) : (mxi,mx)

# but I do not know how to define the generic initial value for the foldl/reduce  in ThreadsX
myargmax(f, itr; init=(nothing,-1)) = ThreadsX.mapreduce(identity, oneargmax, zip(itr,Iterators.map(f,itr)); simd = Val(true), init)

pitsianis avatar Nov 29 '21 17:11 pitsianis

I think I didn't implement them since there was no argmax(f, xs) etc. in Base before Julia 1.7. Now that we already have 1.7-rc, I think it's safe to implement them here.

I think your function is a useful implementation, but, to nitpick, we need to use isless instead of < for Base-compatibility.

tkf avatar Nov 30 '21 01:11 tkf

You are not nitpicking, you are informing. I have resolved my need for this with explicit initial values and I am getting great performance from an old Xeon Phi with 256 threads

pitsianis avatar Nov 30 '21 11:11 pitsianis