sparsegroup 是 google.sparseXXXX (sparsehashmap)系列中最底层的一个数据结构,sparseXXX 的互相依赖如下:
-sparsegroup
- sparsetable
- sparsehashtable
- sparse_hash_map
- sparse_hash_set
因此,sparsegroup 实现的性能直接关系到整个 sparseXXXX 系列。
先看 sparsegroup 的一段代码:
sparsegroup 只包含 3 个数据成员:
group
bitmap
num_buckets
当 GROUP_SIZE 是默认值 48 时,bitmap+num_buckets 刚好对齐到 pointer-size,如果是64位环境,整个 sparsegroup 刚好 16 bytes,即两个指针宽度。
我重点要说的是:
sparsegroup 把计算 popcount(bitmap, idx) 看成是一个昂贵的操作,然而,在现代 cpu 中,这是错误的
!popcount 在大多数主流cpu中都有直接的硬件支持。
num_buckets 实际上是一个冗余数据,因为 num_buckets == popcount(bitmap),本来在 sparsegroup 中增加 num_buckets 成员只是为了加速,避免对整个bitmap 计算 popcount。然而在支持硬件 popcount 的 cpu 中,num_buckets 的存在反而大大降低了性能!因为它使得整个 bitmap的尺寸不能按机器字对齐,从而计算 popcount 时要多一个bitmask 操作,并且,取 num_buckets 也可能比 popcount(int64)还要慢。如果直接改成:
google 实现的 popcount(bitmap, pos) 要比硬件支持的__builtin_popcountll(bitmap & ~-1LL<<pos)
慢几百倍,他们当然也有理由——popcount并非在所有系统上都有编译器和硬件支持!
对 GROUP_SIZE==64 这个典型值,这样的优化版明显比 google 版好得多,不但简单,而且更快。如果要增大 GROUP_SIZE,应直接增加一倍或两倍,GROUP_SIZE 不宜过大,以免对 group 数组的添加、删除操作代价太高,64也许是一个最佳值。
分享到:
相关推荐
4. **简单集成**:对于基于Maven的项目,只需将`com.google.code.kaptcha:2.3.2`添加到项目的`pom.xml`文件中,就可以轻松地引入这个依赖,实现验证码功能。 5. **安全性**:Kaptcha生成的验证码具有一定的安全特性...
除了`newArrayList`,`com.google.common.collect`包还提供了许多其他强大的工具,如`ImmutableList`、`Multiset`、`Multimap`等,它们提供了更强大的数据结构和操作。例如,`ImmutableList`是一个不可变的列表,...
在Java编程领域,`com.google.common.collect`是一个非常重要的包,它是Google的Guava库的一部分。Guava是一个广泛使用的开源库,提供了许多实用的集合框架、缓存、原生类型支持、并发工具、字符串处理等功能。`...
json我们在网络请求中经常用到,最近最火的微信小程序开发中... 就会报错,因为对于嵌套类型的json它是解释不出来的,这时就需要用到com.google.gson.Gson.jar了。资源中提供了jar包与代码示例,一句代码解决您的问题。
java 工具包com.google.common.jar
74.125.128.138 kh.google.com 74.125.128.138 www.google.com 72.14.203.101 www.panoramio.com 74.125.39.99 www.google.com 74.125.39.99 kh.google.com 完毕,直接关闭记事本页面即可。 重新启动谷歌地球就可以...
截止至2016-12-23,github上com.google.gson.Gson 最新的2.8.0jar包。强大的json字符串解析功能及将字符串转换为json格式。才发现需要这么多分,大家也可以去网盘下载: ...
谷歌拼音输入法安卓版是谷歌官方推出适用于专为android安卓系统制订的手机输入法。全新谷歌手机输入法具有视觉上质感样式的输入法界面,去掉了键帽的设计,没有了分割的线条,给人一种更加简单、纯粹、统一的感觉,...
截止至2018-11-27,github上com.google.gson.Gson 最新的2.8.5jar包。强大的json字符串解析功能及将字符串转换为json格式。我16年上传的免费下载的2.8.0版本不知道为什么变成下载需要50分了
google TTS jar包 google语音包,com.google.tts google语音工具包 google TTS jar包 google语音包,com.google.tts
标题中的"com.google.zxing两个jar包"指的是Google开源项目ZXing(Zebra Crossing)的两个Java类库文件。ZXing是一个多格式的一维/二维条码图像处理库,主要用于读取、解码多种条码格式,如QR码、DataMatrix、UPC-A...
android tts 语音包 apk
三种方法对web-Google.txt进行pagerank计算,1.python以稀疏矩阵方法实现单机计算谷歌网页数据计算pageRank值2.调用networkx库3.调用networkx库,其中pagerank自己实现。
Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] ...
使用Maven或Gradle等构建工具可以帮助你更好地管理和控制依赖关系。其次,检查你的日志配置,确保日志输出正常,这对于定位Gson可能出现的问题至关重要。最后,如果你发现是Gson库本身导致的问题,可以尝试回退到...
总之,"google.map.plugin.js" 文件是实现谷歌地图功能的关键,它扩展了标准的谷歌地图API,提供了更丰富的地图交互和定制化能力。通过学习和理解这个插件的API,你可以构建出功能强大的地图应用。
Linux离线安装谷歌,参考链接:https://blog.csdn.net/lqh_linux/article/details/121078073
网页浏览.Google.Chrome.75.0.3770.100.x64.谷歌浏览器便携版(验证版)
通过深入学习和实践,你可以利用这些功能构建出更多复杂且实用的地图应用。 在这个压缩包中的"google map"很可能包含了上述步骤的示例代码,你可以通过查看和运行这些代码来进一步理解和学习如何在Android应用中...
`com.google.common.base.Preconditions`是Google Common库中的一个关键类,它提供了多种静态方法,用于在程序执行前检查条件是否满足,以此来预防运行时异常。这些方法在编写健壮的代码时非常有用,因为它们可以在...