Oh i understand. Thank you for your detailed and kind reply!! Best regards. On Thursday, September 14, 2023 at 4:02:44 PM UTC+9 dmerc...@google.com wrote:
> Apologies for my `X / (C2 / C1)`, and thanks Marja for pointing it out :) > > > What steps can I take to validate the investment in optimization (cost > of optimization)? I'm curious if there are specific benchmarks you rely on > or if there are alternative methods. > > In general, I'd recommend talking to us before spending months > implementing an optimization that could turn out to not be worth it. > > If you have an optimization ready and you want to benchmark it, you can > look at its impact on JetStream2 and Speedometer2: performance of the > generated code will be correlated to the score of these benchmarks, and the > cost of running the optimization can be obtained by using the --turbo-stats > flag. Depending on what the optimization does, using micro-benchmarks (or > any other benchmark) to prove its usefulness can also be acceptable. > > Best, > Darius > > > > On Thursday, September 14, 2023 at 3:35:10 AM UTC+2 doit_man wrote: > >> I appreciate your helpful responses. >> >> It's evident that implementing optimizations in TurboFan entails careful >> consideration of potential unsafe scenarios. >> >> I now recognize the significance of TurboFan's compilation time. >> >> What steps can I take to validate the investment in optimization (cost of >> optimization)? I'm curious if there are specific benchmarks you rely on or >> if there are alternative methods. >> >> Thank you >> >> On Wednesday, September 13, 2023 at 6:28:30 PM UTC+9 Leszek Swirski wrote: >> >> This (in both cases) is a trivially unsafe transformation though (if >> applied without any range analysis), since you can have: >> >> X = MaxFloat64 >> C1 = 2 >> C2 = 4 >> >> (X*C1)/C2 = (MaxFloat64 * 2) / 4 = Infinity / 4 = Infinity >> X*(C1/C2) = MaxFloat64 * (2 / 4) = MaxFloat64 * 0.5 = whatever half of >> MaxFloat64 is >> >> On Wed, 13 Sept 2023, 10:57 'Marja Hölttä' via v8-dev, < >> v8-...@googlegroups.com> wrote: >> >> > > ```(X * C1) / C2 —> X / (C2 / C1)``` >> > You probably meant "X * (C2 / C1)" instead of "X / (C2 / C1)". >> >> Nah they probably meant just that. (X * 2) / 10 is X / (10 / 2) aka X / >> 5, not X * (10 / 2) aka X * 5. >> >> It would be the same as X * (C1 / C2) though, that's another possible >> simplification (if things don't overflow and so on). >> >> >> >> On Wed, Sep 13, 2023 at 9:43 AM 'dmerc...@google.com' via v8-dev < >> v8-...@googlegroups.com> wrote: >> >> Hi, >> >> In general, LLVM and ahead-of-time compilers have all the time in the >> world to optimize a function, while Turbofan tries to save every >> millisecond it can (it's not quite true: LLVM also tries to compile >> somewhat quickly, but it's orders of magnitude slower that Turbofan). As a >> result, Turbofan does fewer optimizations than LLVM, in particular when >> they have non-linear cost. That being said, Turbofan is not set in stone, >> and we are always happy to add new optimizations, provided that their cost >> can be justified by the improvements in generated code. >> >> > ```(A&B)|(A&C) —> A&(B|C)``` >> Optimizations such as this one are fairly cheap and straight-forward to >> implement. I'm guessing that the reason for their absence is that we didn't >> think about them or didn't see a specific case where they would improve the >> generated code. Feel free to submit patch to add them to >> Turboshaft's MachineOptimizationReducer ( >> https://source.chromium.org/chromium/chromium/src/+/main:v8/src/compiler/turboshaft/machine-optimization-reducer.h >> ). >> >> > ```(X * C1) / C2 —> X / (C2 / C1)``` >> You probably meant "X * (C2 / C1)" instead of "X / (C2 / C1)". Such >> mistakes are a good argument against implementing such optimizations unless >> we see a clear use-case: if they are wrong but almost never used, then they >> might cause random crashes (or security issues) that would be very hard to >> debug. >> Additionally, this simplification could be invalid depending on >> multiplication overflow, integer division and floating point >> approximations, which once again could easily introduce subtle bugs. >> >> > ```A+B --> A|B``` provided that A and B have no overlapping bits set. >> This one as well, I'm not sure we'd really want. First, it's probably >> rare that we know for a fact that 2 values don't have overlapping bits. And >> second, on most architectures that we support, an addition and a bitwise or >> have the same latency and throughput. >> >> Best, >> Darius >> >> >> On Wednesday, September 13, 2023 at 6:51:18 AM UTC+2 doit_man wrote: >> >> Hi v8 developers, >> >> I’m curious about the specific optimizations that TurboFan currently not >> support. >> >> Other ahead-of-time (AOT) compilers perform a wide range of >> optimizations, while TurboFan comparatively has fewer. >> >> >> For instance, the LLVM compiler employs optimization rules such as ```A+B >> --> A|B``` provided that A and B have no overlapping bits set. >> >> Similarly, ```(A&B)|(A&C) —> A&(B|C)``` and ```(X * C1) / C2 —> X / (C2 / >> C1)``` are examples of optimizations present in LLVM but absent in TurboFan. >> >> I think these kinds of rules could enhance TurboFan’s optimization >> capabilities. >> >> I’m interested in understanding whether this absence is due to TurboFan’s >> current state of implementation, inherent limitations of a just-in-time >> (JIT) compiler, or if there are other factors at play. >> >> >> Thanks. >> >> -- >> -- >> 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/9fcd075d-14b8-41f5-a793-7ddee3f4e322n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/v8-dev/9fcd075d-14b8-41f5-a793-7ddee3f4e322n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> >> >> >> -- >> >> Google Germany GmbH >> >> Erika-Mann-Straße 33 >> >> 80636 München >> >> >> Geschäftsführer: Paul Manicle, Liana Sebastian. >> >> Registergericht und -nummer: Hamburg, HRB 86891 >> >> Sitz der Gesellschaft: Hamburg >> >> >> Diese E-Mail ist vertraulich. Falls sie diese fälschlicherweise erhalten >> haben sollten, leiten Sie diese bitte nicht an jemand anderes weiter, >> löschen Sie alle Kopien und Anhänge davon und lassen Sie mich bitte wissen, >> dass die E-Mail an die falsche Person gesendet wurde. >> >> >> >> This e-mail is confidential. If you received this communication by >> mistake, please don't forward it to anyone else, please erase all copies >> and attachments, and please let me know that it has gone to the wrong >> person. >> >> -- >> -- >> 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/CAED6dUCqPdxtE%2BGhbHfOvs5xeSauVZ5R9EXeutOOiZ%2BP4NdMqg%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/v8-dev/CAED6dUCqPdxtE%2BGhbHfOvs5xeSauVZ5R9EXeutOOiZ%2BP4NdMqg%40mail.gmail.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/2c03a763-1cbb-4b4c-acf2-c0ac18f6ea15n%40googlegroups.com.