第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請問使用Parfor節(jié)省時間和內(nèi)存?

請問使用Parfor節(jié)省時間和內(nèi)存?

FFIVE 2019-08-03 11:03:15
使用Parfor節(jié)省時間和內(nèi)存?考慮prova.mat在MATLAB中得到如下方法for w=1:100     for p=1:9             A{p}=randn(100,1);      end     baseA_.A=A;     eval(['baseA.A' num2str(w) '= baseA_;'])endsave(sprintf('prova.mat'),'-v7.3', 'baseA')若要了解數(shù)據(jù)中的實際維度,1x9 cell在……里面A1由以下內(nèi)容組成9陣列:904x5, 913x5, 1722x5, 4136x5, 9180x5, 3174x5, 5970x5, 4455x5, 340068x5..另一個Aj有相似的成分??紤]以下代碼clear allload provaticparfor w=1:100        indA=sprintf('A%d', w);        Aarr=baseA.(indA).A;        Boot=[];        for p=1:9            C=randn(100,1).*Aarr{p};            Boot=[Boot; C];          end        D{w}=Boot;endtoc如果我運行parfor環(huán)帶4本地工人在我的Macbook Pro,它需要1.2秒。頂替parfor帶著for需要0.01秒。根據(jù)我的實際數(shù)據(jù),時間差是3秒對7秒[矩陣的創(chuàng)建]。C也比較復(fù)雜]。如果理解正確,問題是計算機必須發(fā)送baseA對于每個本地員工來說,這需要時間和記憶。你能提出一個解決辦法嗎?parfor比for?我以為把所有的細(xì)胞保存在baseA是一種節(jié)省時間的方法,一開始就加載一次,但也許我錯了。
查看完整描述

2 回答

?
桃花長相依

TA貢獻1860條經(jīng)驗 獲得超8個贊

一般信息

很多功能隱式多線程內(nèi)置,使.parfor當(dāng)使用這些函數(shù)時,循環(huán)效率不會比串行函數(shù)高。for循環(huán),因為所有的核心都已經(jīng)被使用了。parfor在這種情況下實際上是一種損害,因為它具有分配開銷,同時與您試圖使用的函數(shù)是并行的。

當(dāng)不使用隱式多線程函數(shù)之一時parfor基本上建議在兩種情況下進行迭代:循環(huán)中的大量迭代(例如,1e10),或者每次迭代需要很長的時間(例如,eig(magic(1e4)))。在第二種情況下,您可能需要考慮使用spmd(比parfor根據(jù)我的經(jīng)驗)。原因parforfor循環(huán)用于短期或快速迭代是正確管理所有工作人員所需的開銷,而不僅僅是進行計算。

查帳這個問題有關(guān)在不同員工之間拆分?jǐn)?shù)據(jù)的信息。

標(biāo)桿

電碼

請考慮下面的示例來查看for相對于parfor..如果您還沒有打開并行池,那么首先打開它:

gcp; % Opens a parallel pool using your current settings

然后執(zhí)行幾個大循環(huán):

n = 1000; % Iteration numberEigenValues = cell(n,1); % Prepare to store the dataTime = zeros(n,1);for ii = 1:ntic
    EigenValues{ii,1} = eig(magic(1e3)); % Might want to lower the magic if it takes too longTime(ii,1) = toc; % Collect time after each iterationendfigure; % Create a plot of resultsplot(1:n,t)title 'Time per iteration'ylabel 'Time [s]'xlabel 'Iteration number[-]';

然后用同樣的方法parfor而不是for..您會注意到,每次迭代的平均時間會增加(我的情況是0.27s到0.39s)。但是要意識到parfor使用所有可用的工人,因此總時間(sum(Time))必須除以計算機中的核數(shù)。因此,就我的情況而言,總時間從大約270秒下降到了49秒,因為我有一個八進制處理器。

因此,當(dāng)每次單獨迭代的時間增加時,使用parfor關(guān)于使用for,總時間大大減少了。

結(jié)果

這張照片顯示了測試的結(jié)果,因為我只是在我的家庭PC上運行它。我用n=1000eig(500)我的電腦有一個i5-750 2.66GHz處理器,有四個核,運行MATLABR201a。正如您所看到的,并行測試的平均值在0.29s左右徘徊,并且有很大的擴展,而串行代碼在0.24s左右相當(dāng)穩(wěn)定。然而,總時間從234秒下降到72秒,速度提高了3.25倍。這并不完全是4的原因是內(nèi)存開銷,如每次迭代所需的額外時間所表示的那樣。內(nèi)存開銷是由于MATLAB必須檢查每個內(nèi)核正在做什么,并確保每個循環(huán)迭代只執(zhí)行一次,并且數(shù)據(jù)被放入正確的存儲位置。


查看完整回答
反對 回復(fù) 2019-08-04
  • 2 回答
  • 0 關(guān)注
  • 394 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號