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.

[参考译文] TDA2SX:C66上的 OpenCL

Guru**** 2473270 points
Other Parts Discussed in Thread: TDA2SX

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1463525/tda2sx-opencl-on-c66

器件型号:TDA2SX
主题中讨论的其他器件: TDA2

工具与软件:

您好!

我想知道在哪里可以找到有关 C66的 OpenCL 的文档、这些文档似乎并不是很有用、但我有以下问题:

  • 与直接使用内在函数相比、是使用 OpenCL 吗?
  • 使用 OpenCL 应该通过内在函数获得相同或更好的性能、还是会使性能恶化?
  • 在哪里可以找到有关如何将其用于 C66的示例?
  • 如何将数据正确加载到 floatn 数据类型并注意存储器对齐?

    我曾尝试重写一些代码、但在某些情况下、输出似乎有所不同、这可能是由于内存对齐所致。

    使用以下 测试代码:

    void test_func (float * restrict in_ptr)

       __float2_t vec_a、vec_b;
       _float2_t vec_c =_ftof2 (0.0f、0.0f);
       float test_in_1[]={0.678513、0.75461321};
       悬空 TEST_IN_2[]={847.312.5684351.13};
       float2 vec_af2、vec_BF2、vec_C2F;


    printf("\n\n\test local array\n");
       vec_a =_mem8_f2 (&test_in_1[0]);
       vec_b =_mem8_f2 (&test_in_2[0]);
       vec_c =_dmpysp (vec_a、vec_b);
       vec_c =_daddsp (_dmpysp (vec_a、vec_b)、vec_c);

       printf ("指针输入:%f %f %f %f\n\n"、TEST_IN_1[0]、TEST_IN_1[1]、TEST_IN_2[0]、TEST_IN_2[1]);

       printf ("内在函数输入:%f %f\n"、_hif2 (vec_a)、_lof2 (vec_a));
       printf ("内在函数输出:%f\n"、_hif2 (vec_c)+_lof2 (vec_c));

       vec_af2 =*(float2*)(&test_in_1[0]);
       VEC_BF2 =*(float2*)(&TEST_IN_2[0]);
       vec_C2F = vec_af2 * vec_BF2;
       vec_C2F += vec_af2 * vec_BF2;

       printf ("OpenCL 输入:%f %f\n"、vec_af2.hi、vec_af2.lo);
       printf ("OpenCL 输出:%f\n"、vec_C2F.hi + vec_C2F.lo);

           
       printf("\n\n\test input pointer\n");
       vec_a =_mem8_f2 (&in_ptr[0]);
       vec_b =_mem8_f2 (&in_ptr[2]);
       vec_c =_dmpysp (vec_a、vec_b);
       vec_c =_daddsp (_dmpysp (vec_a、vec_b)、vec_c);

       printf ("指针输入:%f %f %f %f\n\n"、in_ptr[0]、in_ptr[1]、in_ptr[2]、in_ptr[3]);
       printf ("内在函数输入:%f %f %f\n"、_hif2 (vec_a)、_lof2 (vec_a)、_hif2 (vec_b)、_lof2 (vec_b));
       printf ("内在函数输出:%f\n"、_hif2 (vec_c)+_lof2 (vec_c));

       vec_af2 =*(float2*)(&in_ptr[0]);
       VEC_BF2 =*(float2*)(&IN_ptr[2]);
       vec_C2F = vec_af2 * vec_BF2;
       vec_C2F += vec_af2 * vec_BF2;

       printf ("OpenCL 输入:%f %f %f %f\n"、vec_af2.hi、vec_af2.lo、vec_Bf2.hi、vec_Bf2.lo);
       printf ("OpenCL 输出:%f\n"、vec_C2F.hi + vec_C2F.lo);

       }


    其中 in_ptr 指向 const float in_data[]={……}内的某个位置

    我得到以下结果:
     [host][DSP1 ]     97.967547 s:测试本地阵列
     [主机][DSP1 ]     97.967577 s:指针输入:0.678513 0.754613 847.312500 684351.125000
     [主机][DSP1 ]     97.967608 s:  
     [HOST][DSP1 ]     97.967638 s:内部输入:0.754613 0.678513.
     [主机][DSP1 ]     97.967669:内在函数输出:1033990.625000
     [主机][DSP1 ]     97.967699 s:OpenCL 输入:0.754613 0.678513.
     [host][DSP1 ]     97.967699 s:OpenCL 输出:1033990.625000
     [主机][DSP1 ]     97.967730 s:  
     [主机][DSP1 ]     97.967730 s:  
     [HOST][DSP1 ]     97.967760:测试输入指针
     [HOST][DSP1 ]     97.967791 s:指针输入:-0.000000 0.662687 0.932101 -0.000000
     [主机][DSP1 ]     97.967821 s:  
     [主机][DSP1 ]     97.967821 s:内在函数输入:0.662687 -0.000000 -0.000000 0.932101
     [主机][DSP1 ]     97.967852 s:内在函数输出:-0.000000
     [HOST][DSP1 ]     97.967913 s:OpenCL 输入:-0.000000 0.294224 0.932101 0.662687
     [host][DSP1 ]     97.967913 s:OpenCL 输出:0.389957

    可以看出、使用本地数组时数据加载正确、但在测试输入指针中  、使用 OpenCL 的加载实际上移动了1个浮点位、例如0.294224是&IN_ptr[0]之前的浮点位、这会导致错误的输出。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Marco:

    我们的专家目前不在办公室。 请期待下周回复。

    此致!
    Jared

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

    尊敬的 Marco:

    您能详细介绍一下您提出这个问题的 TDA2SX 项目吗? 是现有项目还是旧项目?

    请注意、TDA2是上一代器件、TI SDK 上次发布时间为2019年—链接。 随附的 SDK 源代码和文档是回答您的查询的最佳选择。 但是、该 SDK 按"原样"使用、提供的支持有限。

    谢谢。

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

    您好 Praveen、

    我不确定是否能提供更多详细信息。 该项目已经存在了一段时间。

    只要我可以确定 TDA2SX 器件仍然处于活动状态、而不是已淘汰。

    对于新一代产品、OpenCL 的使用支持是否有任何不同?

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

    您好!

    该器件仍在售、无论 SDK 版本在2019年是否已停止。 因此未计划进行新开发或新发布。

    有关此器件上的任何软件支持、建议您查看现有的 SDK 及其文档。

    在 Alternevely 下一代器件、如果是新项目或现有产品的新修订、您可以查看我们的下一代器件、它能够通过软件主动支持。   有关详细信息、请参阅 www.ti.com/.../overview.html 并查看他们的 SDK 文档。 请注意、我们未计划在最新器件上支持 OpenCL。

    谢谢。

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

    好的、感谢您的澄清。