This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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

您好:

我的问题是关于C6678多核处理器不同核上的专用L2内存分配。请问如果我采用多个核运行同一个image的方法编写程序,程序的框架大概类似在以下帖子给出的方法 www.deyisupport.com/.../2323.aspx

在我的算法中,core0只处理数组A,core1只处理数组B。我想把数组A放在core0的专用L2内存,把数组B放在coreB1的专用L2内存,这样加速数据的存取。但是不知道在C程序中如何定义数组A和数组B,从而把它们放到各自的专用L2内存。求教例程或方法完成上述内存分配。

谢谢

  • 最简单的办法就是对于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上就可以了。

  • 您好!春节快乐,感谢回答。

    受项目限制,只能用一个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];

  • 看起来似乎是可以的,你可以装个CCS,自己写个小程序,通过simulator下载下去,再通过memory窗口确认一下是否数组定义的如你所设想的一样。