1

最後に見たときからしばらく時間が経っていたので (古いnws パッケージなど)、その間に何か「起こった」のではないかと思いました。

並列プロセス間でメモリを共有する方法はありますか?

environment各プロセスが、メタ オブジェクトの役割を果たすオブジェクトにアクセスできるようにしたいと考えています。

4

3 に答える 3

2

rredis パッケージは、に似た機能を提供しますnws。とパッケージ、または などの他の並列プログラミング パッケージでrredis使用できます。foreachdoRedisparallel

于 2013-06-08T15:30:37.000 に答える
1

これは、新しい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 つの非シリアル化のみです。

ネットワーク ソケットは使用されません。

于 2016-09-24T11:42:17.483 に答える
1

非常に効率的に機能するのは、bigmemoryパッケージを介した共有マトリックスです。かなりすべての R オブジェクトをそのようなマトリックスにシリアル化/非シリアル化できます。

残念ながら、プロセス間でマトリックスを共有できる唯一の方法は、決定論的ではない記述子を使用することです (つまり、他のプロセスと通信しない限り、記述子を取得できません)。このニワトリが先か卵が先かという問題を解決するには、ファイルシステム上の選択した場所に記述子を保存します。(記述子は非常に小さく、含まれている重要なものは実際の bigmatrx のメモリ アドレスだけです)。

それでも興味があれば、R コードを投稿できます。

于 2016-09-11T13:12:50.670 に答える