首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当分母已知时,整数除法速度更快?

当分母已知时,整数除法速度更快?
EN

Stack Overflow用户
提问于 2010-04-11 12:42:42
回答 3查看 6.8K关注 0票数 18

我在GPU设备上工作,它具有非常高的除法整数延迟,数百个周期。我正在寻找优化部门。

所有除法的分母在集合{ 1,3,6,10 }中,但是分子是运行时的正值,大约为32000或更小。由于内存的限制,查找表可能不是一个好的选择。

你能想出别的办法吗?我想过计算浮点求逆,并用它们来乘以分子。

谢谢

PS。谢谢大家。bit shift hack真的很酷。为了从舍入中恢复,我使用以下C段:

代码语言:javascript
复制
// q = m/n
q += (n*(j +1)-1) < m;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-11 12:54:33

代码语言:javascript
复制
a/b=a*(1/b)
x=(1<<16)/b
a/b=(a*x)>>16

你能为分母建立一个查询表吗?既然你说的是15位分子,如果所有的东西都是32位无符号的,你可以用17来表示移位:

代码语言:javascript
复制
a/b=a*((1<<17)/b)>>17

移位越大,舍入误差越小。您可以进行暴力检查,看看有多少次,如果有的话,这实际上是错误的。

票数 12
EN

Stack Overflow用户

发布于 2010-04-11 14:16:44

"Hacker's Delight" by Henry Warren这本书用了整整一章的篇幅讲述了整数的常量除法,包括将整数除法转换为乘法/移位/加法一系列操作的技术。

本页计算乘法/移位/加法运算的幻数:

票数 8
EN

Stack Overflow用户

发布于 2010-04-11 12:52:29

为此,标准的嵌入式系统技巧是将整数除以N转换为定点乘以1/N。

假设16位,则可以用21845 (十进制)表示0.33333。乘法,得到32位整数乘积,然后向下移位16位。

您几乎肯定会遇到一些舍入(截断)错误。这可能是你能接受的,也可能不是。

这可能是值得努力研究您的GPU,看看您是否可以手动编写一个更快的整数除法例程,利用您的知识分子的有限范围。

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

https://stackoverflow.com/questions/2616072

复制
相关文章

相似问题

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