编译器优化禁用对计算浮点加法运算时间的影响

news2024/11/24 5:54:49

编译器优化是现代编译器的重要功能,旨在提升程序的执行效率和性能。然而,在某些特定的测试或精确计算场景中,我们需要禁用这些优化以确保所有计算按预期执行。下面研究在 Keil 编译器中禁用和启用优化对执行多次次浮点除法运算时间的影响。

设计了一个实验:计算a=a+b的值与运算时间,进行1000次重复的加法浮点运算。

部分代码如下:

void float_operations_test(void)
{
     float a = 1.23f;
     float b = 4.56f;
    uint32_t start_time, end_time;

    // 开始定时器
    HAL_TIM_Base_Start(&htim2);
 
//	 printf("其中a=1.23 b=4.56,重复运算,在170Mhz每个时钟周期为: %lu ns\n", 6);
    // 测试加法
    start_time = __HAL_TIM_GET_COUNTER(&htim2);
    for (int i = 0; i < 1000; i++)
    {
        a= a +b;
    }
    end_time = __HAL_TIM_GET_COUNTER(&htim2);
    printf("加法时间: %lu  个时钟周期\n", end_time - start_time);
    printf("加法结果: %f\n", a);
    // 停止定时器
    HAL_TIM_Base_Stop(&htim2);
}

一、浮点数加法的时间

首先,去掉编译器优化,通过DEBUG,查看浮点数加法对应的汇编指令

上面是ARM Cortex-M4处理器的浮点运算指令,分别对应于浮点数加法操作和浮点数传送操作,

第一条指令将S16S17中的浮点数相加,结果存储在S0中,第二条指令将S0中的结果复制回S16中。

在DEBUG里执行这两条汇编指令的时间大约十几ns,只进行一次加法时间更短。

下面我通过另一种方式:串口发送运算前后定时器计数值CNT的差值。

先看对应的汇编指令:

 在DEBUG里执行这五条汇编指令的时间大约八十几ns

串口打印计算一次加法运算的结果如下。

一个时钟周期为1/170MHZ=5.88ns,16个对应94ns,与调试的时间差不多,可以认为在keil debug中单步调试得到的时间有可信度。

 二、编译器优化前后对计算浮点加法运算时间的影响

1.启用优化的结果,1000

分析:这样得到的单次加法时间为8个时钟周期,大约为47ns。这是为什么?通过在keil里单步调试发现执行for循环(对应的汇编指令0x08003E52 1C40 ADDS r0, r0, #1),循环每次需要40ns。

2.启用优化的结果,100

 3.启用优化的结果,100

4.启用优化的结果,1000

分析:编译器可能识别出循环体内的计算模式,并进行循环展开或其他优化,减少了实际执行的指令数量。例如,如果计算结果具有某种重复性,编译器可能会提前计算结果或减少不必要的计算,减少计算时间。

结论:一条浮点数加法指令计算时间大约十几ns。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1865601.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker搭建mongo分片集群

1、mongo分片集群 MongoDB分片集群是一种可扩展的数据库架构&#xff0c;用于处理大量数据和高并发访问。它将数据分成多个分片&#xff0c;并将这些分片分布在多个服务器上&#xff0c;从而实现数据的平衡存储和并行处理 。 通过使用MongoDB的分片集&#xff0c;可以实现数据…

mobaXterm上传文件进度一直为0%

在这里修改了senssion、重启都没有用 最后发现是文件存放的路径中不能有中文&#xff0c;改了之后就成功上传了

Pixea Plus for Mac:图像编辑的极致体验

Pixea Plus for Mac 是一款专为 Mac 用户设计的强大图像编辑软件。凭借其卓越的性能和丰富的功能&#xff0c;它为用户带来了前所未有的图像编辑体验。无论是专业的设计师&#xff0c;还是业余的摄影爱好者&#xff0c;Pixea Plus 都能满足您对于图像编辑的各种需求。 Pixea P…

Segment any Text:优质文本分割是高质量RAG的必由之路

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享&#xff0c;包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

权限 chmod

参考&#xff1a; Linux chmod 命令 | 菜鸟教程 (runoob.com) Linux chmod&#xff08;英文全拼&#xff1a;change mode&#xff09;命令是控制用户对文件的权限的命令 Linux/Unix 的文件调用权限分为三级 : 文件所有者&#xff08;Owner Users&#xff09;用户组&#xff08…

音频数据集1--LJSpeech单人语音

LJ Speech Dataset 版本号: 1.1 , 文件大小: 2.6GB 1.简介 1. 1 内容简介 LJS是一个语音数据集&#xff0c;包含 13,100 个音频片段&#xff0c;内容为Linda Johnson(欧美女性)朗读的 7 本书籍段落(非小说类)。每个片段都提供文本转录&#xff0c;片段长度从 1 到 10 秒不等&…

Linux - 札记 - W10: Warning: Changing a readonly file

Linux - 札记 - W10: Warning: Changing a readonly file 这里写目录标题 一、问题描述1. 现象2. 原因 二、解决方案 一、问题描述 1. 现象 在使用 vim 编辑文件时&#xff08;我这里是要编辑 /root/.ssh/authorized_keys&#xff09;提示&#xff1a;W10: Warning: Changing…

成都晨持绪:抖店橱窗怎么卖货

在数字化浪潮席卷而来的今天&#xff0c;抖音平台凭借其强大的流量优势&#xff0c;为许多商家提供了一个新的销售渠道——抖店橱窗。通过有效地利用抖店橱窗&#xff0c;商家可以吸引更多潜在顾客&#xff0c;增加销售额。 要有效利用抖店橱窗进行销售&#xff0c;首要任务是精…

【曦灵平台】深度体验百度智能云曦灵平台之数字人3.0、声音克隆、直播等功能,AI加持就是不一样,快来一起体验

目录 资产数字人 2D数字人克隆声音克隆 AI卡片更多功能总结推荐文章 资产 可进行人像与声音的定制&#xff0c;让数字人形象和声音成为我们的专属资产&#xff0c;用于后续的内容生产工作 数字人 这里拍摄的视频分辨率和帧率必须要确保是官方要求&#xff0c;这里博主通过第…

【多模态】BEiT v2

链接&#xff1a;https://arxiv.org/pdf/2208.06366 论文&#xff1a;BEIT V2: Masked Image Modeling with Vector-Quantized Visual Tokenizers Introduction Motivation&#xff1a;Masked image modeling (MIM) 任务在自监督表征学习上取得了不错的成绩&#xff0c;但是现…

ONLYOFFICE 8.1版本桌面编辑器测评:超越想象的办公体验!

在当今数字化办公时代&#xff0c;一个功能强大、操作便捷的办公套件对于提高工作效率至关重要。ONLYOFFICE 8.1作为一款备受瞩目的办公软件&#xff0c;凭借其全面的功能、优异的性能和出色的用户体验&#xff0c;为用户带来了超越想象的办公体验。下面&#xff0c;我们将对ON…

程序员学长 | 快速学会一个算法,RNN

本文来源公众号“程序员学长”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;快速学会一个算法&#xff0c;RNN 今天给大家分享一个超强的算法模型&#xff0c;RNN 循环神经网络&#xff08;Recurrent Neural Network, RNN&…

怎么打印加密的pfd文件,有那些方法?

现在人们的保密意识越来越强了,越来越多的人在完成pdf文档后就会对文档进行保护&#xff0c;但有的PDF文档被添加了密码&#xff0c;限制了打印的权限&#xff0c;导致我们想打印PDF文档的时候就提示我们要输入密码。面对这种情况&#xff0c;我们要怎样才能把PDF文档打印出来呢…

atcoder abc 359

A count takahashi 问题: 思路&#xff1a;字符串比较 代码&#xff1a; #include <bits/stdc.h>using namespace std;int main() {int n;cin >> n;int ans 0;for(int i 1; i < n; i ) {string s;cin >> s;if(s[0] T) ans ;}cout << ans;re…

BenchmarkSQL 对 MySQL 测试时请注意隔离级别!

BenchmarkSQL 是一款经典的开源数据库测试工具&#xff0c;内含了TPC-C测试脚本&#xff0c;可支持 Oracle、MySQL、PostgreSQL、SQL Server以及一些国产数据库的基准测试。 作者&#xff1a;李彬&#xff0c;爱可生 DBA 团队成员&#xff0c;负责项目日常问题处理及公司平台问…

机器学习--概念理解

知识点 一、机器学习概述 人工智能 机器学习 深度学习 学习的范围&#xff1a;模式识别、数据挖掘、统计学习、计算机视觉、语音识别、自然语言处理 可以解决的问题&#xff1a;给定数据的预测问题 二、机器学习的类型 监督学习 分类 回归 无监督学习 聚类 降维 强化…

【Java Web】会话管理

目录 一、为什么需要会话管理&#xff1f; 二、会话管理机制 三、Cookie概述 四、HttpSession概述 4.1 HttpSession时效性 一、为什么需要会话管理&#xff1f; HTTP协议在设计之初就是无状态的&#xff0c;所谓无状态就是在浏览器和服务器之间的通信过程中&#xff0c;服务器并…

免费录屏软件哪个好?录屏软件,分享3款免费工具

在日常生活或者工作中&#xff0c;录屏软件已经成为我们的得力助手。无论是教学、演示、娱乐&#xff0c;录屏软件都能为我们带来极大的便利。然而&#xff0c;市面上有些录屏软件的价格却十分的昂贵&#xff0c;让人望而却步。那么市面上到底有没有免费的录屏软件&#xff1f;…

MySQL的jdbc、odbc驱动版本必须和MySQL版本一样吗?

MySQL的版本和JDBC&#xff0c;ODBC驱动版本大体一致就可以 比如说MySQL的版本是8.0.35&#xff0c;您可以用8.0.19版本的JDBC,ODBC。或者8.0.31的版本。 除此之外我也查看了其他资料&#xff0c;这个哥们总结的也不错&#xff0c;我把链接放到这里 MySQL JDBC驱动版本与数据…

电脑可以录屏吗?5个方法,珍藏分享

在数字化时代&#xff0c;电脑的录屏功能已经成为许多人工作和学习的必备工具。录屏可以帮助我们捕捉屏幕上的动态内容&#xff0c;记录下重要的瞬间。所以&#xff0c;录屏是一个非常实用的功能。那么&#xff0c;电脑可以录屏吗&#xff1f;答案是肯定的。本文将为您介绍5种电…