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 多核编程 程序和变量是共用的吗



比如,下面程序只有一个main函数,用group连接两个core,并加载程序。

int a;

main()

{

  func ();

    int b;

    if(coreId==0)

        int c;

}

则运行的时候:core0,core1运行同一段内存上的main函数,以及func函数;

                          core0,core1操作a时,操作的是内存上的同一个地址,因为a是全局变量,但是为了保证一致性,需要对core0,core1的cache进行维护;

                         core0,core1操作b时,操作的是各自栈内的局部变量,对应不同的地址。

                       core0栈空间内有c,可以操作c,但是core1不可以。

不知道这样理解对不对。

 

  • 多核有AMP和SMP模式,一般在DSP上都运行AMP模式,即每个核上都是单独的系统,各自的核看出去都是独立的内存空间,每个核各自维护自己的内存,但是代码段和变量等也是可以共享的。

    如果你的这段代码,是分成一模一样的两份,各自运行于两个不同的核上,且变量也定义在每个核自己的内存空间内,那么这两个程序没有任何关联;如果这个变量被定义在核间公共区域内,且在各自的核看出去,这个变量名字相同,物理地址也相同,即相互覆盖,那么由于两个核都在操作这片内存,结果不可预知。

    Br/William

  • 谢谢回复,请问是不是说对于同一个函数,或者全局变量,在cmd文件中映射到各个核的LL2上,这些核访问的空间就是不同的,两个core运行没有关系。但是如果映射到msm上,两个core访问的程序和全局变量,就会处于同一个内存空间。

  • 每个核的L2也是可以通过设置访问权限以及全局地址,被其它核及外设来访问的。

    要访问同一个变量,主要看每个核link文件把这个变量放在哪个物理位置,如果是同一个物理位置,相当于全局共享

    Br

    William.dong@enea.com

  • 麻烦问一下,我把一个共享变量放在MSMCSRAM中,多个核对其进行读写,用信号量进行互斥,但数据没有共享,是什么原因?

    在使用MSMCSRAM进行多核共享时对MSMCSRAM进行配置之类的?