5

HDF5ファイルのキャッシュサイズを増やしようとしていますが、機能していないようです。これは私が持っているものです:

import h5py

with h5py.File("test.h5", 'w') as fid:
        # cache settings of file
        cacheSettings = list(fid.id.get_access_plist().get_cache())
        print cacheSettings
        # increase cache
        cacheSettings[2] = int(5 * cacheSettings[2])
        print cacheSettings
        # read cache settings from file
        fid.id.get_access_plist().set_cache(*cacheSettings)
        print fid.id.get_access_plist().get_cache()

出力は次のとおりです。

[0, 521, 1048576, 0.75]
[0, 521, 5242880, 0.75]
(0, 521, 1048576, 0.75)

読書が機能する理由はありますが、設定は機能しませんか?
ファイルを閉じて再度開くことも役に立たないようです。

4

3 に答える 3

8

h5py バージョン 2.9.0 以降を使用している場合は、Mike's answerを参照してください。


docsによると、ファイル アクセス プロパティ リストのコピーget_access_plist()を返します。したがって、コピーを変更してもオリジナルに影響がないことは驚くべきことではありません。

高レベル インターフェイスでは、キャッシュ設定を変更する方法が提供されていないようです。

低レベルのインターフェースを使用してそれを行う方法は次のとおりです。

propfaid = h5py.h5p.create(h5py.h5p.FILE_ACCESS)
settings = list(propfaid.get_cache())
print(settings)
# [0, 521, 1048576, 0.75]

settings[2] *= 5
propfaid.set_cache(*settings)
settings = propfaid.get_cache()
print(settings)
# (0, 521, 5242880, 0.75)

上記はPropFAIDを作成します。次に、ファイルを開き、次の方法でFileIDを取得できます。

import contextlib
with contextlib.closing(h5py.h5f.open(
                        filename, flags=h5py.h5f.ACC_RDWR, fapl=propfaid)) as fid:
    # <h5py.h5f.FileID object at 0x9abc694>
    settings = list(fid.get_access_plist().get_cache())
    print(settings)
    # [0, 521, 5242880, 0.75]

そして、に渡すことで、 を使用fidして、高レベル インターフェイスでファイルを開くことができます。fidh5py.File

    f = h5py.File(fid)
    print(f.id.get_access_plist().get_cache())
    # (0, 521, 5242880, 0.75)

したがって、高レベルのインターフェイスを引き続き使用できますが、そこに到達するには多少の手間がかかります。一方、本質的なものだけに絞り込むと、おそらくそれほど悪くはありません。

import h5py
import contextlib

filename = '/tmp/foo.hdf5'
propfaid = h5py.h5p.create(h5py.h5p.FILE_ACCESS)
settings = list(propfaid.get_cache())
settings[2] *= 5
propfaid.set_cache(*settings)
with contextlib.closing(h5py.h5f.open(filename, fapl=propfaid)) as fid:
    f = h5py.File(fid)
于 2013-02-01T22:51:00.807 に答える
7

h5py バージョン 2.9.0 以降、この動作はメインh5py.Fileインターフェイスから直接利用できるようになりました。「生データ チャンク キャッシュ」を制御する 3 つのパラメーターrdcc_nbytes( 、rdcc_w0、およびrdcc_nslots) があります。OPはrdcc_nbytes設定を調整しようとしていましたが、これは次のように簡単に実行できます

import h5py

with h5py.File("test.h5", "w", rdcc_nbytes=5242880) as f:
    f.create_dataset(...)

この場合、OPが望んでいたように5を掛けるだけではなく、実際に必要なスペースの量を知っていると思います。現在のデフォルト値は、見つかった OP と同じです。もちろん、これを本当にプログラムで実行したい場合は、一度開いてキャッシュを取得し、閉じてから、必要なパラメーターを指定して再度開くことができます。

于 2019-07-30T19:13:20.477 に答える