TI中文支持网
TI专业的中文技术问题搜集分享网站

各位专家:6678多核使用了相同程序,使用CACHE时,程序不同程度跑飞,core3不设置cache时,程序能正常运行.

各位专家,大家好!

请帮忙解答一下,我的情况是这么样。

6678使用4个核,core0~core3;

core0,运行NDK网络程序;

core1~core3,运行处理程序,core1的程序不同;其中core2与core3的程序是同一个程序,通过coreNum实现不同的处理,同时Platform中通过修改L2SRAM的全局地址区分两个核的程序空间,将所有section均映射到L2SRAM.

core0不使用cache,core1~core3使用cache;

4个核的cmd映射为:core0是evm6678的ndk例程,core~core3均通过PLATFORM的L2SRAM映射到自己的LOCAL SRAM地址,比如core1为0x11800000,core2为0x12800000,core3为0x13800000;

现在的问题是:

通过仿真下载调试:

20次下载并同时运行,均正常工作;

烧写到FLASH后的结果:

a,  4个核,core1~core3均把cache设置为0K,即不使用cache,每次4个核都能正常启动并运行;

b,  4个核,core1~core2均把cache设置为32K,core3的cache设置为0K,每次4个核都能正常启动并运行;

c,  4个核,core1~core3均把cache设置为32K,每次4个核都能正常启动但是运行一会有core1~core3有随机的运行几秒就停止的情况出现,脸上仿真器看,停止的core已经abort,每次都出现到相同的位置,到一条死循环的指令:abort() at exitc:109 0x00869e80;

附带:设置成cache 0k的代码

/* Cache */
CACHE_setL1PSize(CACHE_L1_0KCACHE);
CACHE_setL1DSize(CACHE_L1_0KCACHE);
CACHE_setL2Size(CACHE_0KCACHE);
CACHE_invAllL1p(CACHE_WAIT);
CACHE_wbInvAllL1d(CACHE_WAIT);
CSL_XMC_invalidatePrefetchBuffer();
_mfence();
_mfence();

附带:设置成cache 32k的代码

/* Cache */
CACHE_setL1PSize(CACHE_L1_32KCACHE);
CACHE_setL1DSize(CACHE_L1_32KCACHE);
CACHE_setL2Size(CACHE_0KCACHE);
CACHE_invAllL1p(CACHE_WAIT);
CACHE_wbInvAllL1d(CACHE_WAIT);
CSL_XMC_invalidatePrefetchBuffer();
_mfence();
_mfence();

感谢各位专家,分析一下,小弟非常感谢!

xiaodong Li2:

补充:

DSP的内核电压目前为1.0V固定,已试过内核电压改为1.1V与1.1V+VID的方式,结果均一样;

两个一个奇怪的现象是:将core3的程序全部映射到DDR3没有被使用的一段空间里,即程序在DDR3里运行,cache设置如下:

/* Cache */ CACHE_setL1PSize(CACHE_L1_0KCACHE); CACHE_setL1DSize(CACHE_L1_0KCACHE); CACHE_setL2Size(CACHE_32KCACHE); CACHE_invAllL1p(CACHE_WAIT); CACHE_wbInvAllL1d(CACHE_WAIT); CSL_XMC_invalidatePrefetchBuffer(); _mfence(); _mfence();

程序每次上电程序均能从FLASH引导运行,并且也不跑飞,唯一的就是运行速度变慢了。

xiaodong Li2:

请专家分析下:

core2与core3的程序相同,均使用L1D作为CACHE,在使用需要有什么注意的,才能避免异常情况的发生。

Andy Yin1:

回复 xiaodong Li2:

多核共享的代码可以是一份存于共享memory,也可以是每个core各自保存一份存于各自私有的memory,但是每个core的堆栈必须是独立的;如果使能了cache,在多核访问共享数据时存在cache一致性的问题,需要软件去维护cache一致性。

赞(0)
未经允许不得转载:TI中文支持网 » 各位专家:6678多核使用了相同程序,使用CACHE时,程序不同程度跑飞,core3不设置cache时,程序能正常运行.
分享到: 更多 (0)