最後に見たときからしばらく時間が経っていたので (古いnws パッケージなど)、その間に何か「起こった」のではないかと思いました。
並列プロセス間でメモリを共有する方法はありますか?
environment
各プロセスが、メタ オブジェクトの役割を果たすオブジェクトにアクセスできるようにしたいと考えています。
最後に見たときからしばらく時間が経っていたので (古いnws パッケージなど)、その間に何か「起こった」のではないかと思いました。
並列プロセス間でメモリを共有する方法はありますか?
environment
各プロセスが、メタ オブジェクトの役割を果たすオブジェクトにアクセスできるようにしたいと考えています。
rredis パッケージは、に似た機能を提供しますnws
。とパッケージ、または などの他の並列プログラミング パッケージでrredis
使用できます。foreach
doRedis
parallel
これは、新しいyaplr
パッケージを介して効率的に行うことができます。
まずはインストール
devtools::install_github('adamryczkowski/yaplr')
R セッション番号 1:
library(yaplr)
send_object(obj=1:10, tag='myobject')
# Server process spawned
R セッション番号 2:
library(yaplr)
list_objects()
# size ctime
# myobject 62 Sat Sep 24 13:01:57 2016
retrieve_object(tag='myobject')
# [1] 1 2 3 4 5 6 7 8 9 10
remove_object('myobject')
quit_server()
このパッケージはbigmemory::big.matrix
、効率的なデータ転送のために使用します。R プロセス間で大きなオブジェクトをコピーする場合、不要なコピーは作成されません。1 つのシリアル化と 1 つの非シリアル化のみです。
ネットワーク ソケットは使用されません。
非常に効率的に機能するのは、bigmemory
パッケージを介した共有マトリックスです。かなりすべての R オブジェクトをそのようなマトリックスにシリアル化/非シリアル化できます。
残念ながら、プロセス間でマトリックスを共有できる唯一の方法は、決定論的ではない記述子を使用することです (つまり、他のプロセスと通信しない限り、記述子を取得できません)。このニワトリが先か卵が先かという問題を解決するには、ファイルシステム上の選択した場所に記述子を保存します。(記述子は非常に小さく、含まれている重要なものは実際の bigmatrx のメモリ アドレスだけです)。
それでも興味があれば、R コードを投稿できます。