首页 > 其他分享 >branchless condition

branchless condition

时间:2023-06-01 19:45:09浏览次数:35  
标签:int r9d edi r8d condition branchless flg

对于branchless的改造有很多
最简单的:

if (a > b) {
  a += b;
}

这种我们其实是可以改写为

a = a > b? a + b : a;

编译器会自动的帮我们编译成branchless的代码:
https://godbolt.org/z/h8rM99fo9

func(int, int):
        lea     eax, [rdi+rsi]
        cmp     edi, esi
        cmovg   edi, eax
        ...

但是二元表达式有一定的局限性,只能同时处理一个变量,对于下面这种还是会生成 jmp 指令的

if (a > b) {
  a += b;
  b = 0;
} else {
  a = 0;
  b += a;
}

改写为:

auto c = a > b? a + b : 0;
auto d = a > b? 0 : a + b;

https://godbolt.org/z/56Yxfaq48

func(int, int):
        lea     r8d, [rdi+rsi]
        xor     r9d, r9d
        cmp     edi, esi
        jle     .L2
        mov     r9d, r8d
        xor     r8d, r8d
.L2:
        mov     esi, r8d
        mov     edi, r9d
        ...

我们可以利用其他方法把这段代码branchless
最简单的办法就是乘法:

auto c = a + b;
auto flg = a > b;
a = flg * c + !flg * 0;
b = 0 * flg + flg * c;

标签:int,r9d,edi,r8d,condition,branchless,flg
From: https://www.cnblogs.com/stdpain/p/17450006.html

相关文章

  • Spring6 探析之@Conditional 注解
    Spring6探析之@Conditional注解介绍我们写业务逻辑时,会用到if-else条件,@Conditional注解可以通过条件判断是否要将Bean注入到IOC容器中,它可以标记在类和方法上,我们先看一下源码吧@Target({ElementType.TYPE,ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME......
  • c++ condition_variable wait notify_one
    #include<chrono>#include<condition_variable>#include<ctime>#include<curl/curl.h>#include<curl/easy.h>#include<fstream>#include<future>#include<iostream>#include<iomanip>#include<m......
  • 使用nacos配置,启动服务时一直报 Error starting ApplicationContext. To display the
    报错日志如下:ErrorstartingApplicationContext.Todisplaytheconditionsreportre-runyourapplicationwith'debug'enabled.-2023-05-0509:46:02.328[TID:N/A]ERROR8236---[main]o.s.b.d.LoggingFailureAnalysisReporter:***********......
  • ConditionObject源码分析
    ConditionObject是AbstractQueuedSynchronizer(AQS)实现的内部类,类图如下: 1、Condition接口ConditionObject实现了Condition接口。先来看看Codition接口。 Codition中主要定义了挂起线程和唤醒线程的接口方法。Condition接口详情如下:1publicinterfaceCon......
  • [Pix2Pix] Image-to-Image Translation with Conditional Adversarial NetWorks
    paper:https://arxiv.org/pdf/1611.07004.pdf[CVPR2017]code:https://github.com/junyanz/pytorch-CycleGAN-and-pix2pixhttps://phillipi.github.io/pix2pix/[official]数据组织:需要成对图像这是加利福利亚大学在CVPR2017上发表的一篇论文,讲的是如何用条件生成对抗......
  • 你还弄不清xxxForCausalLM和xxxForConditionalGeneration吗?
    Part1基本介绍大语言模型目前一发不可收拾,在使用的时候经常会看到transformers库的踪影,其中xxxCausalLM和xxxForConditionalGeneration会经常出现在我们的视野中,接下来我们就来聊聊transformers库中的一些基本任务。这里以三类模型为例:bert(自编码)、gpt(自回归)、bart(编码-解码)首......
  • 猛读论文6 |【CVPR 2022】Camera-Conditioned Stable Feature Generation for Isolate
    用于孤立摄像机监督行人重识别的摄像机条件稳定特征生成动机常规ReID,对于一个ID,在不同摄像头拍摄的图片上提取跨相机视图不变特征而ISCS情况下,无法做到同一个ID采集到不同摄像头图片由于跨相机样本在人体Re-ID模型训练中起着重要作用,而在ISCS设置下不存在此类配对图像,因......
  • cpp condition_variable wait_until unique_mutex time_out
    #include<chrono>#include<condition_variable>#include<ctime>#include<fstream>#include<future>#include<iomanip>#include<iostream>#include<map>#include<mutex>#include<sstream>#in......
  • Spring很常用的@Conditional注解的使用场景和源码解析
    你好,我是刘牌!介绍今天要分享的是Spring的注解@Conditional,@Conditional是一个条件注解,它的作用是判断Bean是否满足条件,如果满足条件,则将Bean注册进IOC中,如果不满足条件,则不进行注册,这个注解在SpringBoot中衍生出很多注解,比如@ConditionalOnProperty,@ConditionalOnBean,@Conditi......
  • java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSuppor
    1.报错截图2.问题原因缺少对应的类3.问题解决<dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version></dependency><......