C++乘除法运算效率

NoEdUl 2016-04-18 10:16:24
听说除法运算效率很低,vc分析一看,有一些运算却是很占性能。
做的图像处理上下取样双线性插值。

ratioRow = OriginalRow/SampleRow;
ratioCol = OriginalCol/SampleCol;
float r,c;
int r1,r2,c1,c2;
float y1,y2,value;
for(int i=0;i<stdRow;i++)
{
for(int j=0;j<stdCol;j++)
{
//r和c的赋值语句分别占了6.2%和5.8%的性能
r = (i+0.5)*ratioRow-0.5;
c = (j+0.5)*ratioCol-0.5;
r1 = (int)r;
r2 = r1+1;
c1 = (int)c;
c2 = c1+1;
if(r1>=0&&r2<height&&c1>=0&&c2<width)
{
//下面求y1,y2,value各自占8%性能
y1 = ((c2-c)*buffer[r1*width+c1]+(c-c1)*buffer[r1*width+c2])/(c2-c1);
y2 = ((c2-c)*buffer[r2*width+c1]+(c-c1)*buffer[r2*width+c2])/(c2-c1);
value = ((r2-r)*y1+(r-r1)*y2)/(r2-r1);
sampleValues[i*stdCol+j] = value;
continue;
}
}
}


计算长宽比和计算双线性插值结果的时候占用性能很多啊,是除法运算的问题吗?
...全文
2755 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_43853785 2019-09-23
  • 打赏
  • 举报
回复
用右移对除法优化呗 >>1 == /2
熊孩子开学喽 2017-10-18
  • 打赏
  • 举报
回复 3
除法当然慢, 做加法最快了. 不过不讲算法, 光看你的代码也够低效的了, 像r,r1,r2的计算为什么要放在内层循环?? 这不是至少白算几十万次么? 再往里面说, 后面两个长表达式里面凡是涉及到r,r1,r2和固定值的乘法的东西统统能扔到外层循环计算好了放在临时变量里给内存循环用. 这又是N万次浪费. 指望编译器帮你优化么? 或许有, 谁知道. 所以, 除法就要说话啦:"就许你放火, 不许我点灯?"
纹枰老妖 2016-06-02
  • 打赏
  • 举报
回复
引用 8 楼 u012947309 的回复:
[quote=引用 7 楼 wenpinglaoyao 的回复:] 在所有数学逻辑运算中,求余和除法运算应该是效率最低的
对呀对呀,vs分析出来带有除法和求余的语句确实是比同样数据结构的其他计算占用更多的时间。 但是有个别语气不太好的回答者还是要强调时间用在访问上面...我也没贴访问了奇怪结构的数据,不知道为什么他这么大火气。[/quote] 我认为您无需太在意他人的态度,我也经常碰到莫名光火的,大家求同存异,共同进步吧
NoEdUl 2016-06-02
  • 打赏
  • 举报
回复
引用 7 楼 wenpinglaoyao 的回复:
在所有数学逻辑运算中,求余和除法运算应该是效率最低的
对呀对呀,vs分析出来带有除法和求余的语句确实是比同样数据结构的其他计算占用更多的时间。 但是有个别语气不太好的回答者还是要强调时间用在访问上面...我也没贴访问了奇怪结构的数据,不知道为什么他这么大火气。
纹枰老妖 2016-05-06
  • 打赏
  • 举报
回复
在所有数学逻辑运算中,求余和除法运算应该是效率最低的
ForestDB 2016-05-05
  • 打赏
  • 举报
回复
还是先把profile弄出来吧。
li9172 2016-04-29
  • 打赏
  • 举报
回复
某个函数/运算的运行效率和编译器优化, 硬件等一堆东西相关, 没有实际测试单纯讨论没多大意义.
lm_whales 2016-04-28
  • 打赏
  • 举报
回复
先给个测试结果再说性能
赵4老师 2016-04-18
  • 打赏
  • 举报
回复
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!
flying_music 2016-04-18
  • 打赏
  • 举报
回复
这个问题有点儿困难,给两个个人建议吧 1. 去掉除法运算,再分析一下,这样结果肯定是不对的,但是可以确定是不是除法拉低了程序性能 2. 如果没有使用编译优化选项可以尝试使用一下,一般会有较好的提升效果
dustpg 2016-04-18
  • 打赏
  • 举报
回复
又来个听说,那lz听说过CPU缓存么, 1. 对于现在的计算机算法的瓶颈大多处在数据访问上 2. 现代CPU浮点的加减乘除运算速度几乎差不多, 如果没有专门的指令,大部分时候还是浮点指令的组合比整型指令组合要快, 3. 加速真的要测试乘除法效率,为什么不专门写个测试程序.

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧