memshare
enables multicore computation in R without
redundant memory copies. Large vectors, matrices, or lists are stored
once in shared memory and exposed to R processes as ALTREP
views. This allows workers in a PSOCK cluster to operate on the
same physical data while avoiding serialization overhead.
Key features:
shm_open
on Unix, MapViewOfFile
on Windows).parallel::parApply
and
parallel::parLapply
:
memApply()
— apply a function row/column-wise over a
matrix in shared memory.memLapply()
— apply a function element-wise over a list
in shared memory.From CRAN:
install.packages("memshare")
From GitHub (development version):
::install_github("mthrun/memshare") remotes
System requirements: R ≥ 4.0 and a C++17 compiler.
library(memshare)
library(parallel)
set.seed(1)
= 10000
n = 2000
p
= matrix(rnorm(n * p), n, p)
X = rnorm(n)
y
= memApply(
res X = X, MARGIN = 2,
FUN = function(v, y) cor(v, y),
VARS = list(y = y)
)str(res)
library(memshare)
library(parallel)
= 1000
list_length = 100
matrix_dim
= lapply(
ListV 1:list_length,
function(i) matrix(rnorm(matrix_dim * matrix_dim),
nrow = matrix_dim, ncol = matrix_dim))
= rnorm(matrix_dim)
y
= "ID123"
namespace = memshare::memLapply(ListV, function(el, y) {
res %*% y
el NAMESPACE=namespace, VARS=list(y=y), MAX.CORES = 1) },
Each element el of ListV is multiplied by y in parallel. The list resides once in shared memory.
Pages: memory regions owned by the current R session that loaded the package.
Views: ALTREP wrappers exposing shared memory variables (read/write capable).
Namespaces: string identifiers defining a shared memory context across sessions.
When the package is detached, all handles and associated shared memory pages are released, unless another R process still holds references.
The full manual for users or developers is available here: Package documentation
[Thrun and Märte, 2025] Thrun, M.C., Märte, J.: Memshare: Memory Sharing for Multicore Computation in R with an Application to Feature Selection by Mutual Information using PDE, 2025.
[Thrun et al., 2020] Thrun, M.C., Gehlert, T., & Ultsch, A.: Analyzing the Fine Structure of Distributions, PLOS ONE, 15(10), e0238835, 2020.
[Ultsch, 2005] Ultsch, A.: Pareto Density Estimation: A Density Estimation for Knowledge Discovery, Proceedings of the 28th Annual Conference of the German Classification Society, Springer, 2005