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.

多核存储区分配的问题



大家好,

我的环境:C6670, SYS/BIOS v6.33.6.50, IPC v1.24.4.32, XDC v3.23.4.60。

我目前的工程是4个Core用一个同样的工程,一个同样的cfg文件,生成一个同样的.out文件,只是在代码中用DNUM区分了每个Core的处理任务。

遇到的问题:

1. 工程中,每个Core都需要512KB的空间作为SRIO对外的收发缓冲空间。这样,则L2SRAM肯定放不下。

于是我把这个512KB的收发缓冲去load到MSMCSRAM中去了,生成了一个.out加载到4个Core中。

CMD文件中

.Tran_Receive_buffer:	load >> MSMCSRAM

源代码中

#pragma DATA_SECTION (g_l1BBTx, ".Tran_Receive_buffer");
#pragma DATA_SECTION (g_l1BBRcv, ".Tran_Receive_buffer");
#pragma DATA_SECTION (g_dlTxModBuf, ".Tran_Receive_buffer");
#pragma DATA_SECTION (g_ulRcvBuf, ".Tran_Receive_buffer");

生成的.map文件中

0c010000    0c010000    0007b8a0   00000000    rw-
  0c010000    0c010000    0007b8a0   00000000    rw- .Tran_Receive_buffer

那么4个Core在运行时应该同时去操作这一个512KB的MSMCSRAM,可是运行时居然不冲突!感觉不合理,4个Core同时使用MSMCSRAM中的这一块512KB的缓冲区,每个Core的数据不应该会冲突吗?难道是因为目前我的代码并没有完全使用这512KB,只用了其中的10KB?

2. 而每个Core都要512KB,4个Core就要2MB,MSMCSRAM也放不下(MSMCSRAM放了代码段)。

那么,如下把 不同Core的这个512KB的缓冲区load到DDR3的不同区域中呢?是使用4个不同的CMD文件,生成4个不同的.out?有没有更简单的方法?

谢谢!!

  • 1 多核同时操作同一块共享数据memory不会有问题;

    2 像你这种应用,可以定义一个大的数组如array[4][512k],通过DNUM来区分每个core操作不同的数据区域array[DNUM][0]即可,这样的话每个核可以看到所以2M的共享区域,并且每个core操作的逻辑地址是不一样的;如果想每个core只看到各自的512KB空间,只定义一个数组array[512K],此时每个核操作的逻辑地址是一样,可以通过配置MPAX将每个核的array地址映射到不同的物理地址即可。建议你使用第一只方法定义一个array[4][512K]简单,且可满足你的要求。

  • 你好, Andy!

    1. 对于“多核同时操作同一块共享数据memory不会有问题”我还是有点疑问。

    如果某个时刻Core0对这块Memory写数据0x01,Core0待会会读这块Memory。而在Core0读取之前,Core1把这块Memory写了0x02,那Core0岂不是读不到自己预想的结果?


    2. 谢谢!我尝试按照您的方法修改一下。

  • 问题1我的意思是多个核可以同时访问共享memory,但是如果多个核同时读写的共享memory address完全一致,则需要软件来保证顺序以确保数据读写的正确性。

  • 谢谢回复!