软件平台:CCS5.1
硬件平台:C6678EVM开发板
数据类型:复数float,实部虚部相邻存储,数据存储在DDR3中
实验结果:
1.转置1024*1024的矩阵运行时间为418109.832000 us
2.转置512*512的矩阵运行时间为56153.820000 us
现把工程文件上传,请大神下载运行,帮忙分析以下问题原因以及解决办法?
程序子函数功能介绍:
1.实现把存储在DDR3中的一个矩阵进行转置
2.读取DDR3中矩阵的一行
3.读取DDR3中矩阵的一列
4.把一组数据作为矩阵的一列存储在DDR中
5..把一组数据作为矩阵的一行存储在DDR中
测试结果:
[C66xx_0] Initialize main PLL = x10/1
[C66xx_0] Initialize DDR PLL = x20/1
[C66xx_0] configure DDR at 666 MHz
[C66xx_0] 矩阵转置 1024 * 1024 复浮点数, From 0x81000000 To 0x90000000
[C66xx_0] , consumes 418109.832000 us , The cycles of average point is 398.740601
[C66xx_0] 读取矩阵中的一行: 1024 复浮点数, From 0x81000000 To 0x80f00000
[C66xx_0] , consumes 2.604000 us , The cycles of average point is 2.542969
[C66xx_0] 读取矩阵中的一行: 1024 复浮点数, From 0x90000000 To 0x 820000
[C66xx_0] , consumes 13.428000 us , The cycles of average point is 13.113281
[C66xx_0] 读取矩阵的一列: 1024 复浮点数, From 0x81000000 To 0x c000200
[C66xx_0] , consumes 9.534000 us , The cycles of average point is 9.310547
[C66xx_0] 存储一行连续 1024 复浮点数, From 0x c000200 To 0x80e00000
[C66xx_0] , consumes 1.020000 us , The cycles of average point is 0.996094
[C66xx_0] 存储一列数据 1024 复浮点数, From 0x c000200 To 0x80d00000
[C66xx_0] , consumes 9.467000 us , The cycles of average point is 9.245117
Andy Yin1:
看你是已经配置好了DDR及Core 分别工作在1333MHz及1GHz,是吧?
你这种在DDR上直接操作的方法效率会很低,你的应用中需要直接先转置在处理么,如果是的话建议使用EDMA。
Jack Dong:
回复 Andy Yin1:
你好,Andy Yin1 ,谢谢你的回答,我转置用的就是EDMA,采取是EDMA0的TC0进行传输,麻烦你能不能看一下我的程序,运行一下看看有什么问题?我觉得还是DDR访问的问题,是不是BANK或者行间的访问冲突太多了?
Andy Yin1:
回复 Jack Dong:
你需要先完成所有的转置再统一处理么,可否将转置的结果搬到LL2做处理,处理完后再根据需要搬到相应的memory,这样EDMA的读写速率会提高。
Jack Dong:
回复 Andy Yin1:
1.C66XX的内联函数定义在哪个文件中?有没有相关的文档对每个内联函数做详细的功能解释说明?
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/31465.aspx
2.c6000的profile是不是只能用于软件仿真(simulator)无法用于开发板运行程序时?
http://www.deyisupport.com/question_answer/dsp_arm/c6000_dsp/f/32/t/31468.aspx
3.touch函数在哪个头文件中声明的?CCS5.1 中无法搜到?
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/31462.aspx