matlab CVX工具箱的并行运算

最近用到cvx工具箱来求解稀疏问题,大家都知道,cvx工具箱运行起来非常慢,所以想用parfor命令来执行并行运算,提高效率,但是直接在parfor里写cvx_begin会报错
错误使用 cvx_begin (line 41) 可见性违例错误。 请参阅确保 parfor 循环或 spmd 语句中的可见性。

经过查阅资料,发现这样可以解决问题

cvx_begin

cvx_end

写为一个单独的function,然后直接在parfor里调用这个子函数即可

例如

function r=Estimate_x(A,y,x,n)

cvx_solver sdpt3
cvx_begin quiet
    variable v(n);
    minimize (norm(v,1));  % estimate vector x using l_1 minimization 
    subject to
    y-A*v==0;
cvx_end
r=norm(x-v);  %compute the error.
end

然后主函数的代码写为:

m=7;
n=10;
k=4;
A=randn(m,n);
x=zeros(n,1);
sp=randn(k,1);
rp=randperm(n);
x(rp(1:k))=sp;
y=A*x;  % define your model 
parfor k=1:100    %Monte Carlo Simulation for 100 iterations
       e(k)=Estimate_x(A,y,x,n);
end

error=mean(e);

参考资料
http://ask.cvxr.com/t/using-cvx-with-gpu-parallel-computing/4862/2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章