您好,
请问怎样用QMSS实现核间通信,
1. 我看之前有人说在core0中建立TxQ,在core1中建立RxQ,就可以通信了,那么是不是flow应该指向RxQ,flow也应该是在core1中配置的吧?
2. 在qmInfraMCExampleProject例程中,TxQ 和RxQ都是在core0中建立的,那怎么传输的?
3. accumulator的cfg.channel是指High Priority Channel 吗?那是不是应该和queue相对应?为什么我将cfg.channel设置为1后,无论我的RxQ是多少,都是由core1接 收的?
messiah:
回复 Bruce Chen1:
谢谢,
我还是不太理解为什么将accumulator的cfg.channel设置为1后,都是由core1接收的?
我想再问一些QMSS的基本概念:
1,同号的Tx channel和Rx channel应该是连在一起的吧,就是说我们在建立的时候应该是使用相同number的Rx和Tx channel,比如说Tx channel0和Rx channel0?
2,从Multicore Navigator 的table5-1~table 5-5中,是不是可以认为queue和channel是相关联的,比如说queue 800自动对应channel 0,queue704自动对应channel 0?那是不是将packet放入queue800,将自动传到queue704?
4,flow中的qnum,是指RxQ吗?就是说接收的queue是由flow决定的还是像我上面说的由queue number本身决定的?
5,queue800~queue831为QMSS TxQ,那是不是我们在使用核间传输时,都要用这些queue作为TxQ ?
6,Tx completion queue 的用途是什么?
messiah:
回复 Bruce Chen1:
谢谢,您的回答对我的理解有很大的帮助!
我想再问下如下几个问题:
1,qmInfraMCExampleProject中在core1, core2 和core3中建立的rxFreequeue, txFreequeue和 txCompletionQueue是不是没有用到,就是说可以不用建立的?
2,qmInfraMCExampleProject中是通过每个核都建立了hiPrioList,且每个hiPrioList在L2中的local地址相同,然后各核求出core0的hiPrioList的全局地址,然后从中找到传递的descriptors?那么这是不是都是在core0发送并且接收到packet,并没有通过QMSS将数据从core0传递到其他核,而是通过其他核找到core0中的hiPrioList然后获得packets的?
3,一般从core0发送信息t到core1中,需要怎么建立队列,是否需要在core0中建立TxQ,在core1中建立RxQ?
messiah:
回复 Bruce Chen1:
Bruce Chen,您好!我想再问几个问题:
1,QMSS的例程每次运行后,为什么必须重新launch configuration而不能reset?
2,loopback模式中,Tx descriptor中的SOURCE_TAG_LO的具体作用是什么?跟前面设置的rxFlowCfg.flowIdNum有什么关系或者区别么?
3,6678中QMSS的主要作用是什么,核间通信数据传输的话可以用EMDA,同步的话可以用semaphore等,相对其他的核间通信方式有什么优点?
Bruce Chen1:
回复 messiah:
您好!
1. 你cpu reset, system reset 后,再重新加载下gel.
2.rxFlowCfg.flowIdNum是Rxflow的num
Tx descriptor中的SOURCE_TAG_LO的具体作用: 指示loopback 模式下使用 哪一个 Rxflow number.
3.QMSS包含queue manager,pdsp,pktdma三个部分,主要用于核间数据传输,核间通信,任务管理。
数据传输由PKTDMA完成,核间通信由PDSP产生中断实现通信,
任务管理主要由queue manager完成任务调度,比如说多个任务要用到FFTC加速器,可以将这些任务放到同一个queue里面,当然也可设置优先级。
优点:
1.硬件queue manager的引入可以更好的完成任务调度。
2.配置好QMSS后,只需要执行 push descriptor,即可产生中断给DSP核。无须DSP核的参与。
messiah:
回复 Bruce Chen1:
哦, 那我想用core0不断的依次给另外7个core的L2传输数据,并且在每次传输完成时触发相应core的中断程序,那么,PDSP应该怎么设置,需要设置7个accumulator么,那不得每传一次就得重新配置一次accumulator,就是说当core0给core1传完,然后给core2传时需要重新配置,当再次给core1传时又需要重新配置?
Rxflow是不是也是得设置7个?
有什么例程里体现了queue manager做的任务调度呢?
messiah:
回复 messiah:
Protocol-specific data是用来做什么的,它的值将由谁接收?
Andy Yin1:
回复 messiah:
您好,
首先回答您关于core0给多个核发中断触发的问题:
可以充分使用PDSP提供的reclamation and accumulator功能,具体功能可以先学习Navigator user guide中关于PDSP一节。具体的思路为,配置一个RxQ为reclamation queue由PDSP监视,这样每个push到RxQ的descriptor就会被回收到该descriptor所指定的return queue中;所以如果将return queue配置为accumulator 由PDSP监视就可以产生中断到相应的核。因此结合使用reclamation and accumulator功能就只需要使用一个flow,注意的是对RX FDQ中descriptor的return queue配置为每个核对应的accumulator queue即可。可以结合参考pdk中multicore navigator的例子。
Protocol-specific data俗称PS域,在不同的navigator device中有不同的特殊应用,可以用作透传信息,结合配置descriptor 的ps域,及RX flow就可以将该信息透传到接收侧指定的位置。具体参考flow的配置。