DSP_TMS320F28377D_算法加速方法3_使用TMU库加速

继上两篇方法

DSP_TMS320F28377D_算法加速方法1_拷贝程序到RAM运行_江湖上都叫我秋博的博客-CSDN博客

DSP_TMS320F28377D_算法加速方法2_添加浮点运算快速补充库rts2800_fpu32_fast_supplement.lib_江湖上都叫我秋博的博客-CSDN博客

之后,本文继续讨论第三种DSP算法加速的方法——TMU库

该方法的加速能力比方法2还强。不过同样也有一个范围的:

 方法2我们简称为FPU加速,本文的方法(方法3)我们简称为TMU加速  FPU加速和TMU加速是两种互斥的方法,就是你用了某一种,就不能用另一种了。 所以你必须有所取舍

1 速度对比

下面我们从速度和精度两方面做一个对比,首先来看速度。(代码贴到最后吧)

TMU相比于FPU在速度上有非常明显的优势,TMU相比于FPU能够加速两倍以上。 (最后10 11 12,都是测试的小数的除法,12的结果是我直接用常数运算,而没有用变量的方式)。 

2 精度对比

精度方面,我用sin(1.9)来做一个对比测试吧。

可以看到精度都要损失,但是FPU和TMU两种方法的精度是一样的。

结论:对于相同的函数,最优的选择就是TMU

3 代码

代码的整体框架本文不赘述,看:DSP_基于TMS320F28377D双核芯片和CCS7.40的编程入门_ccs双核芯片下载_江湖上都叫我秋博的博客-CSDN博客

如何获取代码块的运行时间,本文也不赘述,看: DSP_TMS320F28377D_使用定时器实现<获取代码块运算时间>的功能_江湖上都叫我秋博的博客-CSDN博客

代码我就只贴一下main.c 和 main.h

// main.c
#include <main.h>float64 rt[13];
double s1;
double s2;
void main(void)
{int i;InitSysCtrl();DINT;InitPieCtrl();InitGpio();IER     = 0x0000;IFR     = 0x0000;InitPieVectTable();InitCpuTimers();s1 = sin(1.9);s2 = __sin(1.9);asm ("  ESTOP0");runtime_init();while(1){for(i = 0; i < 13; i++){runtime_start();testfunction(i+1);runtime_stop();rt[i] = runtime;}}}void testfunction(int sel){int i = 0;double s,a,b;a = 1.023;b = 2.312;switch(sel){case 1:for(i = 0; i < 1000; i++){s = sin(a);}break;case 2:for(i = 0; i < 1000; i++){s = __sin(a);}break;case 3:for(i = 0; i < 1000; i++){s = cos(a);}break;case 4:for(i = 0; i < 1000; i++){s = __cos(a);}break;case 5:for(i = 0; i < 1000; i++){s = atan(a);}break;case 6:for(i = 0; i < 1000; i++){s = __atan(a);}break;case 7:for(i = 0; i < 1000; i++){s = atan2(a,b);}break;case 8:for(i = 0; i < 1000; i++){s = __atan2(a,b);}break;case 9:for(i = 0; i < 1000; i++){s = sqrt(a);}break;case 10:for(i = 0; i < 1000; i++){s = __sqrt(a);}break;case 11:for(i = 0; i < 1000; i++){s = a/b;}break;case 12:for(i = 0; i < 1000; i++){s = __divf32(a,b);}break;case 13:for(i = 0; i < 1000; i++){s = 1.023 / 2.312;}break;default :break;}}// main.h
#include <F28x_Project.h>
#include <runtime.h>
#include <math.h>interrupt void CpuTimer0ISR(void);
#pragma CODE_SECTION(testfunction,".TI.ramfunc");void testfunction(int sel);

 算了,还是runtime的也贴上吧

// runtime.c#include <runtime.h>float64 runtime = 0;    // 单位usvoid runtime_init(void){ConfigCpuTimer(&CpuTimer1, 200, 10000000);   // 支持代码块最长运行时常10s
}void runtime_start(void){CpuTimer1Regs.TCR.bit.TRB = 1;  // 周期计时器重装载CpuTimer1Regs.TCR.bit.TSS = 0;  // 开始计数
}void runtime_stop(void){runtime = (float64)(CpuTimer1Regs.PRD.all -  CpuTimer1Regs.TIM.all) * 0.005;    // 等价于 / 200, 单位usCpuTimer1Regs.TCR.bit.TSS = 1;  // 停止计数
}// runtime.h
#ifndef PROGRAM_RUNTIME_RUNTIME_H_
#define PROGRAM_RUNTIME_RUNTIME_H_#include <main.h>extern float64 runtime;
void runtime_init(void);
void runtime_start(void);
void runtime_stop(void);#endif /* PROGRAM_RUNTIME_RUNTIME_H_ */

4 关于是否与方法1叠加加速

答:可以! 亲测可叠加!  

5 中断中是否可用

答:肯定可以!我猜的,我没测😄。 

后续会再推出DSP算法加速的方法与大家探讨。感谢您的阅读,如果您有什么优化方法,欢迎留言分享、收藏点赞

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

砍价活动制作秘籍,打造抢购风潮

砍价活动作为一种吸引用户参与、提高销售量的营销手段&#xff0c;已经成为了电商行业的热门选择。在如今竞争激烈的市场环境下&#xff0c;如何制作出成功的砍价活动&#xff0c;成为了每位电商从业者亟需解决的问题。在本文中&#xff0c;我们将为大家揭秘一种制作成功砍价活…

大数据之hadoop入门

大数据概念 大数据&#xff1a;无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现李和流程优化能力的海量、高增长率和多样化的信息资产。 大的概念是相对来说的&#xff1a;目前来说&#xff0…

教程i.MX8MPlus开发板SPI转CAN操作

飞凌嵌入式OKMX8MP-C核心板有两路原生CAN总线&#xff0c;但用户在开发产品时可能需要用到更多的CAN&#xff0c;这该如何解决呢&#xff1f;今天小编将为大家介绍一种SPI转CAN的方法&#xff0c;供各位工程师小伙伴参考。 说明 OKMX8MP-C核心板有两路原生的SPI总线&#xff0c…

简单了解IPv4编址

目录 一、IPv4地址 二、进制转换 三、有类IPv4 四、无类IPv4 3.1 子网掩码 3.2 地址规划 3.3 VLSM可变长子网掩码 五、私有IPv4地址 六、IPv4报文格式 七、IP地址解析 一、IPv4地址 IPv4地址由“网络位主机位”构成&#xff0c;所谓的网络位就是我们通常所指的网段区…

高中信息技术教资考试模拟卷(22下)

2022 年下半年全国教师资格考试模考卷一 &#xff08;高中信息技术&#xff09; 一、单项选择题&#xff08;本大题共 15 小题&#xff0c;每小题 3 分&#xff0c;共 45 分&#xff09; 1.2006 年 10 月 25 日&#xff0c;深圳警方成功解救出一名被网络骗子孙某…

前端:html实现页面切换、顶部标签栏(可删、可切换,点击左侧超链接出现标签栏)

一、在一个页面&#xff08;不跨页面&#xff09; 效果&#xff1a; 代码 <!DOCTYPE html> <html><head><style>/* 设置标签页外层容器样式 */.tab-container {width: 100%;background-color: #f1f1f1;overflow: hidden;}/* 设置标签页选项卡的样式 …

MySQL索引和查询优化

文章目录 1.Mysql索引2. b- tree 与 b tree3.覆盖索引和回表查询4.查询优化1.Explain 5.优化实战举例**用户搜索****订单查询****分页查询** 1.Mysql索引 MySQL索引是一种用于提高数据库查询效率的数据结构。它可以加快数据检索的速度&#xff0c;减少查询所需的IO操作和计算…

Spring——Spring读取文件

文章目录 1.通过 value 读取比较简单的配置信息2.通过ConfigurationProperties读取并与 bean 绑定3.通过ConfigurationProperties读取并校验4. PropertySource 读取指定 properties 文件5.题外话:Spring加载配置文件的优先级 很多时候我们需要将一些常用的配置信息比如阿里云os…

el-table 单击某一行,该行的前面的多选框显示已勾选

目 录 官网&#xff1a; 1. 单页面 2. table是组件 案例&#xff1a; 官网&#xff1a; 1. 单页面 通过单击获取当前行的数据&#xff0c;然后传给选中显示勾选的方法。 <template><el-tableref"multipleTable":data"tableData"tooltip-eff…

缓存技术(缓存穿透,缓存雪崩,缓存击穿)

大家好 , 我是苏麟 , 今天聊一聊缓存 . 这里需要一些Redis基础 (可以看相关文章等) 本文章资料来自于 : 黑马程序员 如果想要了解更详细的资料去黑马官网查看 前言:什么是缓存? 缓存,就是数据交换的 缓冲区 (称作Cache [ kʃ ] ),俗称的缓存就是缓冲区内的数据,是存贮数据的…

EMQX启用双向SSL/TLS安全连接以及java连接

作为基于现代密码学公钥算法的安全协议&#xff0c;TLS/SSL 能在计算机通讯网络上保证传输安全&#xff0c;EMQX 内置对 TLS/SSL 的支持&#xff0c;包括支持单/双向认证、X.509 证书、负载均衡 SSL 等多种安全认证。你可以为 EMQX 支持的所有协议启用 SSL/TLS&#xff0c;也可…

uni-app开发小程序中遇到的map地图的点聚合以及polygon划分区域问题

写一篇文章来记录以下我在开发小程序地图过程中遇到的两个小坑吧&#xff0c;一个是点聚合&#xff0c;用的是joinCluster这个指令&#xff0c;另一个是polygon在地图上划分多边形的问题&#xff1a; 1.首先说一下点聚合问题&#xff0c;由于之前没有做过小程序地图问题&#…

【Cookie和Session的那些事儿】

&#x1f320;作者&#xff1a;TheMythWS. &#x1f386;专栏&#xff1a;《集合与数据结构》 &#x1f387;座右铭&#xff1a;不走心的努力都是在敷衍自己&#xff0c;让自己所做的选择&#xff0c;熠熠发光。 目录 认识Cookie和Session Cookie Cookie对象的特点 Cookie对…

QTday3(QT实现文件对话框保存操作、实现键盘触发事件【WASD控制小球的移动】)

1.实现文件对话框保存操作 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }void Widget::on_fontBtn_clicked() {//调用QFo…

数据库访问性能优化

目录 IO性能分析数据库性能优化漏斗法则1、减少数据访问&#xff08;减少磁盘访问&#xff09;(1) 正确的创建并使用索引索引生效场景索引失效场景判断索引是否生效--执行计划 2、返回更少数据&#xff08;减少网络传输或磁盘访问&#xff09;(1) 数据分页处理(减少行数)客户端…

shell bash中设置命令set

1 Preface/Foreword set命令用于shell脚本在执行命令时候&#xff0c;遇到异常的处理机制。 2 Usage 2.1 set -e 当执行命令过程中遇到异常&#xff0c;那么就退出脚本&#xff0c;不会往下执行其它命令。 #!/bin/bash #set -eroot GIT_TAG${CI_BUILD_TAG-NOTAG} GIT_REV…

叮!你的 AI安全“秘籍”已送达,请签收

2023年初&#xff0c;全球生成式 AI 产业迎来了爆发式增长&#xff0c;大量AI产品和应用纷纷落地&#xff0c;让用户深度感知AI的魅力。预计到2032年&#xff0c;生成式AI市场的营收规模将从2022年的400亿美元增长至1.3万亿美元。 就在大量用户“尝鲜”生成式 AI 时&#xff0…

——滑动窗口

滑动窗口 所谓滑动窗口&#xff0c;就是不断的调节子序列的起始位置和终止位置&#xff0c;从而得出我们要想的结果。也可以理解为一种双指针的做法。 leetcode76 class Solution {public String minWindow(String s, String t) {char[] schars s.toCharArray();char[] tc…

极氪汽车的云资源治理细探

作者&#xff1a;极氪汽车吴超 前言 2021 年&#xff0c;极氪 001 迅速崭露头角&#xff0c;仅用 110 天便创下了首款车型交付量“最快破万”的纪录。2022 年 11 月&#xff0c;极氪 009 在短短 76 天内便率先完成了首批交付&#xff0c;刷新了中国豪华纯电品牌交付速度的纪录…

设计模式—策略模式

目录 一、定义 二、特点 三、优点 四、缺点 五、实例 六.涉及到的知识点 1、一个类里面有哪些东西&#xff1f; 2、类和实例 什么是类&#xff1f; 什么是实例&#xff1f; 什么是实例化&#xff1f; 3、字段和属性 什么是字段&#xff1f; 属性是什么&#xff1…