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.

[参考译文] TMS320F28388D:使用 std:min 或 std::max 未优化

Guru**** 2560390 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1230158/tms320f28388d-using-std-min-or-std-max-not-optimized

器件型号:TMS320F28388D

您好、E2E 专家!

你好。

我希望实现一个包含三个值的 MinMax 函数。 我首先将其实施如下:

void MinMax (float a、float bfloat c、float &min、
float &max){float max_ab = a >bab
max = max_ab > cmax_abc
float min_ab = a < bab
min = min_ab < cmin_ab : c;
} 

使用此 Makefile 构建:

CCX =/home/ycr/ti/ccs1230/ccs/tools/compiler/ti-cgt-c2000_22.6.0.LTS/bin/cl2000
CXXFLAGS =--define=cpu1 \
-v28 -ml -mt --float_support=fpu32 --TMU_support=tmu0 --vcu_support=vcu0 -O4 --fp_mode=relaxed

\--c11 --c++03 --relaxed_float --tmu_support=tmu0 --vcu_support=tmu0 --vcu_support=vcu_support=vcu0-
/home/ycr/ti/ccs1230/ccs/tools/compiler/ti-cgt-c2000_22.6.0.LTS/include






将生成该 ASM:

MOV32 R3H、R0H [CPU_FPU]
MINF32 R0H、R1H [CPU_FPU]
MAXF32 R3H、R1H [CPU_FPU]
MINF32 R0HR2H [CPU_FPU]
MAXF32 R3H、R2H ;[CPU_FPU]
MOV32 *+XAR5[0]R3H ;[CPU_FPU]
MOV32 *+XAR4[0]、R0H ;[CPU_FPU] 

但是、出于可移植性考虑、我使用 :

#包含 

void MinMax (float a、float b、float c、float &min、float &max)
min = std::min (std::min
 (a、b)、c);max = std::max (std::max (a、b)、 c)
} 

所生成的代码远远不够理想:

优点:
; 4 | void MinMax (float a、float b、float c、float &min、float &max){
; 5 | min = std :: min (std :: min (a, b ), c);
; 6 | max = std :: max (std :: max (a, b ), c);
; 8|
优点:
CMPF32 R1H、R0H ;[CPU_FPU]|146|
MOVST0 ZF、NF ;[CPU_FPU]|146|
MOV32 *-SP[4]、R0H ;[CPU_FPU]|4|
MOV32 *-SP[6]、R1H ;[CPU_FPU]|4|
MOV32 *-SP[8]、R2H ;[CPU_FPU]|4|
B |$C$L1||,LT ;[CPU_ALU]|146|
;发生支路;[]|146|
MOVZ AR6、SP ;[CPU_ALU]|146|
SubB XAR6、4号 ;[CPU_ARAU]|146|
B |$C$L2|||,UNC ;[CPU_ALU]|146|
;分支发生;[]|146||||$C$L1|:

MOVZ AR6、SP ;[CPU_ALU]|146|
SubB XAR6、#6 ;[CPU_ARAU]|146|||||$C$L2||
:
MOVZ AR6、AR6 ;[CPU_ALU]|146|
MOV32 R1H、*-SP[8] ;[CPU_FPU]|146|
MOV32 R0H、*+XAR6[0] ;[CPU_FPU]|146|
CMPF32 R1H、R0H ;[CPU_FPU]|146|
MOVST0 ZF、NF ;[CPU_FPU]|146|
B |$C$L3|||, GEQ ;[CPU_ALU]|146|
;发生支路;[]|146|
MOVZ AR6、SP ;[CPU_ALU]|146|
SubB XAR6、8号 ;[CPU_ARAU]|146|
MOVZ AR6、AR6 ;[CPU_ALU]|146|||||$C$L3||
:
MOVL ACC、*+ XAR6[0] ;[CPU_ALU]|5|
MOV32 R0H、*-SP[6] ;[CPU_FPU]|148|
MOV32 R1H、*-SP[4] ;[CPU_FPU]|148|
MOVL *+XAR4[0],ACC ;[CPU_ALU]|5|
CMPF32 R1H、R0H ;[CPU_FPU]|148|
MOVST0 ZF、NF ;[CPU_FPU]|148|
B |$C$L4||、LT ;[CPU_ALU]|148|
;发生支路;[]|148|
MOVZ AR4、SP ;[CPU_ALU]|148|
SubB XAR4、4号 ;[CPU_ARAU]|148|
B |$C$L5||,UNC ;[CPU_ALU]|148|
;分支出现;[]|148||||$C$L4||
:
MOVZ AR4、SP ;[CPU_ALU]|148|
SubB XAR4、6号 ;[CPU_ARAU]|148|||$C$L5||
:
MOVZ AR4、AR4 ;[CPU_ALU]|148|
MOV32 R0H、*-SP[8] ;[CPU_FPU]|148|
MOV32 R1H、*+XAR4[0] ;[CPU_FPU]|148|
CMPF32 R1H、R0H ;[CPU_FPU]|148|
MOVST0 ZF、NF ;[CPU_FPU]|148|
B |$C$L6||、GEQ ;[CPU_ALU]|148|
;发生支路;[]|148|
MOVZ AR4、SP ;[CPU_ALU]|148|
SubB XAR4、8号 ;[CPU_ARAU]|148|
MOVZ AR4、AR4 ;[CPU_ALU]|148|||$C$L6||
:
MOVL ACC、*+XAR4[0] ;[CPU_ALU]|6|
SubB SP、8号 ;[CPU_ARAU]
MOVL *+XAR5[0],ACC ;[CPU_ALU]|6|
LRETR ;[CPU_ALU] 

为什么?

此致、

CSC

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

    很抱歉、我的回复太晚了。 感谢您的关注。 为了提高性能、我们已将此分享给编译器团队。

    谢谢。
    阿什维尼

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

    您好 Ashwini:

    你好。

    请 提供任何解决方案。 应该假设 STL 行为不是预期的、TI 不知道这一点吗?

    TI 是否对 STL 进行了 C2000架构优化?

    此致、

    CSC

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

    你好、Ashwini 不在办公室。  我正在努力寻找其他人来支持其他人,我们将不得不等待她下周回来。

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

    应该假设 STL 行为不是预期的、TI 不知道这一点吗?

    TI 是否对 STL 进行了 C2000架构优化?

    [/报价]

    STL 表示标准模板库。  就本文而言、它表示使用大量模板的 C++代码。   

    在 C2000编译器中、对于提高使用大量 C++模板的代码的性能所做的工作很少。

    谢谢。此致、

    -乔治