文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
4.4 性能实例:可变形数据集
在第3章最后一个例子里,我们讨论了可变形数据集性能方面的一些问题。结果我们发现,除了一两个反例以外,大多数时候,HDF5需要可变形数据集使用分块存储。想想看如果数据集使用连续存储会如何?除了最后那个维度,对任何其他维度进行扩展都意味着重写整个数据集!
在使用可变形数据集时有一些陷阱跟分块存储有关,其中之一会告诉你在性能攸关时为什么必须小心使用自动分块器。因为它做出的决定可能并不符合你数据集的用处。
让我们重新看第3章的例子,创建两个数据集来存储一批时序,每条时序有1000个元素。这两个数据集的第一个维度都是可扩展的,只是初始大小不同:
我们有两种添加数据的手段,一种是简单添加(add_trace_1),另一种是超额分配并在结束时消减数据集(add_trace_2和done)。第二种理论上会快一些,因为调用resize的次数较少:
现在,让我们用timeit测试一下它们真实的性能:
这和我们期望的不太一样。发生了什么?通过调查每个数据集的分块形状,我们得到了线索:
这是怎么回事?看来分块形状是由数据集的初始大小和一些其他因素决定的。让我们手动指定分块形状再重试一下。这次我们将两者的分块形状都设为(1, 1 000),分块大小都是4k(1 000个元素×4个字节):
这样就好多了。接下来我们会讨论分块存储的“杀手级应用”:过滤器。它们的用途比提升性能更为重要。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论