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.

C6678中多个核访问同一地址时值不相同

Other Parts Discussed in Thread: SYSBIOS

TI工程师,您好,

我使用的芯片时C6678,使用四个从核进行数据处理,用一个标志位判断各从核是否执行完一段任务从而开始执行下一任务,现在我遇到的问题是:把share L2上的某个地址对应的那个字节作为一个标志位,每个核处理完自己那部分的数据后,给这个标志加1,但是发现在不同的核上观测到该地址的值不一致;导致每个核都停留在判断标志位的死循环中,我尝试把这个标志位定义在共享内存或DDR中,出现了同样的问题;请问这是为什么呢?急求回复,感谢

  • 请问四个核用的是一个.out文件,还是有各自的.out文件。先到各个核的map文件里看一下这个标志位所在地址是否相同?
  • 您好,感谢回复,四个核用的是同一个.out文件,map文件中这一位的地址在0x11850400
  • 0x11850400这个地址Core1的LL2,不建议直接访问它核的LL2,可以通过SL2及DDR3共享数据。
  • 我有尝试把这个变量放在MSMC以及DDR3中,每个核从同一地址读取出的值都不一样,shine,如果core1想访问core0的L2不是要使用全局地址吗?0x11850400不是全局地址吗?LL2不是0x00800000的这一段吗?
  • 0x11850400是全局地址,访问其它核是需要用全局地址的。

    请问是否有使能cache?如果有使能cache的话,看一下是否是cache一致性引起的?
  • 谢谢shine,我是在sysbios系统下,在platform中划分内存时,空出0x00860000往后的128k作为缓存,在debug界面下,memory browser中有勾选L2 cache,其余程序中没有额外设定,如何判断是否是由cache一致性引起的呢?期待回复
  • shine,我尝试将L1D/L2的cache都关掉,发现数据正常了,是否可以断定是cache的问题?我的从核程序是所有从核共享一个.out文件,在platform中将code memory放在MSMC, Data memory 放在LL2,stack memory 放在LL2,L1D 32 K 缓存,L1P 32K缓存,L2 128K 缓存;这种情况下我需要进行哪些维护?
  • 如果cache关掉正常的话,那应该是cache一致性问题引起的。

    同一个核自身的L1和LL2之间的数据一致性是由硬件自动维护的;不同核之间的L1和L2的一致性需要手动维护。
    cache的原则就是:多核直接操作的共享memory,写之后要write back cache,读之前要invalid cache。cache原理及一致性维护可以看c66 corepac user guide以及下面的多核编程手册。
    6.2 Cache and Prefetch Considerations
    www.ti.com/.../sprab27b.pdf
  • 非常感谢shine,我定义变量v在共享内存0x0c200000这个地址,每个核执行完一段程序后如下等待四个核执行完毕;
    v++;
    Cache_wbAll();
    while(1){
    if(v==4)
    break;
    }
    但是调试过程中发现core1中v=1,core2中v=2;core3中v=3;core4中v=4,也就是cache_wbAll()回写似乎只对其往后core有效,是不是我的程序写的不对?