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

C6678 QMSS MultiProc_getNumProcessors()函数问题请教

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) {

      numCores = MultiProc_getNumProcessors();
      DEBUG_PRI("numCores = %d.\n",numCores);
      }
———————–
打印:[C66xx_0] numCores = 2.
请问,我在代码刚开始的时候已经触发了8个核了,但是获取的核为什么只有两个?有其他地方需要配置么?
谢谢

 

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。

万分感谢。

赞(0)
未经允许不得转载:TI中文支持网 » C6678 QMSS MultiProc_getNumProcessors()函数问题请教
分享到: 更多 (0)