- 1、本文档共27页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MATLAB程式設计入门篇程式码与记忆体之最佳化
MATLAB 程式設計入門篇:通用運算式 MATLAB 程式設計入門篇:通用運算式 MATLAB 程式設計入門篇程式碼與記憶體之最佳化 張智星 jang@.tw .tw/~jang 清大資工系 多媒體檢索實驗室 6.5 版之前,MATLAB 程式環境是一個傳統的解譯器(Interpreter),在執行 MATLAB的程式碼時,會進行下列動作: 逐列對程式碼轉換為 p-code,這是 MATLAB 可以解讀的格式。 對產生的 p-code 進行逐列執行。 2-1 程式碼的向量化 在執行每一列 p-code 時,都還包含一些「經常開銷」(Overhead) 該列執行需要大量運算,經常開銷就會顯得很渺小而不會拖累程式執行速度。 該列只是簡單的運算,那經常開銷的比例就會相對提高 該列是放在迴圈內,那麼程式碼的執行速度就會被這些經常開銷大幅拖慢。 2-1 程式碼的向量化 若要加快執行速度 MATLAB 6.5 版之前,就要盡量不使用迴圈 ,而盡量改用向量化的運算,以降低經常開銷的比例。 MATLAB 6.5 版(含)之後,已經加入了 JIT-Accelerator,有效地降低了經常開銷的比例,同時也使得向量化程式碼的重要性越來越低。 對向量化運算來進行說明,主要著眼點在於: 很多舊的程式碼還是包含向量化的運算。 MATLAB 6.5 之前的版本,向量化的運算還是提高執行效率的主要關鍵。 某些情況下,JIT-Accelerator 的效能無法完全發揮,還是需要配合向量化的運算才可以讓程式碼更有效率。 2-1 程式碼的向量化 2-1 程式碼的向量化 計算 n 項調和數列的總和,若使用 for 迴圈,當 n = 100,000 時,可計算其執行時間如下: 範例2-1:hsum01.m tic n = 100000; total = 0; for i = 1:n total = total+1/i; end toc elapsed_time = 2.63000 由上可知,當 n = 100,000 時,使用 for 迴圈的程式碼約需 2.63 秒才能執行完畢。若改用向量化的運算,可計時如下: 範例2-2:hsum02.m tic n = 100000; sequence = 1:n; total = sum(1./sequence); toc elapsed_time = 0.0600 2-1 程式碼的向量化 提示 上述的測試時間是根據Pentium-450, 256 MB RAM在 MATLAB 6.1 所得到的結果。如果你的電腦更快,計算時間的差異性就不會那麼顯著。 在 MATLAB 6.5 版之後,採用了 JIT (Just-In-Time) 的編譯技術,因此「向量化」和「非向量化」的程式執行速度,已經幾乎沒有差異。 要能夠熟練地運用向量化的運算,有下列三要素: 對矩陣的索引(Indexing)非常熟悉。 對 MATLAB 可用的內建(Built-in)指令非常瞭解。 對 MATLAB 可用的內建(Built-in)指令非常瞭解。 2-1 程式碼的向量化 一矩陣 x,若要將 a 的每一個元素乘上 x 的每一個直行,我們可使用內建的 diag 指令來達成此功能,例如: 範例2-3: colMultiply01.m x = [1 2 3; 1 1 1]; a = [3 2 1]; y = x*diag(a) y = 3 4 3 3 2 1 2-1 程式碼的向量化 使用 diag 指令,也可以將 a 的每一個元素乘上 x 的每一個橫列,例如: 範例2-4: rowMultiply01.m x = [1 2 3;4 5 6]; a = [3 1]; y = diag(a)*x y = 3 6 9 4 5 6 2-1 程式碼的向量化 將一個行向量拷貝 n 份,可執行如下: 範例2-5:copyCol.m a*ones(1, n) 也可以產生相同的效果。 n = 10; a = [1 3 7]; rep = a(:, ones(1,n)) rep = 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 3 3 3 7 7 7 7 7 7 7 7 7 7 2-1 程式碼的向量化 將一個
您可能关注的文档
- CloningWhereIsItLeadingUs課件.ppt
- CMOS集成電路设计.ppt
- ERP應用与实践中的关键问题.ppt
- ETF的概念和投資原理.ppt
- fastutil介紹.ppt
- FBs系列PLC高級应用篇高速计数定时器课件.ppt
- Fdiggmp3課件.ppt
- FE4000寬温型系列.ppt
- FPGA的開发流程ppt.ppt
- FRaphalAAubrgeJMBoivinADeluzenov20課件.ppt
- 2025届云南省丽江市高中毕业生复习统一检测化学试题及答案.docx
- 2025届云南省丽江市高中毕业生复习统一检测生物试题及答案.docx
- 2025届云南省丽江市高中毕业生复习统一检测英语试题及答案.docx
- 2025届云南省丽江市高中毕业生复习统一检测物理试题及答案.docx
- 显性与隐性双重天津商业步行街改造评价调查.pdf
- 2025届云南省丽江市高中毕业生复习统一检测语文试题及答案.docx
- 奔驰威霆TVC创意脚本提报.pptx
- 2025届云南省丽江市高中毕业生复习统一检测历史试题及答案.docx
- 2025届浙江省Z20名校联盟高三上学期第二次联考地理试题及答案.docx
- 2025届浙江省北斗星盟高三上学期12月月考政治试题及答案.docx
最近下载
- 新能源汽车驱动电机及控制系统检修 教案全套 项目1--4 驱动电机检修--- 驱动电机冷却系统检修.pdf
- 部编优质课一等奖初中语文七年级下册《寻找最美对联》.ppt VIP
- 乳腺癌的护理.ppt
- 焦炉调温工考试:冶金焦炉调温工考试试题及答案五.docx VIP
- 焦炉调温工考试:冶金焦炉调温工考试试题预测三.docx VIP
- 焦炉调温工考试:冶金焦炉调温工考试.docx VIP
- 英语电影赏析.ppt
- 焦炉调温工考试:初级焦炉调温工考试考试题五.docx VIP
- 2024-2025学年湘教版小学二年级美术教学计划参考范本(三篇).pdf VIP
- 焦炉调温工考试:初级焦炉调温工考试必看题库知识点五.docx VIP
文档评论(0)