我想利用8个核并行协同处理一段共享数据,代码如下:
#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;
}
以上程序在CSS5.0.3上编译,C6678上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;
...
但是程序运行情况是8个核对8份数组a各自进行处理,例如core0对属于core0的数组a的前两个元素进行乘2处理,core1对属于core1的数组a的第3、4个元素进行处理,...。但是我想实现8个核对一个数组a进行协同处理,使数组a每个元素都乘以2,应该怎么修改程序?