Memory-mapped I/O

ファイルのメモリマッピング(mmap)のための低レベルモジュール。

Mmap.AnonymousType
Mmap.Anonymous(name::AbstractString="", readonly::Bool=false, create::Bool=true)

ファイルに結びついていないゼロ初期化されたメモリマップを作成するためのIOライクなオブジェクトを作成します。これはmmapで使用されます。SharedArrayによって共有メモリ配列を作成するために使用されます。

julia> using Mmap

julia> anon = Mmap.Anonymous();

julia> isreadable(anon)
true

julia> iswritable(anon)
true

julia> isopen(anon)
true
source
Mmap.mmapFunction
mmap(io::Union{IOStream,AbstractString,Mmap.AnonymousMmap}[, type::Type{Array{T,N}}, dims, offset]; grow::Bool=true, shared::Bool=true)
mmap(type::Type{Array{T,N}}, dims)

メモリマッピングを使用して、ファイルにリンクされた Array を作成します。これは、コンピュータのメモリに収まりきらないほど大きなデータを扱うための便利な方法です。

型は Array{T,N} で、T のビット型要素と、配列のバイトがどのように解釈されるかを決定する次元 N があります。ファイルはバイナリ形式で保存されている必要があり、フォーマット変換はできません(これはオペレーティングシステムの制限であり、Juliaの制限ではありません)。

dims は配列のサイズまたは長さを指定するタプルまたは単一の Integer です。

ファイルはストリーム引数を介して渡され、オープンされた IOStream またはファイル名文字列として指定されます。ストリームを初期化する際は、"読み取り専用" 配列には "r" を、ディスクに値を書き込むために新しい配列を作成するには "w+" を使用します。

type 引数が指定されていない場合、デフォルトは Vector{UInt8} です。

オプションで、例えばファイルのヘッダーをスキップしたい場合は、オフセット(バイト単位)を指定できます。オフセットのデフォルト値は、IOStream の現在のストリーム位置です。

grow キーワード引数は、要求された配列のサイズに合わせてディスクファイルを拡張する必要があるかどうかを指定します(ファイルの総サイズが要求された配列サイズより小さい場合)。ファイルを拡張するには書き込み権限が必要です。

shared キーワード引数は、結果として得られる Array とそれに対する変更が、同じファイルをマッピングしている他のプロセスに見えるかどうかを指定します。

例えば、以下のコードは

# mmapping用のファイルを作成
# (このステップでもmmapを使用することができます)
using Mmap
A = rand(1:20, 5, 30)
s = open("/tmp/mmap.bin", "w+")
# 配列の次元をファイルの最初の2つのIntとして書き込みます
write(s, size(A,1))
write(s, size(A,2))
# データを書き込みます
write(s, A)
close(s)

# 読み戻してテストします
s = open("/tmp/mmap.bin")   # デフォルトは読み取り専用
m = read(s, Int)
n = read(s, Int)
A2 = mmap(s, Matrix{Int}, (m,n))

ストリーム s に関連付けられたファイルにリンクされた mn 列の Matrix{Int} を作成します。

よりポータブルなファイルは、ワードサイズ – 32ビットまたは64ビット – とエンディアン情報をヘッダーにエンコードする必要があります。実際には、メモリマッピングと共に使用できる標準フォーマット(HDF5など)を使用してバイナリデータをエンコードすることを検討してください。

source
mmap(io, BitArray, [dims, offset])

ファイルにリンクされたBitArrayを作成し、メモリマッピングを使用します。これは同じ目的を持ち、同じ方法で動作し、mmapと同じ引数を持ちますが、バイト表現が異なります。

julia> using Mmap

julia> io = open("mmap.bin", "w+");

julia> B = mmap(io, BitArray, (25,30000));

julia> B[3, 4000] = true;

julia> Mmap.sync!(B);

julia> close(io);

julia> io = open("mmap.bin", "r+");

julia> C = mmap(io, BitArray, (25,30000));

julia> C[3, 4000]
true

julia> C[2, 4000]
false

julia> close(io)

julia> rm("mmap.bin")

これは、ストリームioに関連付けられたファイルにリンクされた25×30000のBitArrayを作成します。

source
Mmap.sync!Function
Mmap.sync!(array)

メモリマップされた Array または BitArray のメモリ内バージョンとディスク上のバージョンとの間で同期を強制します。

source