关于DM8168中移植算法速度慢、效率低的新发现
有不少的朋友,特别是刚刚接触DSP的朋友。基于DVRRDK编写C代码发现执行速度特别慢,我在上面简单的对每一个像素的UV分量赋值=0x80,这样就成了灰度图像。对1080P图像进行操作,发现处理每帧要耗时10-20ms,真是慢的不可思议。
近期将SWOSD的完整代码看了一遍发现了玄机。
主要问题是在DDR中读写数据拖慢了速度。
经測试SWOSD进行一帧D1的叠加仅须要400us(叠加大小大概208*32*3个窗体);
细致分析。其内部使用了基于内部 IALG_DARAM0(双通片上数据存储)的乒乓缓存结构:
Int SWOSD_TI_alloc(const IALG_Params *algParams, IALG_Fxns **pf, IALG_MemRec memTab[])
{
const SWOSD_Params *params = (SWOSD_Params *)algParams; memTab[0].size = sizeof(SWOSD_TI_Obj);
memTab[0].alignment = 0;
memTab[0].space = IALG_DARAM0;
memTab[0].attrs = IALG_PERSIST;
//InA InB Out[2]
memTab[1].size = (params->maxWidth*(2+2+2+2))*2;
memTab[1].alignment = 128;
memTab[1].space = IALG_DARAM0;
memTab[1].attrs = IALG_PERSIST; return (2);
}
此函数为TMS320 Algorithm Standard 即xDAIS中的 algAlloc()函数的实现。其返回一个该算法所需的内存记录表。(详见SPRU360E)
Int SWOSD_TI_initObj(IALG_Handle handle, const IALG_MemRec memTab[],
IALG_Handle p, const IALG_Params *algParams)
{
const SWOSD_Params *params = (SWOSD_Params *)algParams;
SWOSD_TI_Obj *obj = (SWOSD_TI_Obj *)handle; if (params == NULL) {
params = &SWOSD_TI_PARAMS;
} obj->swOsdCtrl.openPrm.maxWidth = params->maxWidth;
obj->swOsdCtrl.openPrm.maxHeight = params->maxHeight; obj->memLineBuf = memTab[1].base; return (SWOSD_SOK);
}
在使用时:
pLineBufA[0] = (Int64*)(swOsdObj->memLineBuf + offset);
offset += width; pLineBufA[1] = (Int64*)(swOsdObj->memLineBuf + offset);
offset += width; pLineBufB[0] = (Int64*)((Int32)swOsdObj->memLineBuf + offset);
offset += width; pLineBufB[1] = (Int64*)((Int32)swOsdObj->memLineBuf + offset);
offset += width; pLineBufOut[0] = (Int64*)((Int32)swOsdObj->memLineBuf + offset);
offset += width; pLineBufOut[1] = (Int64*)((Int32)swOsdObj->memLineBuf + offset);
offset += width;
然后内部将要处理的数据用DMA复制到memLineBuf,并使用乒乓结构:
SWOSD_TI_DMA_Fast2D1D
(
dmaHandle,
SWOSD_DMA_CH_IN_A,
(void *)pInA,
(void *)((UInt32)pLineBufA[0] + 0x30000000),
width,
2,
srcPitch,
width,
srcPitch,
(-width)
);
至于上面的代码片段中目的地址 (void *)((UInt32)pLineBufA[0] + 0x30000000)中为什么在pLineBufA[0] 加了0x30000000还是没有弄明确。请高人指点。
(由于dma是个外设,他看到的地址和dsp看到的地址是不一样的。
之间有个0x30000000的偏移。
L2 SRAM address is 0x108_00000. The L3 address of c674 L2 SRAM address (GEM UMAP0) is 0x408_0000 .The conversion is from 0x108_0000 to 0x408_0000 by adding 0x0300_0000.
DONT USE 0x300_0000 .IT WILL CRASH THE SYSTEM.)
本文眼下仅仅总结出了原因,至于实现正在尝试。
欢迎交流沟通。
转载注明:http://blog.csdn.net/guo8113/article/details/25026777
关于DM8168中移植算法速度慢、效率低的新发现的更多相关文章
- STL中的算法小结
()要运用STL的算法,首先必须包含头文件<algorithm>,某些STL算法用于数值处理,因此被定义于头文件<numeric> ()所有STL算法都被设计用来处理一个或多个 ...
- Akamai在内容分发网络中的算法研究(翻译总结)
作者 | 钱坤 钱坤,腾讯后台开发工程师,从事领域为流媒体CDN相关,参与腾讯TVideo平台开发维护. 原文是<Algorithmic Nuggets in Content Delivery& ...
- JS中的算法与数据结构——排序(Sort)(转)
排序算法(Sort) 引言 我们平时对计算机中存储的数据执行的两种最常见的操作就是排序和查找,对于计算机的排序和查找的研究,自计算机诞生以来就没有停止过.如今又是大数据,云计算的时代,对数据的排序和查 ...
- 提升SQLite数据插入效率低、速度慢的方法
前言 SQLite数据库由于其简单.灵活.轻量.开源,已经被越来越多的被应用到中小型应用中.甚至有人说,SQLite完全可以用来取代c语言中的文件读写操作.因此我最近编写有关遥感数据处理的程序的时候, ...
- JS中的算法与数据结构——排序(Sort)
排序算法(Sort) 引言 我们平时对计算机中存储的数据执行的两种最常见的操作就是排序和查找,对于计算机的排序和查找的研究,自计算机诞生以来就没有停止过.如今又是大数据,云计算的时代,对数据的排序和查 ...
- 提升SQLite数据插入效率低、速度慢的方法(转)
前言 SQLite数据库由于其简单.灵活.轻量.开源,已经被越来越多的被应用到中小型应用中.甚至有人说,SQLite完全可以用来取代C语言中的文件读写操作.因此我最近编写有关遥感数据处理的程序的时候, ...
- Vue中diff算法的理解
Vue中diff算法的理解 diff算法用来计算出Virtual DOM中改变的部分,然后针对该部分进行DOM操作,而不用重新渲染整个页面,渲染整个DOM结构的过程中开销是很大的,需要浏览器对DOM结 ...
- React中diff算法的理解
React中diff算法的理解 diff算法用来计算出Virtual DOM中改变的部分,然后针对该部分进行DOM操作,而不用重新渲染整个页面,渲染整个DOM结构的过程中开销是很大的,需要浏览器对DO ...
- [转载]提升SQLite数据插入效率低、速度慢的方法
转载地址:http://blog.csdn.net/chenguanzhou123/article/details/9376537#,如果有侵犯原创,请留言告知,本人会及时删除. 前言 SQLite数 ...
随机推荐
- selenium3 + python - page_source页面源码
前言: 有时候通过元素的属性的查找页面上的某个元素,可能不太好找,这时候可以从源码中爬出想要的信息.selenium的page_source方法可以获取到页面源码. 本次以博客园为例,先爬取页面源码, ...
- var的变量提升的底层原理是什么?
原理:JS引擎的工作方式是①先解析代码,获取所有被声明的变量:②然后在运行.也就是专业来说是分为预处理和执行两个阶段. 变量提升的定义:所有变量的声明语句都会被提升到代码头部,这就是变量提升. 例如: ...
- C#比较两个日期的大小 .net
using System;using System.Collections; public class MyClass{public static void Main(){DateTime dt1 = ...
- 小程序开发之搭建WebSocket的WSS环境(Apache+WorkerMan框架+PHP)
最近公司的一个IoT项目用到了小程序的WSS协议环境,现在把整个的搭建开发过程分享给大家. 这里我们用的是WorkerMan框架,服务器是CentOS,Web服务器是Apache,开发语言是PHP. ...
- CSS样式优先级和权重问题(部分)
内联样式: <div style="font-size: 12px;">姓名</div> 外部样式: <link rel="styleshe ...
- Android 关于Fragment重叠问题分析和解决
一.问题描述 相信大家在使用Fragment的过程中,肯定碰到过Fragment重叠的问题,重启应用就好了.然而原因是什么呢? 二.原因分析 首先,Android管理Fragment有两种方式,使用a ...
- 在64位WindowsServer2012R2中安装Oracle10g第二版(10.2.0.4.0)-20160106
1.操作系统版本 用于安装数据库的操作系统镜像文件名为:cn_windows_server_2012_r2_vl_with_update_x64_dvd_6052729.iso 安装DataCen ...
- JSP_内置对象_请求转发和请求重定向的区别
请求重定向:客户端行为,response.sendRedirect(),从本质上将等同与两次请求,前一次请求request对象不会保存,地址栏的URL地址会改变. 请求转发:服务器行为,request ...
- 记录:Ubuntu下升级Python从2.x到3.x
一.安装Python3 在Ubuntu中的终端输入:sudo apt-get install python3 提示资源被锁住,可能有另外一个程序在占用此资源. 解决方法:输入以下指令解锁资源 sudo ...
- js:多种方法实现数组去重
面试的时候数组去重要多种方法实现, 只想到一种判断重复删除的方法,而且还没写对.后来大概看了一下网上的方法. 下午想到一个网上没见过的filter方法,于是整理了一下,基于以前看到的思想,然后用了一些 ...