Re: [問題] 矩陣運算

看板C_and_CPP作者 (人生的轉捩點)時間15年前 (2010/10/09 16:30), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
※ 引述《stone0912 (開心石)》之銘言: : 遇到的問題: (題意請描述清楚) : 矩陣運算耗費太久的時間 : 舉例說明: : EX1: ~矩陣運算~ : int A[62][62][34]; : for (int i=-90;i<=90;i++){ : for (int j=-90;j<=90;j++){ : for (int iii=1;iii<=61;iii++){ : for (int jjj=1;jjj<=61;jjj++){ : for (int kkk=1;kkk<=33;kkk++){ : A[iii][jjj][kkk]=(iii+jjj)/kkk }}}}} : 就需要10多秒~ : ====================================================================== : EX2: ~矩陣累加~ : int A[62][62][34]; : int main(){ : for (int i=-90;i<=90;i++){ : for (int j=-90;j<=90;j++){ : for (int iii=1;iii<=61;iii++) { : for (int jjj=1;jjj<=61;jjj++) { : for (int kkk=1;kkk<=33;kkk++) { : A[iii][jjj][kkk]=A[iii][jjj][kkk]+(iii+jjj)/kkk; }}}}} : 則需20多秒~ : 是否有針對"矩陣運算" 及 "矩陣累加"進行時間改善的方法??? : 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) : VC++ 關於這種龐大卻邏輯簡單的運算 我之前曾經玩過類似的東西 做個簡單的經驗分享 也希望強者不要鞭太大力 前面幾篇文章大家都有提到CUDA的優勢 GPU在這種簡單的運算擁有非常強大的優勢 不過要花個幾千塊買一張顯示卡 另外也有人提到BLAS 使用別人已經最佳化的lib 基本上效率極有可能倍數成長 小時候對於GFLOPs 很感興趣 想要用自己寫的簡單加乘運算來達到理論值 結果卻很受挫 號稱數十GLOPs的CPU 用簡單的for-loop寫 通常了不起 1~5 GLOPs Compiler的最佳化效果也很有限 根本連一半的GLOPs都達不到 後來自己依照CPU cache的大小稍微改寫一下 效率就倍增了 不過離理論值總是還有一大段距離 後來挖了個 intel MKL(math kernel library)來用 印象中真的可以逼近理論值 跟自己最佳化過後的code比 又再次倍增 最後用簡單的幾句話總結一下 有錢 + 有時間 -> CUDA 沒錢 + 沒時間 -> 找個lib來用比較實在 當然 程式複雜度也許可以思考一下 是不是真的一定得要硬幹 也許有更簡化的算法? 或者是直接把結果存起來重複使用 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.64.222
文章代碼(AID): #1Ci9YPlU (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
4
11
完整討論串 (本文為第 4 之 4 篇):
問題
2
4
問題
0
3
問題
4
11
文章代碼(AID): #1Ci9YPlU (C_and_CPP)