gpt4 book ai didi

performance - 重量和性能方面的最佳数据存储格式(例如,Txt、Asc、Bin 等)?

转载 作者:行者123 更新时间:2023-12-01 01:20:21 25 4
gpt4 key购买 nike

有人可以指导我在读/写速度、性能、重量(文件大小)方面找到最佳存储格式,以便将重矩阵(具有恒定精度的浮点数)存储到文件中(到 HDD)。

我一直在使用 ASCII、文本和二进制格式。假设对于相同的矩阵大小(例如 10000x10000x200)和数字精度(例如,5 位有效数字),我发现二进制格式一般给出了最好的结果,然后是 ASCII 和文本在访问/写入速度和权重方面一般(我没有做过任何实际测试)。

话虽如此,在我的情况下,是否有比二进制更好的标准数据存储格式?如果没有,有什么方法可以优化我的数据结构以在保存/读取时获得更好的性能?

附注。如果可以帮助获得更好的结果,我可以使用 C、C++ 或 Matlab(对我来说使用哪一种并不重要)。

最佳答案

二进制一般会快得多。如果您使用浮点数,则每个数字使用 4 个字节,而不是数字的每个字符 1 个字节 - 因此数字 5.34182 是 4 个字节,而不是 7 个字节加上一个分隔符。

更进一步,你可能会做得更好。您的磁盘不会逐字节读取数据,而是读取 blocks 中的数据。 ,并且通常您希望避免读取比您需要的更多的块。二进制格式更快的真正原因不是它需要更少的字节,而是它需要更少的块(占用更少字节的产品)。这意味着您希望最小化磁盘上的大小,因为从磁盘读取比从 RAM 读取慢一个数量级 - 磁盘访问以毫秒为单位,而 RAM 访问以微秒为单位。

那么现在你能做什么?如果您的矩阵是 sparse ,您可以只存储非零元素,这将为您节省大量空间。因此,不是存储每个点,而是为每个条目存储一对(索引,值)。这意味着每个条目现在是 8 个字节而不是 4 个字节,但是如果矩阵的一半以上为零,则可以节省大量空间。

最后,压缩在这里有很大帮助。当然,更多的压缩意味着更多的 CPU 时间来解压缩矩阵,但这也意味着更快的磁盘读取。在这里,您真的必须进行实验 - 在频谱的简单末端,Run Length Encoding很容易实现,而且效果往往出奇的好。这是有效的,因为如果您要存储小整数和“简单”浮点数,则大多数字节为零。如果相同的数字重复多次,这也很有效,这在矩阵中确实发生。我还建议查看更高级的方案,例如 bzip2 ,虽然计算更复杂,但可以显着减少磁盘大小。唉,压缩往往是非常特定于领域的,所以你必须在这里进行试验。在一个域中有效的方法在另一个域中并不总是有效。

关于performance - 重量和性能方面的最佳数据存储格式(例如,Txt、Asc、Bin 等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9677983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com