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.

[参考译文] TMS320C6678:OpenMP pragma 可以放在多个 SYS/BIOS 任务实例上?

Guru**** 2540830 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/597580/tms320c6678-openmp-pragmas-can-be-put-on-multiple-sys-bios-task-instances

器件型号:TMS320C6678

您好!  

我的客户担心 SYS/BIOS 环境中 OpenMP 并行区域的限制。 它们在系统中有一些 SYS/BIOS 任务、并考虑在这些上下文中使用 OpenMP pragma。

我能否理解 TI OpenMP 运行时,例如 openmp_dsp_c667x_2_06_00_00允许在多个 SYS/BIOS 任务实例中使用 OpenMP pragma? 如果是,OpenMP 运行时如何安排从这些任务分派的工作?  

此致、
Naoki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Naoki、

    查看有关 OpenMP 的 TI 文档:
    downloads.ti.com/.../index.html

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Yordan、

    是的、我阅读了手册、但找不到相关说明。 您能问 OpenMP 专家吗?

    此致、
    Naoki

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Naoki、

    是的、我已通知 RTOS 团队。 他们的反馈将直接发布在此处。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Yodan

    对此是否有任何答复?

    此致、
    Naoki
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Naoki、

    尚无反馈。 我在内部对此进行了升级。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Naoki、


    默认情况下,OpenMP 运行时配置为假设程序在 core0上启动,其中主线程运行,工作线程在其他内核上运行(不在 SYS/BIOS 任务中)。  在 core0上、可以将主线程配置为从 SYS/BIOS 任务的上下文中运行。  需要在运行时进行一些更改、才能将工作线程(在其他内核上)放入 SYS/BIOS 任务中。  因此、简单的答案是、在 core0上、您可以运行多个 SYS/BIOS 任务、其中一个任务可能运行 OpenMP 并行区域、该区域将工作卸载到其他内核上的线程。  其他内核不运行 SYS/BIOS 任务、而是专用于作为工作线程运行。

    另一种方法是对器件进行分频、并在 SYS/BIOS 任务的不同内核上运行多个 OpenMP "主"线程。  一个 OpenMP 主系统/BIOS-任务可以在 core0上运行、并且在 Core1-3上具有工作线程、而另一个 OpenMP 主系统系统/BIOS-任务可以在 CORE4上运行、并在 CORE4-7上具有工作线程。  但这不是默认配置、需要对某些存储器进行分区。  就像并行运行两个独立的 OpenMP 程序一样。

    我们有兴趣与您一起调整 OpenMP 运行时以满足您的要求。

    此致、

    Eric Stotzer

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Eric

    感谢你的答复。
    因此、他们的主要关注点是
    1.是否可以在 core0上同时在多个 SYS/BIOS 任务上下文中执行 OpenMP 并行区域。 您的回答似乎不能接受,因为您提到“在 core0上,您可以运行多个 SYS/BIOS 任务,其中一个任务可能正在运行 OpenMP 并行区域”,对吗?
    2.如果上述1是可以接受的,则当较低优先级任务实例中的并行区域可能被另一个高优先级任务实例抢占时,OpenMP 运行时如何处理排队/分派的工作,然后 CPU 进入其 OpenMP 并行区域。

    建议的后一部分(单个设备中的多个 OpenMP 主控方)与它们的请求略有不同,但 OpenMP 运行时似乎有一个可扩展的选项。 感谢您的信息和帮助。

    此致、
    Naoki
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Naoki、

    运行时的当前配置支持运行并行区域的 CORE0上的一个 SYS/BIOS 任务(一次)。  OpenMP 运行时状态变量只有一个副本。  理论上,您可以设置一个具有多个运行时状态变量副本的配置,然后并行运行“多”OpenMP 实例。  这与我在前一封电子邮件中提出的多个 device-openmp-tasks 建议类似。

    2.见上文第1段)。  主线程正在 SYS/BIOS 任务中运行。  但可以调整 OpenMP 运行时以将工作线程放入 OpenMP 任务中。  我认为、如果你想用一个更高优先级的任务(openmp 或 not)来挤占工作线程任务、那么考虑会发生什么情况是不够的。  只要与同一并行区域相对应的所有工作线程任务以相同的优先级执行、它似乎就能正常工作。

    此致、Eric

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Eric、

    我`m 正确理解您的观点... 总结您的答案、
    默认 OpenMP 运行时仅支持 Core0上的 OpenMP 主系统/BIOS-任务实例中的并行区域。 Core0上的其他正常 SYS/BIOS 任务实例不支持并行区域。 在其他从内核上、SYS/BIOS 不运行、OpenMP 运行时按照 FIFO 顺序发送主控方`s 请求、然后在没有任何调度程序`s 帮助的情况下调用一个工作程序。
    2.在 OpenMP 运行时中添加了一些配置,我们可以在 Core0上有多个 OpenMP 主系统/BIOS-任务。 这提供了在每个执行上下文中执行并行区域的功能。 此外、我们可以在从内核上启用 SYS/BIOS。 在这种情况下、所有工作线程都被视为 SYS/BIOS 任务实例、它们将根据其优先级工作(组线程具有相同的任务优先级、OpenMP 运行时从在 Core0上工作的 OpenMP 主系统/BIOS 任务继承它们。

    我`m 我的想象力…… 我的理解是否正确?

    此致、
    Naoki
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1.是的。  默认配置为:core0上的一个 SYS/BIOS 任务可以执行一个并行区域。  Cores1-7被保留为工作,而不是运行 SYS/BIOS,等待从队列中提取工作(由 core0上的主系统发送给他们)。  目前支持此功能。

    2、通过一些工作,可以支持您所概述的内容。  第一步是将内核1-7上的工作人员打包到 SYS/BIOS 任务中。  下一步是对 OpenMP 运行时状态进行打包,以便 OpenMP 主员工的多个实例可以以不同的优先级一起运行。  此模型类似于使多个 OpenMP 程序并行运行。

    您的想象力对我来说似乎很好-您已经明白了。

    Eric

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Eric、

    感谢您的解释。 那么、我们如何启用先前帖子中描述为2的选项? 是否仅需要*。cfg 文件修改? 或者在 OpenMP 运行时进行源代码修改?

    此致、
    Naoki
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Naoki、

    它将需要对运行时的源代码进行一些更改。 第一步是将主线程和工作线程封装到 SYS/BIOS 任务中。 请参阅/src/ti/runtime/openmp/src/omp_init.c 和函数 tomp_entry_func 中的代码。 IF-else 的两个部分需要拆分为两个 SYS/BIOS 任务。 此函数从/src/ti/runtime/boot.c.中的引导例程调用
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Eric、

    我需要在此澄清您的建议、但同时、我的客户对 OpenMP*有很多疑问。 我在 KeyStone e2e`ve 上发布了一些内容。 我在`ll 后回到这里。 希望您也能在这些主题上帮助我们。

    此致、
    Naoki