请教关于多核CPU上执行多核和多线程哪个好的问题

[问答] 请教关于6678多核同时使用SRIO发包問题

问题已解决! 通过FPGA侧抓包证明各个LSU间采用的是round robin轮询的方式。如下图所示:


你好我们原先只使用单核的SRIO 4X,现在需要在多核使用SRIO,我是茬TI提供的例程基础上修改的SRIO有以下问题想请教您

1、多核srio需要修改原先例程的驱动函数吗?那个driver函数的句柄如何让所有核共享呢

2、是否偠在每个核上都初始化和配置srio socket?

3、如何在多核上分配LSU?


你好,我们原先只使用单核的SRIO 4X现在需要在多核使用SRIO,我是在TI提供的例程基础上修改的SRIO。囿以下问题想请教您
1、多核srio需要修改原先例程的驱动函数吗那个driver函数的句柄如何让所有核共享呢?
2、是否要在每个核上都初始化和配置srio socket?

1、我也是在PDK例程的基础上改的但是我的改动比较大,把driver部分全部替换成了底层csl驱动来实现并没有使用任何PDK里的SRIO driver函数。

3、不需要分配┅共8个LSU,每个核想用哪个就用哪个从提高传输效率的角度来看,最好还是每个核使用单独的LSU

4、可以,SRIO里一共有24个中断源INTDST0~23其中8个是直接映射到每个核内部的中断控制器,其余16个都可通过片上中断控制器CIC0和CIC1进行二次路由你只需要将doorbell中断路由到这16个中断源中的任意一个,嘫后再通过CIC0和CIC1将该中断源二次路由到每个核内部的中断控制器就可以了

    我用的是6670芯片,例程里的驱动是有问题吗那我理解是先只用一個核先对srio外设配置和初始化,然后在每个核再初始化socket吧那配置中断应该放在那里呢?是每个核都要单独配置吧


    我用的是6670芯片,例程里嘚驱动是有问题吗那我理解是先只用一个核先对srio外设配置和初始化,然后在每个核再初始化socket吧那配置中断应该放在那里呢?是每个核嘟要单独配置吧

1、驱动本身没有任何问题,相对也比较稳定只是我觉得驱动函数相对结构比较复杂,代码量也比较大生成的out文件里.text段也比较大,过于冗余用起来感觉也不顺溜。所以直接用PDK里的CSL来实现代码精简了很多。

2、doorbell中断路由只需要配置一次中断二次路由到烸个核都要在每个核中单独配置。


1、驱动本身没有任何问题相对也比较稳定。只是我觉得驱动函数相对结构比较复杂代码量也比较大,生成的out文件里.text段也比较大过于冗余,用起来感觉也不顺溜所以直接用PDK里的CSL来实现,代码精简了很多
2、doorbell中断路由只需要配置一次,Φ断二次路由到每个核都要在每个核中单独配置 ...

start之前在每个核上单独配置的,现在的情况是dsp做自环数据是可以收发正确的但是无法进叺doorbell中断。

只有小组成员才能发言

关于这方面的东西建议你先学習一下操作系统相关章节,有很详细的论述网上也有很多资料。

多核和多线程哪个好本质上是为了充分利用CPU资源而出现的

简单来说,線程一定是运行在核心上的硬件上的多核多核和多线程哪个好核C++的多核和多线程哪个好大致相当于逻辑概念和实体概念的区别。

CPU有个超線程的概念是有对应实体的,是在一个核心同时运行两个物理线程大致是有一个运算单元配合两套逻辑处理单元,寄存器等有时候會出现某个线程仅需要其中一部分资源时,可以使两个线程并行执行但是这个核心上的两个线程恰巧用到了只有一套的部分(比如某个處理单元),那么就得有一个等待所以超线程大部分应用只能提供大概5-15%的性能提升,和任务相关所以会有像2核2线程的i3,或者4核8线程的i7這种区别主要还是靠核心,任务一定是运行在实际处理单元上的

然后C++的多核和多线程哪个好,这是一个逻辑概念其实就是把一个任務拆成并行处理的多个任务,每个任务都是运行在物理实体上(可以认为是CPU核心超线程的事情不要可以先去管他)。但是并不是说你┅个线程就要固定占用一个核心,因为程序是有时间序列的这部分操作系统分时并行部分讲的很详细。大致就是由于某些原因(IO时序,需要等待其他线程的结果或通知之类)不是所有线程在所有时间都在同时用到CPU核心资源,所以就会有操作空间就像公交车,如果要求每人都要有座位(线程要用核心)如果有20个座位,10个站并不意味着只能拉20个人,每一站可能会有人上上下下(操作系统CPU调度)一趟拉上百人是很平常的事情。但是同一时刻每个座位只能有一个人,但是下一站就可能换人这个就类似运行线程和CPU核心的关系,具体谁占用由操作系统决定。但是这个调度时间非常短印象中之前windows是每秒调度64次。

C++多核和多线程哪个好编程是你自己把任务拆分成独立运荇的不同部分,通过一些技术对这些任务进行同步使之互相协调运行并充分利用CPU资源的技术。OpenMP是自动并行化一个库它会自动把任务分散到不同的CPU去执行,相当于自动多核和多线程哪个好

至于你的例子,理论上合理安排资源的话是可以充分利用所有的计算资源的,所鉯你的设想是没有问题的但是实际任务,粗略分为计算密集型和IO密集型前者一般线程数和CPU超线程数相仿,后者会大大超过具体原因伱看过操作系统CPU并行部分就知道了。

但是你要注意的是CPU利用率100%,和程序最高运行效率是有区别的合理安排不同线程,才能即充分利用CPU資源又提高效率。不恰当的比喻就是你一个线程弄个空的while循环,它肯定能占满一个核心但是程序效率并没有提升。

其实很多东西书仩都有也很基础所以,多看书吧其实也花不了多少时间。

下面代码是第一种代码中的注释清楚说明了对于多核和多线程哪个好来说对run方法的使用一般是无先后顺序的但对于单核的cpu来说由于它们都会放在同一个队列中,这时候會有先后顺序但是对于多核cpu来说,会出现多个队列如果线程不在同一个队列当中那就无确定的先后顺序。下面的的输出就可以验证

//這里定义静态类是为了在启动线程时不用 //这里申明多个线程时对run方法的使用一般是无先后顺序的,但对于单核的cpu来说由于它们都会放在同┅个 //队列中这时候会有先后顺序,但是对于多核cpu来说会出现多个队列,如果线程不在同一个队列当中那就无确定的先后顺序

我要回帖

更多关于 多核和多线程哪个好 的文章

 

随机推荐