「HDF5」の版間の差分

提供: Eospedia
移動: 案内検索
(HDF5)
(ファイルの作り方)
行39: 行39:
 
                                 |                         
 
                                 |                         
 
                                 +----compound
 
                                 +----compound
 +
 +
 +
=== Chunkingと拡張可能なデータセット ===
 +
[[https://www.asc.ohio-state.edu/wilkins.5/computing/HDF/hdf5tutorial/extend.html https://www.asc.ohio-state.edu/wilkins.5/computing/HDF/hdf5tutorial/extend.html]]を参照
 +
 +
==== 拡張可能なデータセットの作成 ====
 +
 +
 拡張可能なデータセットとは、次元を拡張することができるデータセットのことです。HDF5では、あるデータセットをある初期次元で定義し、その後その初期次元のいずれかのサイズを大きくすることができます。
 +
 +
 HDF5では、拡張可能なデータセットを定義するためにチャンキングを使用する必要があります。これにより、ストレージを必要以上に再配置することなく、データセットを効率的に拡張することができます。
 +
 +
拡張可能なデータセットを記述するためには、以下の操作が必要です。
 +
 +
1.データセットのデータ空間を、最終的に拡張される可能性のあるすべての次元に対して無制限であると宣言しておく。
 +
2.データセット作成のプロパティを設定し、チャンキングを可能にする。
 +
3.データセットを作成する。
 +
4.データセットのサイズを拡張する。
 +
 +
 +
プログラミングの例
 +
'''説明'''
 +
 +
 この例では、3×3の拡張可能なデータセットを作成し、そのデータセットに書き込み、データセットを10×3に拡張し、再びそのデータセットに書き込む方法を示しています。
 +
 +
[C 言語の例 ] - h5_extend.c
 +
[FORTRAN の例 ] - chunk.f90
 +
 +
注:Makefileを含むサンプルのtarファイルをダウンロードするには、参考文献のページを参照してください。
 +
 +
備考
 +
ルーチンH5Pcreate / h5pcreate_fは、プロパティリストのインスタンスとして新しいプロパティを作成します。シグネチャは以下の通りです。
 +
 +
C:
 +
  hid_t H5Pcreate (H5P_class_t classtype)
 +
FORTRAN
 +
  H5PCREATE_F (CLASSTYPE, PRP_ID, HDFERR)
 +
            classtype IN: INTEGER
 +
            prp_id OUT: INTEGER(HID_T)
 +
            hdferr OUT: INTEGER
 +
 +
 パラメータ classtype は、作成するプロパティリストのタイプである。有効なクラスタイプは以下の通りです。
 +
 +
{|
 +
|C
 +
|FORTRAN
 +
|-
 +
|h5p_file_create
 +
h5p_file_access
 +
H5P_DATASET_CREATE
 +
H5P_DATASET_XFER
 +
H5P_MOUNT
 +
|H5P_FILE_CREATE_F
 +
H5P_FILE_ACCESS_F
 +
H5P_DATASET_CREATE_F
 +
H5P_DATASET_XFER_F
 +
H5P_MOUNT_F
 +
|}
 +
 +
 +
C言語では、成功した場合はプロパティリストの識別子が返され、失敗した場合は負の値が返される。FORTRANでは、プロパティリストの識別子をprp_idで、呼び出しの戻り値をhdferrで返します。
 +
ルーチンH5Pset_chunk / h5pset_chunk_fは、チャンクされたレイアウトデータセットを格納するために使用されるチャンクのサイズを設定します。このルーチンのシグネチャは次のとおりです。
 +
C:
 +
 +
    herr_t H5Pset_chunk (hid_t prp_id, int ndims,
 +
                        const hsize_t * dims)
 +
FORTRAN:
 +
 +
    H5PSET_CHUNK_F (PRP_ID, NDIMS, DIMS, HDFERR)
 +
 +
            prp_id IN: INTEGER(HID_T)
 +
            ndims IN: INTEGER
 +
            dims IN: INTEGER(HSIZE_T), DIMENSION(ndims)
 +
            hdferr OUT: INTEGER
 +
 +
prp_idパラメータは、問い合わせるプロパティリストの識別子である。
 +
ndimsパラメータは各チャンクの次元数である。
 +
dims パラメータは各チャンクのサイズを含む配列です。
 +
C言語では,成功すれば非負の値が,失敗すれば負の値が返されます.FORTRANでは、戻り値はhdferrで返されます:成功した場合は0、それ以外の場合は-1です。
 +
H5Dextend / h5dextend_f ルーチンは無制限の次元を持つデータセットを拡張します。シグネチャは次の通りである。
 +
C:
 +
 +
    herr_t H5Dextend (hid_t dset_id, const hsize_t * size)
 +
FORTRAN
 +
 +
    H5DEXTEND_F (Dset_ID、Size、HDERR)
 +
 +
            dset_id IN: INTEGER(HID_T)
 +
            サイズ IN: 整数(hsize_t), 次元(*) 
 +
            hdferr OUT: INTEGER
 +
 +
dset_id パラメータはデータセット識別子である.
 +
size パラメータは、各次元の新しい大きさを含む配列である。
 +
C言語では、この関数は成功すれば非負の値を、そうでなければ負の値を返す。FORTRANでは、戻り値はhdferrで返される: 成功すれば0、そうでなければ-1。
 +
H5Dget_create_plist / h5dget_create_plist_f ルーチンは、データセットに対するデータセット作成プロパティリストのコピーの識別子を返します。
 +
C関数H5Pget_layoutは、データセットの生データのレイアウトを返します。有効な型はH5D_CONTIGUOUSとH5D_CHUNKEDです。H5Pget_layoutのFORTRANルーチンはまだ存在しません。
 +
H5Pget_chunk / h5pget_chunk_fルーチンは、チャンクされたレイアウトデータセットの生データのチャンクの大きさを取得します。シグネチャは以下の通りです。
 +
C:
 +
 +
    int H5Pget_chunk (hid_t prp_id, int ndims, hsize_t * dims)
 +
FORTRAN:
 +
 +
    H5PGET_CHUNK_F (PRP_ID, NDIMS, DIMS, HDFERR)
 +
 +
            prp_id IN: INTEGER(HID_T)
 +
            ndims IN: INTEGER
 +
            dims OUT: INTEGER(HSIZE_T), DIMENSION(ndims)
 +
            hdferr OUT: INTEGER
 +
prp_id パラメータは、問い合わせるプロパティリストの識別子である。
 +
ndims パラメータは dims 配列のサイズである。
 +
dimsパラメータは、チャンクの寸法を格納する配列です。
 +
C では、この関数は成功すればチャンクの次元を返し、そうでなければ負の値を返します。FORTRANでは、戻り値はhdferrに返されます:成功した場合はチャンクのランク、そうでない場合は-1です。
 +
H5Pclose / h5pclose_fルーチンは、プロパティリストへのアクセスを終了させます。シグネチャは次の通りです。
 +
C:
 +
 +
    Herr_t H5Pclose (hid_t prp_id)
 +
FORTRAN
 +
 +
    H5PCLOSE_F (PRP_ID, HDFERR)
 +
 +
            prp_id IN: INTEGER(HID_T)
 +
            hdferr OUT: INTEGER
 +
prp_id パラメータは、アクセスを終了させるプロパティリストの識別子である。

2022年3月24日 (木) 01:16時点における版

HDF5

 HDF5HDF5 group (Hierarchical Data Format 5)は、階層的な科学データ(3D, 4Dなど)を保存するためのファイルフォーマットおよびライブラリです。 HDFViewを使って,その構造を見ることができます。

Imarisが利用するファイルフォーマットもHDF5フォーマットですが,特別なタグが必要です。


libhdf5の使い方

ファイルの作り方

{
hid_t fileID;
heer_t stutus;
fileID = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);

status = H5Fclose(fileID);
}

アクセスモード   H5F_ACC_TRUNC ファイルがあったら,新しくつくりなおす

 H5F_ACC_EXCL ファイルがあったら失敗する
 H5F_ACC_RDONLY  読みとりのみ
 H5F_ACC_RDWR  読み書き

File Creation Property List

 H5P_DEFAULT

File Access Property List

 H5P_DEFAULT


                                                          +--integer
                                                         +--floating point
                               +----atomic  ----+--date and time
                                |                         +--character string
HDF5 datatypes --|                          +--bitfield
                                |                         +--opaque
                                |                         
                               +----compound


Chunkingと拡張可能なデータセット 

[https://www.asc.ohio-state.edu/wilkins.5/computing/HDF/hdf5tutorial/extend.html]を参照

拡張可能なデータセットの作成

 拡張可能なデータセットとは、次元を拡張することができるデータセットのことです。HDF5では、あるデータセットをある初期次元で定義し、その後その初期次元のいずれかのサイズを大きくすることができます。

 HDF5では、拡張可能なデータセットを定義するためにチャンキングを使用する必要があります。これにより、ストレージを必要以上に再配置することなく、データセットを効率的に拡張することができます。

拡張可能なデータセットを記述するためには、以下の操作が必要です。

1.データセットのデータ空間を、最終的に拡張される可能性のあるすべての次元に対して無制限であると宣言しておく。 2.データセット作成のプロパティを設定し、チャンキングを可能にする。 3.データセットを作成する。 4.データセットのサイズを拡張する。


プログラミングの例 説明

 この例では、3×3の拡張可能なデータセットを作成し、そのデータセットに書き込み、データセットを10×3に拡張し、再びそのデータセットに書き込む方法を示しています。

[C 言語の例 ] - h5_extend.c [FORTRAN の例 ] - chunk.f90

注:Makefileを含むサンプルのtarファイルをダウンロードするには、参考文献のページを参照してください。

備考 ルーチンH5Pcreate / h5pcreate_fは、プロパティリストのインスタンスとして新しいプロパティを作成します。シグネチャは以下の通りです。

C:

 hid_t H5Pcreate (H5P_class_t classtype)

FORTRAN

 H5PCREATE_F (CLASSTYPE, PRP_ID, HDFERR) 
            classtype IN: INTEGER 
            prp_id OUT: INTEGER(HID_T)
            hdferr OUT: INTEGER 

 パラメータ classtype は、作成するプロパティリストのタイプである。有効なクラスタイプは以下の通りです。

C FORTRAN
h5p_file_create

h5p_file_access H5P_DATASET_CREATE H5P_DATASET_XFER H5P_MOUNT

H5P_FILE_CREATE_F

H5P_FILE_ACCESS_F H5P_DATASET_CREATE_F H5P_DATASET_XFER_F H5P_MOUNT_F


C言語では、成功した場合はプロパティリストの識別子が返され、失敗した場合は負の値が返される。FORTRANでは、プロパティリストの識別子をprp_idで、呼び出しの戻り値をhdferrで返します。 ルーチンH5Pset_chunk / h5pset_chunk_fは、チャンクされたレイアウトデータセットを格納するために使用されるチャンクのサイズを設定します。このルーチンのシグネチャは次のとおりです。 C:

   herr_t H5Pset_chunk (hid_t prp_id, int ndims, 
                        const hsize_t * dims) 

FORTRAN:

   H5PSET_CHUNK_F (PRP_ID, NDIMS, DIMS, HDFERR) 
           prp_id IN: INTEGER(HID_T)
           ndims IN: INTEGER
           dims IN: INTEGER(HSIZE_T), DIMENSION(ndims) 
           hdferr OUT: INTEGER

prp_idパラメータは、問い合わせるプロパティリストの識別子である。 ndimsパラメータは各チャンクの次元数である。 dims パラメータは各チャンクのサイズを含む配列です。 C言語では,成功すれば非負の値が,失敗すれば負の値が返されます.FORTRANでは、戻り値はhdferrで返されます:成功した場合は0、それ以外の場合は-1です。 H5Dextend / h5dextend_f ルーチンは無制限の次元を持つデータセットを拡張します。シグネチャは次の通りである。 C:

   herr_t H5Dextend (hid_t dset_id, const hsize_t * size) 

FORTRAN

   H5DEXTEND_F (Dset_ID、Size、HDERR) 
           dset_id IN: INTEGER(HID_T) 
           サイズ IN: 整数(hsize_t), 次元(*)  
           hdferr OUT: INTEGER

dset_id パラメータはデータセット識別子である. size パラメータは、各次元の新しい大きさを含む配列である。 C言語では、この関数は成功すれば非負の値を、そうでなければ負の値を返す。FORTRANでは、戻り値はhdferrで返される: 成功すれば0、そうでなければ-1。 H5Dget_create_plist / h5dget_create_plist_f ルーチンは、データセットに対するデータセット作成プロパティリストのコピーの識別子を返します。 C関数H5Pget_layoutは、データセットの生データのレイアウトを返します。有効な型はH5D_CONTIGUOUSとH5D_CHUNKEDです。H5Pget_layoutのFORTRANルーチンはまだ存在しません。 H5Pget_chunk / h5pget_chunk_fルーチンは、チャンクされたレイアウトデータセットの生データのチャンクの大きさを取得します。シグネチャは以下の通りです。 C:

   int H5Pget_chunk (hid_t prp_id, int ndims, hsize_t * dims) 

FORTRAN:

   H5PGET_CHUNK_F (PRP_ID, NDIMS, DIMS, HDFERR)
           prp_id IN: INTEGER(HID_T) 
           ndims IN: INTEGER
           dims OUT: INTEGER(HSIZE_T), DIMENSION(ndims) 
           hdferr OUT: INTEGER 

prp_id パラメータは、問い合わせるプロパティリストの識別子である。 ndims パラメータは dims 配列のサイズである。 dimsパラメータは、チャンクの寸法を格納する配列です。 C では、この関数は成功すればチャンクの次元を返し、そうでなければ負の値を返します。FORTRANでは、戻り値はhdferrに返されます:成功した場合はチャンクのランク、そうでない場合は-1です。 H5Pclose / h5pclose_fルーチンは、プロパティリストへのアクセスを終了させます。シグネチャは次の通りです。 C:

   Herr_t H5Pclose (hid_t prp_id) 

FORTRAN

   H5PCLOSE_F (PRP_ID, HDFERR) 
           prp_id IN: INTEGER(HID_T) 
           hdferr OUT: INTEGER 

prp_id パラメータは、アクセスを終了させるプロパティリストの識別子である。