您好:
我的问题是关于C6678多核处理器不同核上的专用L2内存分配。请问如果我采用多个核运行同一个image的方法编写程序,程序的框架大概类似在以下帖子给出的方法 http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/2323.aspx
在我的算法中,core0只处理数组A,core1只处理数组B。我想把数组A放在core0的专用L2内存,把数组B放在coreB1的专用L2内存,这样加速数据的存取。但是不知道在C程序中如何定义数组A和数组B,从而把它们放到各自的专用L2内存。求教例程或方法完成上述内存分配。
谢谢
Adam Yao94020:
最简单的办法就是对于core0和core1都定义两个数组A和B,只不过core0只使用到A,core1只使用到B,这样两个core可以使用相同的image,但是L2上的空间有浪费。
如果想只对core0定义A,core1定义B,那么两个core的image就是不同的。在同一份代码中可以类似下面的代码来实现
#ifdef DSP_CORE_0
Uint32 A[ ]
#endif
#ifdef DSP_CORE_1
Uint32 B[ ]
#endif
注意将A和B数组所在的section分配到L2上就可以了。
William Zhang5:
回复 Adam Yao94020:
您好!春节快乐,感谢回答。
受项目限制,只能用一个image。我这几天一直在想这个问题,感觉有一个解决方法,请你看一下。我在cmd文件中用全局物理地址定义core0和core1的LL2,同时两个区映射到这两个地址,然后把数组分别分配到这两个区。现在手头没有工具,不知道行不行,请您看一下。
MEMORY{
/* Local L2, 1MB*/CORE0_LL2_RW: o = 0x10800000 l = 0xBFE00
CORE1_LL2_RW: o = 0x11800000 l = 0xBFE00
}
SECTIONS{
.far:core0_ll2 > CORE0_LL2_RW
.far:core1_ll2 > CORE1_LL2_RW
}
Then in the c program, I declare the array A and array B like below.
#pragma DATA_SECTION(A,".far:core0_ll2")
int A[512];
#pragma DATA_SECTION(B,".far:core1_ll2")
int B[512];
Adam Yao94020:
回复 William Zhang5:
看起来似乎是可以的,你可以装个CCS,自己写个小程序,通过simulator下载下去,再通过memory窗口确认一下是否数组定义的如你所设想的一样。