您好:
C6678 上电后,如何实现8个核共享同一个cmd文件?也就是说.text段放在共享存储器中,8个核运行时都去共享存储器取指令,但是如果这样操作的时候,8个核取指令的同时会产生一个地址冲突!
谢谢!
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.
多核编程的UserGuide:www.ti.com/.../sprab27a.pdf
简单地,也可以:
main()
{
coreID = GetCoreID();//DSP的DNUM寄存器
switch(coreID)
{
case core0:
task_core0(...);
break;
case core1:
task_core1(...);
break;
...
default:
break;
}
}
一个image同时运行在不同核上。
当然可以。8个核可以使用同一个cmd文件,也可以使用不同的cmd文件。如果使用RTSC,可以通过修改Platform及*.cfg文件完成内存空间映射。
针对共享内存控制的详细使用,请参考MSMC的UserGuide
方法一:使用硬件信号量。
硬件信号量的User Guide:www.ti.com/.../sprugs3.pdf
大部分时间,CORE是从各自的L1P CACHE中取指令,所以共享冲突的机会并不会太多,内部总线会有仲裁的
si cheng你好:
只读取内存数据是不会冲突的,系统总线会自动仲裁,只是会有的master先读取和有的后读取的区别。只有写数据时才会出现冲突。你的代码段是只读的,因此不会存在冲突。
如果是需要多个master读写某共享内存,那么建议使用硬件信号量,这样可以进行资源互斥,但是也要注意Cache一致性的影响。
谢谢!
Anna,您好!
您上面的过程应该是8个核同时运行某个代码段,但是它们是各自分开运行的,没有进行数据通讯。我想利用8个核共同来完成某段程序,而且它们的数据是共享的,应该怎么办?
Andy Yin,您好!
差不多是那样的,利用8个核同时处理算法的一段数据的不同部分,8个核只有一个main函数。能否给出详细思路,最好能给个具体的例程,谢谢!
#include<c6x.h>
#include<stdio.h>
int main()
{
int i=0;
int Num=16;
int a[16]={0};
for(i=0;i<Num;i++)
a[i]=i; //对数组赋初值
switch(DNUM)
{
case 0:
for(i=0;i<2;i++)
{
a[i]=a[i]*2;
printf("a[%d]=%d \n",i,a[i]);
}
break;
case 1:
for(i=2;i<4;i++)
{
a[i]=a[i]*2;
printf("a[%d]=%d \n",i,a[i]);
}
break;
case 2:
for(i=4;i<6;i++)
{
a[i]=a[i]*2;
printf("a[%d]=%d \n",i,a[i]);
}
break;
case 3:
for(i=6;i<8;i++)
{
a[i]=a[i]*2;
printf("a[%d]=%d \n",i,a[i]);
}
break;
case 4:
for(i=8;i<10;i++)
{
a[i]=a[i]*2;
printf("a[%d]=%d \n",i,a[i]);
}
break;
case 5:
for(i=10;i<12;i++)
{
a[i]=a[i]*2;
printf("a[%d]=%d \n",i,a[i]);
}
break;
case 6:
for(i=12;i<14;i++)
{
a[i]=a[i]*2;
printf("a[%d]=%d \n",i,a[i]);
}
break;
case 7:
for(i=14;i<16;i++)
{
a[i]=a[i]*2;
printf("a[%d]=%d \n",i,a[i]);
}
break;
default:
break;
}
for(i=0;i<Num;i++)
{
printf("a[%d]=%d \n",i,a[i]);
}
return 0;
}
以上程序在C6678上8个核运行,会发现8个核都运行了上面的程序,其结果如下:
[C66xx_6] a[12]=24;
[C66xx_6] a[13]=26;
[C66xx_6] a[0]=0;
[C66xx_6] a[1]=1;
[C66xx_6] a[2]=2;
. . .
[C66xx_6] a[15]=15;
...
结果是每个核都运行了程序,相当于对数组a有了8份数据的拷贝分别在8个核上处理,只是在switch中作了分支处理而已。
我想实现8个核对一个数组a进行协同处理,使数组a每个元素都乘以2,应该怎么修改程序?
你好
问个问题,
如果是这样编程
多核编程的UserGuide:www.ti.com/.../sprab27a.pdf
简单地,也可以:
main()
{
coreID = GetCoreID();//DSP的DNUM寄存器
switch(coreID)
{
case core0:
task_core0(...);
break;
case core1:
task_core1(...);
break;
...
default:
break;
}
}
一个image同时运行在不同核上。生成一个image文件,在多个core上跑,是不是这个image要下载到多个核(debug的时候下载)?
如果我image写到eeprom里呢,然后从i2c启动,他会把这个image读到八个core里面吗?
如果不可以怎么让八个核都运行这段程序呢?
谢谢!