MATLAB调用多个核(常用于跑多次再取平均的仿真)

在通信与信息领域中,我们常会使用蒙特卡洛法,或者需要仿真多次取平均,为了降低程序的运行时间,我们考虑调用多个CPU核来运行程序,这个时候需要用到MATLAB的pool-object。具体来讲就是由普通的for循环变成parfor循环,主要分为(1-4)个步骤,已在下面的例程中说明。

% MATLAB code

% (1) too see whether pool-object is running, if so, turn if off
poolobj = gcp('nocreate'); delete(poolobj);

% (2) decide how many cores are required 
% No.core should be less than CPU cores...
% unless settled in another way on the setting preface.
p = parpool(16); 

% Example ......
for snr_idx = 1:length(SNR_dB)
    toc, tic,snr_idx,
    sigma2 = (optIn.Nseg) * 1 / 10.^(SNR_dB(snr_idx)/10);
    %sigma2 = (optIn.Nseg) * optIn.Ka/optIn.L / 10.^(SNR_dB(snr_idx)/10);
    MonteCarlo = MonteCarlos(snr_idx);
    No_MD_BA1 = zeros(MonteCarlo,1);
    No_FA_BA1 = zeros(MonteCarlo,1);
    No_MD_BA0 = zeros(MonteCarlo,1);
    No_FA_BA0 = zeros(MonteCarlo,1);
    
    % (3) parallel loops: there is no link-relationship between distinc mt.
	parfor mt = 1:MonteCarlo
        [No_MD1, No_FA1, No_MD0, No_FA0] = BiG_AMP_handle(integer_rather_randi, needencode, needCRC, sigma2, optIn);
        No_MD_BA1(mt) = No_MD1;
        No_FA_BA1(mt) = No_FA1;
        No_MD_BA0(mt) = No_MD0;
        No_FA_BA0(mt) = No_FA0;
    end

    No_FAs1(snr_idx) = sum(No_FA_BA1);
    No_MDs1(snr_idx) = sum(No_MD_BA1);
    No_FAs0(snr_idx) = sum(No_FA_BA0);
    No_MDs0(snr_idx) = sum(No_MD_BA0);
end

% (4) delete pool-object
delete(p)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值