c语言中对齐指令,c64中的x64内联汇编以对齐指令

我有一个非常热的指令循环,需要在32字节边界上正确对齐,以最大化

Intel’s Instruction Fetcher的有效性.

这个问题特定于英特尔不太老的CPU系列(从Sandy Bridge开始).如果未能正确对齐循环开始,则速度损失高达20%,这绝对太明显了.

这个问题非常罕见,需要一组高度优化的指令才能使指令获取器成为瓶颈.但幸运的是,这不是一个独特的案例.这是一个nice article explaining in details如何检测到这样的问题.

问题是,gcc还是clang会关心这个指令循环.它使得编译这个代码变成了一个产生随机结果的噩梦,这取决于热循环如何“好”地偶然排列.这也意味着修改完全不相关的功能仍然会极大地影响热循环的性能.

已经尝试了几个编译器标志,它们都没有给出令人满意的结果.

[编辑]尝试编译标志的更详细说明:

> -falign-functions = 32:没有影响或负面影响

> -falign-jumps = 32:没有影响

> -falign-loops = 32:当热循环被隔离成一小段测试代码时工作正常.但是在正常构建中,编译标志应用于整个源代码,在这种情况下它是有害的:对齐32字节的所有循环对性能不利.只有非常热门的人才能从中受益.

>还尝试在函数声明中使用__attribute __((optimize(“align-loops = 32”))).不会产生任何影响(生成相同的二进制文件,就好像声明不存在一样).后来gcc支持小组确认要被有效忽略.编辑:@Jester在注释中表明该语句适用于gcc 5.不幸的是,我的开发站主要使用gcc 4.8.4,这更像是一个可移植性的问题,因为我不控制构建过程中使用的最终编译器.

只有使用PGO构建才能可靠地产生预期的性能,但PGO不能被接受为解决方案,因为这段代码将使用自己的构建链集成到其他程序中.

所以,我正在考虑内联汇编.

这将特定于x64指令集,因此不需要可移植性.

如果我的理解是正确的,像NASM这样的汇编允许使用如下的语句:ALIGN 32,它会强制下一条指令在32字节边界上对齐.

由于目标源代码在C中,因此必须包含此语句.例如,像asm(“ALIGN 32”);

(这当然不起作用).

我希望这主要是知道正确的写作指令,而不是更深层次的东西,比如“这是不可能的”.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C64x CSL支持库是一种用于C64x数字信号处理器的软件开发工具。C64x是德州仪器(Texas Instruments)公司推出的一款高性能、低功耗的数字信号处理器。CSL(Chip Support Library)是一种软件开发库,提供了一系列用于C64x的功能模块和接口,帮助开发人员更方便地使用C64x进行软件开发。 C64x CSL支持库包含了多个功能模块,包括硬件抽象层(HAL)、片上总线(On-Chip Bus)、断管理器(Interrupt Manager)、数据管理器(DMA Manager)等。这些模块可以帮助开发人员更好地管理C64x的硬件资源,并提供了一些常用功能的封装和接口供开发人员使用。 其,硬件抽象层(HAL)提供了对C64x硬件资源的抽象和管理,使得开发人员可以更方便地访问和配置硬件资源,如片上存储器、GPIO、定时器等。片上总线(On-Chip Bus)模块提供了对C64x片上总线的访问接口,用于高效地传输数据和指令断管理器(Interrupt Manager)模块用于管理处理器的断,并提供了对断处理的接口。数据管理器(DMA Manager)模块用于管理数据的传输,使用DMA(Direct Memory Access)技术可以提高数据传输效率。 C64x CSL支持库的使用可以大大简化C64x软件开发的过程,并提高开发效率。开发人员只需调用相应的函数接口,而不用关心底层硬件的具体配置和操作。同时,C64x CSL支持库还提供了一些示例代码和文档,帮助开发人员快速上手和理解库的使用方法。 总而言之,C64x CSL支持库是一种为C64x数字信号处理器提供的软件开发工具,通过封装底层硬件资源和提供常用功能的接口,帮助开发人员更方便地开发C64x的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值