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.

[参考译文] TDA4VH-Q1:R5F 与 C7100 与 C6678 性能比较

Guru**** 2756805 points

Other Parts Discussed in Thread: TMS320C6678, TDA4VH-Q1

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1612100/tda4vh-q1-r5f-vs-c7100-vs-c6678-performance-comparision

器件型号: TDA4VH-Q1
主题中讨论的其他器件: TMS320C6678TDA4VH

您好:

我们正在开发 J784S4 EVM、并尝试确定哪个内核更适合浮点密集型实时工作负载。

具体来说、我将比较 R5F、C7x 和 C66 内核。 该算法具有严格的实时限制和高比率的浮点运算、其中确定性延迟是一项重要要求。目前、我们的代码在 C6678 DSP 内核上运行。 此外、我们正在进行内部测试。

我想问以下问题:

*是否发布了任何基准测试或应用手册来对 R5F、C7100 和 C6678 (TMS320C6678) 之间的性能进行比较、尤其是对于 FP 繁重的工作负载?
* C6678 (C66x) 和 R5F 之间是否在 J784S4 上或作为跨器件的通用参考进行了性能比较?
*从实际角度来看、TI 工程师通常如何在 R5F 和 C7x 之间决定实时的 FP 密集型代码?
*是否有已知的权衡因素(例如确定性,流水线延迟,编译器/工具链注意事项或存储器架构影响)明显倾向于一个内核而不是其他内核?

如果有任何指向文档、基准数据或实际经验的指针、我们将不胜感激。

此致、

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

    您好:

    我不了解已发布的系统级比较基准测试结果 (R5、C7、C6)。  我知道 TI DSP 开发人员在迁移指南中对不同处理内核的性能进行了比较。  高层次的故事是 C 代码没有重定向在 C7 比 C6 更好。  当为存储器子系统重构代码时、C7 的表现要好得多。  要获得 C7 的峰值速度、通常需要使用流引擎进行软件预取、因为这是尽可能减少失速并馈送内核的方法。   更详细的故事需要更多关于实际算法及其数据类型的信息。  如果你给一些关于你的 ALG 和数据类型的更多信息,我们可以看到是否可以给出一些范围注释 (SP 或 DP,以及它的精度,可以矢量化,...)。

    本文发布了一些有关迁移和优化的资源。  TI SDK 还为一些目标用例提供了优化的代码。

    https://www.ti.com/lit/ug/spruig5d/spruig5d.pdf

    https://software-dl.ti.com/codegen/docs/c7000/optimization_guide/4_basic_code_opt/compopt_basic_libraries.html 

    https://www.ti.com/lit/ug/spruig6l/spruig6l.pdf

    此致、
    理查德·W·
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Woodruff 先生:
     
    我们正在评估从 C6678 迁移到安全关键型实时应用的 TDA4VH-Q1 (J784S4 EVM)。 我们的工作负载由两种主要算法组成、它们具有严格的确定性延迟要求、我们正在寻求内核选择 (R5F 与 C7x) 和性能预期方面的指导。
     
    系统架构环境
    目前、我们的系统在两个 C6678 DSP 内核上运行。
     
    第一个内核具有一个任务、总任务执行时间为 110µs。 这项任务包括三个不同的阶段:
    高频传感器数据采集和处理(数据验证,单元转换)
    MATLAB Simulink 生成的控制算法 (Embedded Coder 的 C++代码、64 位双精度全景、使用附加状态空间算法进行复杂的位置/速度控制、而不是简单的 PID)
    调试/记录开销(外部接口的数据结构准备,时间戳)
    在 C66x 上的总 110µs 中、Simulink 生成的 C++计算内核消耗约 40µs、而传感器 IO 和调试/日志记录占用剩余的 70µs。
     
    第二核心工作负载:状态估计
    此外、我们还必须运行一个具有 45 个状态向量的单独卡尔曼滤波器、该滤波器通过密集双精度矩阵运算(协方差矩阵高达 45×45)实现。
     
    核心选择决策和问题
     
    鉴于我们代码的 C++性质(具有内联函数和引用的自动生成,面向对象的结构)和严格的双精度要求、我们需要在整合和分区之间做出决定:
     
    R5F 支持双精度
    您能否确认 J784S4 的 Cortex-R5F 是否具有可处理我们现有代码的本机 DP 硬件支持?
    C7x 性能预期
    对于 40µs C66x 计算内核(具有状态机和矩阵矢量运算的双精度,标量重控制逻辑)、C7x 上的实际执行时间是多少?
    利用将数据放入 MSMC 和编译器自动矢量化(无手动 SIMD 重构)中、是否可实现 2.5 倍到 3 倍的加速(目标为 15µs)?
    或者考虑到自动生成的控制代码的标量性质(与卡尔曼滤波器的密集矩阵数学相反)、我们是否应该只期望边际增益(例如 25–30µs)?
     
    确定性和中断延迟
     
    工具链注意事项
    对于 Simulink C++的 C7x 编译:我们是否应该明确禁用 C++功能 (-fno-exceptions -fno-rtti) 以防止开销? 与 C 样式指针相比、C7000 CGT 是否有效地处理引用参数和内联函数而不会造成损失?
    业绩目标
     
    控制任务:将 110µs Total (40µs compute + 70µs IO) 迁移到 TDA4VH 上的 110µs。
    卡尔曼滤波器:45 个状态 DP 矩阵运算(如果 R5F 缺少 DP 硬件、则清楚地限制在 C7x 范围)。
    如果 R5F 缺少硬件双精度、我们将在 C7x 内核上整合这两种算法。 如果 R5F 有足够的 DP 硬件、我们最好使用混合模式:R5F 用于控制任务、C7x 用于状态估算。
     
    您能否提供 R5F(如果支持 DP)和 C7x 上 40µs C66x 计算内核的粗略微秒估算值? 此外、比较 C66x 和 C7x 的双精度工作负载的任何已发布基准测试都将非常有用。
     
    此致、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mert、

    虽然我确实很好地遵循了您的大部分分数、但我无法给出高质量的估计、因为这不是我所做的。  我确实预计实施细节能够带来广泛的性能。  如果您讨论 FP64 数据类型、则 R5 具有一些 FP64 功能 (VSADD.FP64)、但 C7X 峰值的速度将超过两个数量级。

    概括来说、C7x 系统的功能要比 R5F 强大得多。  两者都以 1GHz 的频率运行、但对于 C7x 而言、其 性能可能提高了 10 到 100 倍。 R5F 将~更容易编程、控制功能(非 DSP)可能同样好或更好。   如果您想要运行许多不同的任务、并且内核是专用的、则 R5F 的上下文开销可能会更低、而这不是一个重要的考虑因素。   更大的一点是存储器子系统。  C7x 非常靠近大容量存储器 (MSMC 和 DDR)、凭借其宽获取端口、可实现比 R5F CAN 高得多的带宽。  如果您有大数据集、R5F 可能会快速被冲掉。  如果您的数据适合 R5F TCM、那么存储器问题将不那么严重。  在原始大小和功率方面、C7x 的物理配置可能比 R5 多两个数量级、如所示。  如果您的应用很小、TDA4VH C7 可能就足够了、甚至超载了。  其他芯片(如 TDA4VEN)具有更小的 C75 DSP、这可能更适合。   我怀疑一些原型可能会有很大帮助、但是 、在 DSP 上进行原型设计的工作量将高于 R5。   

    对于 FP64、您的选项将是 A72、C7x、R5F。  GPU 仅支持 (F32 和 F16)、M4F 仅支持 (F32)。

    此致、
    理查德·W·