问题1:配置文件中systemHeap是默认映射到L2SRAM中的,我用malloc动态分配内存时溢出了,C6670中每个核最大的L2SRAM为1MB,不能满足我的要求,我想要把heap映射到DDR3中,该如何映射呢?
问题2:可以把systemHeap映射到共享内存中吗?
问题3:systemHeap映射到DDR3中访问速度是多少?对程序性能有多大影响呢?好像GPU中访问显存的带宽好像有140GB,我想知道6670中访问DDR3、L2SRAM、MSM SRAM他们各自的访问带宽多少呢?
问题4:如果我的应用想通过malloc动态分配部分数据到L2 SRAM,部分数据到MSM SRAM,部分到DDR3该如何配置呢?又该如何动态分配呢?
Wei:
关于问题1、4请参考BIOS手册中的第六章节,关于heapMem, heapBuf, heapMultiBuf的描述和使用方法,
问题2,如果共享内存只被当作当前核的heap,应该是可以的。否则不行
问题3可以参考6678的应用手册Throughput Performance Guide for C66x KeyStone Devices (Rev. A)。
Jerry Liu1:
回复 Wei:
搭车提个问题,BIOS手册中的第六章节,6.8和6.9我都看过了,但是没有找到如何使用CFG文件将一个Heap分配到共享内存的方法,请问我想在cfg文件中静态创建一个HeapMultiBuf ,且将该Heap放到共享内存中,该如何做?谢谢!
Andy Yin1:
回复 Jerry Liu1:
首先需要在cfg文件中创建一个heap,可以指定heap的大小及所在memory位置,然后使用memory_alloc从指定的heap中分配内存。参考sysbios手册dynamic memory allocation一节。
Jerry Liu1:
回复 Andy Yin1:
谢谢Andy的答复!我阅读了您说的Sysbios中关于动态分配内存的那一段介绍,我的做法如下:
在cfg中创建了heap,是HeapMultiBuif类型的Heap,大小也指定了,使用program.sectMap[]指令将该Heap放到共享内存中,但是编译结果显示该Heap被分配的位置是在L2SRAM,没有出现在我希望的位置!