Hi, I think I've got a reasonable implementation of this, where I'm performing the reduction in machine-optimization-reducer.h. Is there a way of testing turboshaft reducers directly, or will I need to write a mjsunit test?
cheers On Wednesday, June 5, 2024 at 4:34:50 PM UTC+1 Sam Parker-Haynes wrote: > Okay, good!! > > So, although I'm wanting to generate horizontal reduction operations, I'm > currently thinking about lowering these to pairwise instructions, such as > SSE/AVX haddp and Neon faddp. The semantics of the TS op will be of a > recursively pairwise operation so targets should be able to lower them to a > variety of optimised sequences, which does mean we'd be able to use addv > for ints on aarch64. > > Thanks again, > Sam > > On Wednesday, June 5, 2024 at 4:04:36 PM UTC+1 dmerc...@google.com wrote: > >> And one more thing that will be nicer in a Reducer than in the >> instruction selector: you don't have to worry about CanCover :o :o :o >> >> Btw, as far as I can tell, there is no corresponding Intel operations >> for vaddvq (which I guess is what you want to generate), but I think that >> it's still better in a reduce than in the ISEL directly. Maybe add a #ifdef >> V8_TARGET_ARCH_ARM64 around the arm64-specific opcodes that you define. >> >> Cheers, >> Darius >> On Wednesday, June 5, 2024 at 4:56:56 PM UTC+2 Matthias Liedtke wrote: >> >>> Hi, >>> >>> I quickly synced with Darius: >>> 1) In general it makes sense to do the matching on the graph itself >>> (i.e. in a reducer) assuming this is a generic pattern for which there >>> might also be specialized / optimized instructions on other architectures. >>> 2) Intel is working on a re-vectorization pass to replace 128 bit SIMD >>> operations with 256 bit SIMD operations. So, if these optimized "add + >>> shuffle" operations exist on intel as well, there would be a clear benefit >>> in doing it in a reducer that could then potentially run prior to the >>> revectorization (which would require additional modifications to the >>> revectorizer). >>> >>> In general it's advisable to have as little architecture-specific code >>> paths in the reducers as possible, so the operations shouldn't be >>> overfitting to some arm64-only instructions. >>> Still, having some SIMD operations with clear semantics in the graph >>> that only exist on some architectures, is fine. >>> >>> I don't think the overhead of pattern matching on the graph is likely to >>> be more effort or slower than pattern matching during instruction selection. >>> Given the complexity of arm64 and x64 ISel code, I'm happy about >>> anything that isn't added on top of that. :) >>> >>> Cheers, >>> Matthias >>> >>> On Wed, Jun 5, 2024 at 3:59 PM Sam Parker-Haynes <sam.p...@arm.com> >>> wrote: >>> >>>> Hi, >>>> >>>> I'd like to add some pattern matching, for Turboshaft, to recognise add >>>> + shuffle patterns which correspond to a horizontal pairwise reduction. >>>> I've started doing this with wasm::SimdShuffle helpers and then during >>>> arm64 instruction selection, but it feels like the pattern matching should >>>> be done in a generic place too... So, I was thinking about adding more >>>> four >>>> more kinds (I32x4, I64x4, F32x4 and F64x2 PairwiseReduction) >>>> to Simd128UnaryOp and then perform the combining in >>>> machine-optimization-reducer. >>>> >>>> Does this sound reasonable enough..? Or is the overhead of plumbing >>>> this into the TS IR likely going to be significantly more complicated than >>>> backend pattern matching? >>>> >>>> Thanks, >>>> Sam >>>> >>>> -- >>>> -- >>>> v8-dev mailing list >>>> v8-...@googlegroups.com >>>> http://groups.google.com/group/v8-dev >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "v8-dev" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to v8-dev+un...@googlegroups.com. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/v8-dev/2a9c3fcd-ee78-4877-9587-2ccb3b0a59e6n%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/v8-dev/2a9c3fcd-ee78-4877-9587-2ccb3b0a59e6n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- -- v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-dev/c95c86f3-25b8-41da-8ae2-7ecb03c3b54dn%40googlegroups.com.