仓库地址: 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
4x_const = parallel.pool.Constant(x);
parfor i = 1:n
x_val = x_const.Value(:, i);
end
现在则是:1
2
3
4
5
6
7
8x_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
9shared_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);
这个就留给以后再说了。