Matlab中基于共享内存的矩阵 完结篇

仓库地址: https://github.com/qhgz2013/shared_matrix

Bug该修的修好了,内存泄漏,多次free啥的操作基本上是没有了,跑小的数据集已经有挺好的效果的了:

RTX ON 共享内存 ON:
独立内存使用情况:

共享内存使用情况(在/dev/shm中):

共享内存 OFF:

如果要跑大点的数据集,单用matlab自带的parallel.pool.Constant,就算是128G的内存也out of memory了,现在把15G的数据直接扔共享内存里,还算跑得动:

代码改动也不大,以前是:

1
2
3
4
x_const = parallel.pool.Constant(x);
parfor i = 1:n
x_val = x_const.Value(:, i);
end

现在则是:

1
2
3
4
5
6
7
8
x_host = shared_matrix_host(x);
parfor i = 1:n
x_dev = x_host.attach();
x_val = x_dev.get_data();
x_val = x_val(:, i);
x_dev.detach();
end
x_host.detach();

好像是繁琐了一点,但是后面优化一下加个直接套个struct一次性创建多个变量的话应该简单很多,比如:

1
2
3
4
5
6
7
8
9
shared_memory_host = create_shmat_host(x, a, b, c);
parfor i = 1:n
shared_memory_dev = attach_shmat_host(shared_memory_host);
x_val = shared_memory_dev.x(:, i);
a = shared_memory_dev.a;
b = shared_memory_dev.b;
detach_shmat_dev(shared_memory_dev);
end
detach_shmat_host(shared_memory_host);

这个就留给以后再说了。