首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在嵌入式平台上,使用unsigned int比使用(implicity signed) int更有效吗?

在嵌入式平台上,使用unsigned int比使用(implicity signed) int更有效吗?
EN

Stack Overflow用户
提问于 2010-12-02 18:35:36
回答 4查看 475关注 0票数 2

我已经养成了在我的代码中尽可能使用无符号整数的习惯,因为处理器可以对无符号类型进行2的幂整除,而对于有符号类型则做不到。速度对这个项目至关重要。该处理器的运行速度高达40MIPS。

我的处理器有一个18周期的分频,但它比单周期桶移位器需要更长的时间。那么,是否值得在这里使用无符号整数来加快速度,或者它们是否会带来其他缺点?我使用的是微芯片公司的dsPIC33F系列中的一款dsPIC33FJ128GP802。它对有符号整数和无符号整数都有单循环乘法。它也有符号和零扩展指令。

例如,当混合有符号整数和无符号整数时,它会生成以下代码。

代码语言:javascript
复制
026E4  97E80F     mov.b [w15-24],w0
026E6  FB0000     se w0,w0
026E8  97E11F     mov.b [w15-31],w2
026EA  FB8102     ze w2,w2
026EC  B98002     mul.ss w0,w2,w0
026EE  400600     add.w w0,w0,w12
026F0  FB8003     ze w3,w0
026F2  100770     subr.w w0,#16,w14

我使用的是C(dsPIC的GCC)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-02 19:07:38

我认为我们都需要更多地了解你的处理器的特性才能回答这个问题。为什么它不能对有符号整数做2的幂整除呢?据我所知,两者的操作是相同的。也就是说。

10/2 = 00001010等于00000101

-10/2 = 11110110转到11111011

也许你应该写一些简单的代码,执行一个无符号除法和一个有符号除法,并比较编译后的输出。

此外,基准测试也是一个好主意。它不需要精确。只要有一个由几千个数字组成的数组,启动一个计时器,开始将它们除以几百万次,并计算需要多长时间。如果你的处理器很快,也许会做几十亿次。例如。

代码语言:javascript
复制
int s_numbers[] = { etc. etc. };
int s_array_size = sizeof(s_numbers);
unsigned int u_numbers[] = { etc. etc.};
unsigned int u_array_size = sizeof(u_numbers);
int i;
int s_result;
unsigned int u_result;

/* Start timer. */

for(i = 0; i < 100000000; i++)
{
  i_result = s_numbers[i % s_array_size] / s_numbers[(i + 1) % s_array_size];
}

/* Stop timer and print difference. */

/* Repeat for unsigned integers. */

仓促写出原则,如有错误敬请谅解。

它不会给出精确的基准测试,但应该给出一个大致的想法,哪个更快。

票数 2
EN

Stack Overflow用户

发布于 2010-12-03 02:15:46

我对你的处理器上可用的指令集不太了解,但快速浏览一下就会发现,它包含了可以用于算术和逻辑移位的指令,这意味着移位一个有符号的值的成本与移动一个无符号的值的成本大致相同,并且每次使用移位都除以2的幂也应该是相同的成本。(我对此的了解来自于快速浏览一下针对您的处理器系列的C编译器的一些内部函数)。

也就是说,如果您使用的值将被解释为无符号,那么您也可以将其声明为无符号。在过去的几年里,我越来越多地使用stdint.h中的类型,通常我最终都会使用无符号版本,因为我的值本质上是无符号的,或者我只是将它们用作位数组。

票数 0
EN

Stack Overflow用户

发布于 2010-12-03 02:26:11

双向生成程序集并计算循环次数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4333984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档