HI,
最近在调试C6678 的QMSS八核之间通信,在学习demo代码\pdk_C6678_1_0_0_16\packages\ti\transport\ipc\examples\qmssIpcBenchmark。
代码里通过
MultiProc_getNumProcessors()来获取已经触发的2个核通信,但是我需要触发8个核之间通信,
在调试过程中,我刚开始已经触发了8个核了,但是通过函数去获取核,一直获取到两个(在demo代码中是core0和core1的QMSS通信),
因为函数封装在TI库里,无法看到函数实体,不知道如何实现的。
如下代码和打印语句:
代码:if (numCores == 0) {
chunlei gan:
自己先顶下。
Bruce Chen1:
回复 Bruce Chen1:
您好!
此路径下 C:\Program Files\Texas Instruments\ipc_1_24_00_16\packages\ti\sdo\utils
multiproc.c ,有函数 原型,你可以看一下。
chunlei gan:
回复 Bruce Chen1:
谢谢 Bruce ,这个问题已经解决了。
但是发现一个新的问题,现在八核触发起来后,core0不能和core1以外的其他核通信,感觉demo是core0和core1之间QMSS通信的,应该有相应的代码操作。但是这部分代码尚未找到。代码中修改 if (selfId == X)也未能实现(x=1,2,3,4,5,6,7),应该有其他代码相关。还在寻找相关代码中~
请问Bruce我的理解对么?如果是的话,这部分代码是哪块?谢谢
Bruce Chen1:
回复 chunlei gan:
您好!
的确如楼主所说,这个project 中,核间是loop通信 ,即0->1,1->2 …..
可以参考 measure_latency() 中代码 实现 core0与其他核的通信。
chunlei gan:
回复 Bruce Chen1:
hi ,Bruce
我在开启八核后调试会出现如下错误:
[C66xx_0] tsk0. selfproc=0 nextQueueName (CORE1) openned, nextQueueId=65536
[C66xx_0] tsk0. selfProc=0 calling MessageQ_put(nextQueueName=CORE1). msg=0xc040080
[C66xx_0] ti.sdo.ipc.MessageQ: line 383: assertion failure: A_invalidMsg: Invalid message
[C66xx_0] xdc.runtime.Error.raise: terminating execution
这一部分打印信息也正是在函数measure_latency()中,根据打印信息又去找相应函数在Message.c中
的MessageQ_put()函数,如下:
MessageQ_put(MessageQ_QueueId queueId, MessageQ_Msg msg)
{…
383行:Assert_isTrue((msg != NULL), ti_sdo_ipc_MessageQ_A_invalidMsg);
…
}
从这个语句中判断,它在判断这个Msg是否有效,但这个msg=0xc040080,是在MSMC的地址中。 在.map文件中
未找到此地址。
但是当我只开启core0和core1也是此地址,但是运行正常。
请问这个是什么问题?
chunlei gan:
回复 Bruce Chen1:
HI Bruce,
还想问下“核间通信是loop通信”这句是什么意思?
是这个代码工程用了这个loop通信,还是QMSS就是loop通信的机制?
因为我想要做八个核同时用一个QMSS的region。
Bruce Chen1:
回复 chunlei gan:
您好!
1.仅 在这个 工程中通信方式 是loop的;
2.楼主 测试 是 simulator 还是 evm?
chunlei gan:
回复 Bruce Chen1:
您好,
我是通过仿真器调试的。
1.在调试过程中,发现msg的地址会变化,基本上得出一个问题,通过打印信息看到
tsk0. selfProc=0 calling MessageQ_put(nextQueueName=CORE1). msg=0xc040080 —–(八核的msg地址)
tsk0. selfProc=0 calling MessageQ_put(nextQueueName=CORE1). msg=0xc002a80 —–(core0,core1 msg地址)
而八核的msg地址就会出现如上所说的错误,两核就运行正常,感觉还需要修改部分配置把 ?
请问,您能帮我看下,如果是八核QMSS的话,需要修改哪些配置?
谢谢
chunlei gan:
回复 Bruce Chen1:
HI,Bruce
在工程汇中,函数measure_latency() 是什么作用,阅读代码后,没有明白其中意思,measure_latency()函数被core0和core1都使用,在阅读代码中,感觉core0多做了MessageQ_get()了100次,(循环里面)。感觉逻辑有些不对。
请问这个measure_latency() 这个函数作用是什么?因为在后面的代码中thruputTxRxPairPreallocFullLoad(),core0发送和core1接收都是匹配的。
因为在8核调试中在measure_latency()会报错,而这个错误没理解,请Bruce和其他高手帮我看下八核下如何实现QMSS。
万分感谢。