返回介绍

4.4 性能实例:可变形数据集

发布于 2024-01-25 22:02:55 字数 1500 浏览 0 评论 0 收藏 0

在第3章最后一个例子里,我们讨论了可变形数据集性能方面的一些问题。结果我们发现,除了一两个反例以外,大多数时候,HDF5需要可变形数据集使用分块存储。想想看如果数据集使用连续存储会如何?除了最后那个维度,对任何其他维度进行扩展都意味着重写整个数据集!

在使用可变形数据集时有一些陷阱跟分块存储有关,其中之一会告诉你在性能攸关时为什么必须小心使用自动分块器。因为它做出的决定可能并不符合你数据集的用处。

让我们重新看第3章的例子,创建两个数据集来存储一批时序,每条时序有1000个元素。这两个数据集的第一个维度都是可扩展的,只是初始大小不同:

我们有两种添加数据的手段,一种是简单添加(add_trace_1),另一种是超额分配并在结束时消减数据集(add_trace_2和done)。第二种理论上会快一些,因为调用resize的次数较少:

现在,让我们用timeit测试一下它们真实的性能:

这和我们期望的不太一样。发生了什么?通过调查每个数据集的分块形状,我们得到了线索:

这是怎么回事?看来分块形状是由数据集的初始大小和一些其他因素决定的。让我们手动指定分块形状再重试一下。这次我们将两者的分块形状都设为(1, 1 000),分块大小都是4k(1 000个元素×4个字节):

这样就好多了。接下来我们会讨论分块存储的“杀手级应用”:过滤器。它们的用途比提升性能更为重要。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文