public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "richard.yao at alumni dot stonybrook.edu" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug tree-optimization/109901] Optimization opportunity: ((((a) > (b)) - ((a) < (b))) < 0) -> ((a) < (b)) Date: Sat, 27 May 2023 03:33:39 +0000 [thread overview] Message-ID: <bug-109901-4-LOTrpoefV0@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-109901-4@http.gcc.gnu.org/bugzilla/> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109901 --- Comment #8 from Richard Yao <richard.yao at alumni dot stonybrook.edu> --- Created attachment 55177 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=55177&action=edit Source code for micro-benchmark. Here is an example of how not having this optimization slows us down: https://gcc.godbolt.org/z/nxdrb17G7 custom_binary_search_slow() and custom_binary_search_fast() are the same function. The only difference is that I manually applied the ((((a) > (b)) - ((a) < (b))) <= 0) -> ((a) <= (b)) transformation to see what GCC would generate if it were able to do this transformation. This optimization alone makes binary search ~78% faster on my Ryzen 7 5800X: Benchmark: array size: 1024, runs: 1000, repetitions: 10000, seed: 1685158101, density: 10 Even distribution with 1024 32 bit integers, random access | Name | Items | Hits | Misses | Time | | ---------- | ---------- | ---------- | ---------- | ---------- | | custom_binary_search_slow | 1024 | 983 | 9017 | 0.000313 | | custom_binary_search_fast | 1024 | 983 | 9017 | 0.000176 | I modified the microbenchmark from scandum/binary_search to better suit a workload that I am micro-optimizing: https://github.com/scandum/binary_search In specific, I wanted to test on small arrays, but avoid cache effects contaminating the results. One could easily add the search functions from my modified version into the original to get get numbers for bigger array sizes. I have attached the source code for the modified micro-benchmark. The above run was done after compiling with -O2 -fno-inline. Compiling with just -O2 does not make much difference, since I deleted the code where -fno-inline makes a difference from that file since it was not relevant to this issue.
prev parent reply other threads:[~2023-05-27 3:33 UTC|newest] Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-05-18 0:43 [Bug middle-end/109901] New: " richard.yao at alumni dot stonybrook.edu 2023-05-18 0:56 ` [Bug tree-optimization/109901] " pinskia at gcc dot gnu.org 2023-05-18 1:07 ` pinskia at gcc dot gnu.org 2023-05-18 1:08 ` pinskia at gcc dot gnu.org 2023-05-18 1:11 ` pinskia at gcc dot gnu.org 2023-05-18 1:12 ` pinskia at gcc dot gnu.org 2023-05-18 1:13 ` pinskia at gcc dot gnu.org 2023-05-18 1:43 ` richard.yao at alumni dot stonybrook.edu 2023-05-18 4:12 ` richard.yao at alumni dot stonybrook.edu 2023-05-27 3:33 ` richard.yao at alumni dot stonybrook.edu [this message]
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=bug-109901-4-LOTrpoefV0@http.gcc.gnu.org/bugzilla/ \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).