This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

程序的多核运行问题

最近一个任务,要求将一个算法利用8个核进行运行,测试8个核的算法处理性能。在Windows下,CCS5.0.3,TMS320C6678l,本人是DSP初学者,现在主要任务是测试6678的性能。

对于6678的多核处理是不是要用到IPC和中断的问题?

如何实现程序的多核运行(例如将(for(i=0;i<64;i++)a[i]=2*a[i];)这个循环分配到8个核中进行)?能否就那个for循环建立个简单的实例工程,能够将循环内的乘法分配到8个核上?

在哪可以找到多核处理的例程?

  • conghu 你好:

    是否涉及到多核是根据用户来设定的,IPC只是提供多核之间的中断问题。

    从你的算法角度来说,可以使用IPC,也可以不使用IPC。

    比如你固定将 0-7 的循环分配给核0,结果写到 a[0]-a[7],将 8-15 的循环分配给核1,结果写到 a[8]-a[15]。这种方法核之间并没有冲突,因此不需要使用IPC进行核间通信。

    而如果你想做动态分配任务到多核,这种往往涉及到操作系统OS,比较复杂。简单的方法是同一份代码,不同的核处理不同的分支,依据宏DNUM来区分核。

    多核编程的例子也有的,请参考置顶页面,谢谢!

    www.deyisupport.com/.../955.aspx

  • “比如你固定将 0-7 的循环分配给核0,结果写到 a[0]-a[7],将 8-15 的循环分配给核1,结果写到 a[8]-a[15]。这种方法核之间并没有冲突,因此不需要使用IPC进行核间通信。”

    请问核的分配是DSP自动分配的,还是需要人为指定分配?

  • 比如以下代码:

    #include "c6x.h"

    if (0 == DNUM)

    {

       Funca();

    }

    else if(1 == DNUM)

    {

       Funcb();

    }

    这样就把Funca()放在核0执行,Funcb()放在Core1执行。

    这种方式最简单,即所有core共用同一份代码。

  • 上面的方式好像是每个核各自将程序运行一次,但是如何将任务分配到8个核中并行处理呢?

  • 所有核都运行这段代码,那么core0就会处理funcA,core1就处理funcB。

    funcA的功能: 0-7 的循环计算,结果写到 a[0]-a[7],

    funcB的功能:8-15 的循环计算,结果写到 a[8]-a[15]。

    不知这样处理是否能够达到你的要求。谢谢