11章RAM使用量を削減する

11章を読めば以下の問いに答えられるようになる
  • なぜRAMの使用量を減らすべきなのか?
  • NumPyarrayが大量の数字を格納するのに適している理由は?
  • どのようにすれば大量のテキストを効率よくRAM上に格納できるのか?
  • どのようにしたらたった1バイトで1076まで近似的に数えられるか?
  • Bloomフィルタと、それが必要になる理由は?

 RAMは使い切って初めてどれだけ使っているのかを考えるものです。書いたコードがRAMを使い切ってしまうと、その対応に時間を割かなければならないでしょう。1台のマシンに搭載しているRAMにより多くのデータが収まれば、管理しなければならないマシンの数が減ります。また、より大規模なプロジェクトに発展させる余地もできます。RAMを使い切ってしまう理由を知り、効率よく使う方法がわかれば、より大きな問題を扱えるようになるでしょう。本章では、Memory ProfilerとIPython Memory Usageツールを使ってRAM使用量を測定し、さらにオブジェクトをイントロスペクトしてRAM使用量を推測するツールの使い方を紹介します。

 RAMを節約するには、データを圧縮して格納するコンテナを使う方法もあります。本章では、トライという順序付きのツリー構造とDAWGというデータ構造を説明します。これらのデータ構造を使うと、性能をほとんど犠牲にすることなく、1.2GBの文字列をわずか30MBに圧縮できます。さらに、正確さを犠牲にして劇的にRAMを節約する近似カウンタや近似的に集合内の要素であるかどうか調べる方法を説明します。

 RAMの使用量を考えることとは「データには質量がある」とイメージすることです。質量が増えれば、移動に時間がかかります。RAMを節約すれば、データはバスを高速に移動でき、容量に上限のあるキャッシュに収まります。データがRAMに収まらず、ハードディスクやリモートにあるデータクラスタなどの遅い記憶装置に格納すれば、マシンにデータを持ってくるのがはるかに遅くなります。適切なデータ構造を選んで1つのマシンにデータが収まるようにしましょう。NumExprを使って、データの移動量を減らして効率的に計算することで、時間を節約し、一定量のRAMで大規模な計算をできるようにします。 ...

Get ハイパフォーマンスPython 第2版 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.