TI中文支持网
TI专业的中文技术问题搜集分享网站

当不同的核运行同一个image时如何分配数据到各自的专用L2内存

您好:

我的问题是关于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窗口确认一下是否数组定义的如你所设想的一样。

赞(0)
未经允许不得转载:TI中文支持网 » 当不同的核运行同一个image时如何分配数据到各自的专用L2内存
分享到: 更多 (0)