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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

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

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

倚天杖 2019-07-20 14:18:47
使用Parfor節(jié)省時(shí)間和內(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ù)中的實(shí)際維度,1x9 cell在……里面A1由以下內(nèi)容組成9陣列:904x5, 913x5, 1722x5, 4136x5, 9180x5, 3174x5, 5970x5, 4455x5, 340068x5..另一個(gè)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如果我運(yùn)行parfor環(huán)帶4本地工人在我的Macbook Pro,它需要1.2秒。頂替parfor帶著for需要0.01秒。根據(jù)我的實(shí)際數(shù)據(jù),時(shí)間差是3秒對(duì)7秒[矩陣的創(chuàng)建]。C也比較復(fù)雜]。如果理解正確,問(wèn)題是計(jì)算機(jī)必須發(fā)送baseA對(duì)于每個(gè)本地員工來(lái)說(shuō),這需要時(shí)間和記憶。你能提出一個(gè)解決辦法嗎?parfor比f(wàn)or?我以為把所有的細(xì)胞保存在baseA是一種節(jié)省時(shí)間的方法,一開(kāi)始就加載一次,但也許我錯(cuò)了。
查看完整描述

2 回答

?
慕妹3146593

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊

一般信息

很多功能隱式多線程內(nèi)置,使.parfor當(dāng)使用這些函數(shù)時(shí),循環(huán)效率不會(huì)比串行函數(shù)高。for循環(huán),因?yàn)樗械暮诵亩家呀?jīng)被使用了。parfor在這種情況下實(shí)際上是一種損害,因?yàn)樗哂蟹峙溟_(kāi)銷(xiāo),同時(shí)與您試圖使用的函數(shù)是并行的。

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

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

標(biāo)桿

電碼

請(qǐng)考慮下面的示例來(lái)查看for相對(duì)于parfor..如果您還沒(méi)有打開(kāi)并行池,那么首先打開(kāi)它:

gcp; % Opens a parallel pool using your current settings

然后執(zhí)行幾個(gè)大循環(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..您會(huì)注意到,每次迭代的平均時(shí)間會(huì)增加(我的情況是0.27s到0.39s)。但是要意識(shí)到parfor使用所有可用的工人,因此總時(shí)間(sum(Time))必須除以計(jì)算機(jī)中的核數(shù)。因此,就我的情況而言,總時(shí)間從大約270秒下降到了49秒,因?yàn)槲矣幸粋€(gè)八進(jìn)制處理器。

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

結(jié)果

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


查看完整回答
反對(duì) 回復(fù) 2019-07-20
  • 2 回答
  • 0 關(guān)注
  • 1050 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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