TI工程师老师,您好!
我在使用6678的OMP功能时遇到了一些问题,请帮忙解答一下!
我定义了两个变量,一个是accum数组另一个是array数组,其中accum定义在main函数外,如下所示:
#pragma DATA_SECTION(accum, ".testimage")
Uint16 accum [m*n];
.testimage对应外部DDR3的0x81000000地址段,该段可以进行cache。
array定义在main函数内,如下所示:
Uint16 array[10];
在main函数中启用omp功能,对array和accum数组进行赋值操作,并打印输出:
#pragma omp parallel for private(k) shared(array)
for ( k=0; k < 10; k++)
{
array[k]=k * 2;
}
for ( k=0; k < 10; k++)
{
printf("array[%d]=%d\n", k, array[k]);
}
#pragma omp parallel for private(k) shared(accum)
for ( k=0; k < 10; k++)
{
accum[k]=k;
}
for ( k=0; k < 10; k++)
{
printf("accum[%d]=%d\n", k, accum[k]);
}
输出结果是这样的:
array[0]=0
array[1]=2
array[2]=4
array[3]=6
array[4]=8
array[5]=10
array[6]=12
array[7]=14
array[8]=16
array[9]=18
accum[0]=0
accum[1]=1
accum[2]=0
accum[3]=0
accum[4]=0
accum[5]=0
accum[6]=0
accum[7]=0
accum[8]=0
accum[9]=0
array正常赋值了,但是accum只给前两个地址赋了值,后面的并没有赋值,不知为何?
victorlzm:
好失望,居然还没有回复!
xinxin lai:
回复 victorlzm:
你用的是几个核
victorlzm:
回复 xinxin lai:
7个
Zhan Xiang:
把accum的地址放到非cache区呢,我印象中omp并不能生成cache 一致性维护代码