約 1000 項目のリストに対して実行されるコストのかかる操作を並列化することで、クアッドコア マシンを利用しようとしています。
現在、R の parallel::mclapply 関数を使用しています。
res = rbind.fill(parallel::mclapply(lst, fun, mc.cores=3, mc.preschedule=T))
これは機能します。問題は、生成された追加のサブプロセスが大量のメモリを割り当てなければならないことです:
理想的には、各コアが親 R プロセスから共有メモリにアクセスできるようにして、mclapply で使用するコアの数を増やしても、コアの制限の前に RAM の制限に達しないようにします。
現在、この問題をデバッグする方法について途方に暮れています。各プロセスがアクセスする大規模なデータ構造はすべてグローバルです (現在)。それはどういうわけか問題ですか?
OS の共有メモリの最大設定を 20 GB (使用可能な RAM) に増やしました。
$ cat /etc/sysctl.conf
kern.sysv.shmmax=21474836480
kern.sysv.shmall=5242880
kern.sysv.shmmin=1
kern.sysv.shmmni=32
kern.sysv.shmseg=8
kern.maxprocperuid=512
kern.maxproc=2048
これで問題は解決すると思いましたが、問題は引き続き発生します。
他のアイデアはありますか?