By: rwessel (rwessel.delete@this.yahoo.com), August 25, 2022 11:10 am
Room: Moderated Discussions
Kevin G (kevin.delete@this.cubitdesigns.com) on August 25, 2022 8:47 am wrote:
> Mark Roulo (nothanks.delete@this.xxx.com) on August 24, 2022 4:25 pm wrote:
> > Kara (karaardalan.delete@this.gmail.com) on August 24, 2022 2:07 pm wrote:
> > >
> > > Since like my second year programming I stopped writing branched code totally,
> > > few tens of thousands lines of code in, I haven't encounter anything that
> > > intrinsically requires speculative branch prediction, like logically.
> > >
> > > But I write only numes.
> > >
> > > Is there any program that can't be written without a branching that can't
> > > be rephrased (literally, all that is is rephrasing) into branchless?
> > >
> > > Mind risc-v don't offer BPU, there's extensions but not in the requirements.
> >
> > How do you write code to do one thing if a condition holds and another thing if the condition doesn't hold?
> >
> > Example:
>
> For something like this, multiplication of the raw boolean and the pointer to the strings to print would
> work. Both "Hello" and "Goodbye" multiplications need to be processes and then summed to create a new pointer
> for the resulting value. This assumes that true is a simple bit of 1 and false is 0. There are three main
> operations using this style vs. two that are actually performed in the if-else statement.
>
> This technique was leveraged heavily for arcane platforms like IBM's Cell whose SPE units had utterly
> poor branching performance but could run through those calculations. Due to the awkward architecture,
> doing more but faster operations was faster in real time than simpler but costly branching.
>
Now why does that sound familiar...? ;-)
I'll add that the technique goes back a really long way. It's basically predication as supported by any vector machine, and was described, I think, by Von Neumann, perhaps in the context of EDVAC.
> Mark Roulo (nothanks.delete@this.xxx.com) on August 24, 2022 4:25 pm wrote:
> > Kara (karaardalan.delete@this.gmail.com) on August 24, 2022 2:07 pm wrote:
> > >
> > > Since like my second year programming I stopped writing branched code totally,
> > > few tens of thousands lines of code in, I haven't encounter anything that
> > > intrinsically requires speculative branch prediction, like logically.
> > >
> > > But I write only numes.
> > >
> > > Is there any program that can't be written without a branching that can't
> > > be rephrased (literally, all that is is rephrasing) into branchless?
> > >
> > > Mind risc-v don't offer BPU, there's extensions but not in the requirements.
> >
> > How do you write code to do one thing if a condition holds and another thing if the condition doesn't hold?
> >
> > Example:
I'll note that the conditional operator (?) is a branch.
> > if (b)
> > printf("Hello");
> > else
> > printf("Goodbye");
> >
>
> For something like this, multiplication of the raw boolean and the pointer to the strings to print would
> work. Both "Hello" and "Goodbye" multiplications need to be processes and then summed to create a new pointer
> for the resulting value. This assumes that true is a simple bit of 1 and false is 0. There are three main
> operations using this style vs. two that are actually performed in the if-else statement.
>
> This technique was leveraged heavily for arcane platforms like IBM's Cell whose SPE units had utterly
> poor branching performance but could run through those calculations. Due to the awkward architecture,
> doing more but faster operations was faster in real time than simpler but costly branching.
>
Now why does that sound familiar...? ;-)
I'll add that the technique goes back a really long way. It's basically predication as supported by any vector machine, and was described, I think, by Von Neumann, perhaps in the context of EDVAC.