[問題] 問個基礎問題,效能怎樣會高

看板C_and_CPP作者 (sec)時間7年前 (2016/08/30 16:54), 7年前編輯推噓9(9017)
留言26則, 14人參與, 最新討論串1/2 (看更多)
之前面試一家考試有一題是 兩個程式哪個比較快 兩個記得只差在 一個陣列是a[2][5] 一個是a[5][2] 這兩個真的有差嗎? 有一段時間了 題目其他部分不太記得 只記得其他行都一樣 另外主要想問怎樣的程式效能比較高 是程式比較短?還是迴圈少? 還是差在變數型態? 我對這方面真的不知道耶 估過狗發現很少有資料 不過記算處理時間的文倒是滿多的 重點不知道怎樣變短 就算得到時間也不知為何 ----- Sent from JPTT on my Acer T02. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.72.112.232 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1472547281.A.D04.html

08/30 17:08, , 1F
Cpu cache
08/30 17:08, 1F

08/30 17:13, , 2F
row major
08/30 17:13, 2F
什麼? ※ 編輯: sec5566 (42.72.112.232), 08/30/2016 17:27:08

08/30 17:32, , 3F
array 在 mem 中的儲存方式 -> 載入 cache 哪個容易 miss
08/30 17:32, 3F

08/30 17:41, , 4F
這兩個寫法在記憶體的儲存方式不是一樣嗎?
08/30 17:41, 4F

08/30 17:43, , 5F
a[2][5] 跟 a[5][2] 跟 a[10] 都是連續記憶體配置吧?
08/30 17:43, 5F

08/30 17:46, , 6F
然後如果 loop 都是先動 col 再動 row,就是順序存取?
08/30 17:46, 6F

08/30 19:06, , 7F
跟順序存取比較無關 關鍵是他怎麼從mem load to cache的
08/30 19:06, 7F

08/30 19:07, , 8F
事實上目前的a[0][0] a[1][0] 這種方式也不會是順序存取
08/30 19:07, 8F
遇過韌體公司都考類似的程式 如果跟硬體有關 那就不懂他考這幹嘛了 ※ 編輯: sec5566 (42.72.112.232), 08/30/2016 19:46:52

08/30 19:57, , 9F
不懂,二維矩陣宣告(非malloc)預設不會用連續空間?
08/30 19:57, 9F

08/30 19:58, , 10F
如果是用**p宣告二維陣列我可以理解可能不會連續
08/30 19:58, 10F

08/30 20:16, , 11F
我倒覺得問題應該是出在原 PO 不記得的程式碼裡
08/30 20:16, 11F

08/30 20:20, , 12F
不要做多餘的事情,程式就會快
08/30 20:20, 12F

08/30 23:18, , 13F
速度有差啊 前三樓的原因
08/30 23:18, 13F

08/30 23:19, , 14F
買I7以上電腦
08/30 23:19, 14F

08/31 00:02, , 15F
話說這種東西應該跟compiler與hardware實作也會有關係?
08/31 00:02, 15F

08/31 00:04, , 16F
是 cache 沒錯,像是 matrix 相乘,加快的方式就是把第二
08/31 00:04, 16F

08/31 00:04, , 17F
個 matrix 轉秩後再相乘,便是用 cache 特性.
08/31 00:04, 17F

08/31 00:05, , 18F
若取出的資料和上一筆資料都在附近(locality),cache率高.
08/31 00:05, 18F

08/31 00:07, , 19F

08/31 00:09, , 20F
(所以才有 matrix mult. blocking 算法 )
08/31 00:09, 20F

09/04 12:20, , 21F
給了關鍵字先Google,看不懂網路文章再來問,這是常識
09/04 12:20, 21F

09/04 15:10, , 22F
問一下,有沒有辦法在跑程式的過程中偵測到cache miss?
09/04 15:10, 22F

09/04 15:11, , 23F
不是perf那種,而是讀取data的當下發現不在cache裡
09/04 15:11, 23F

09/04 15:11, , 24F
還是perf有函式庫可以套用到C program裏面?
09/04 15:11, 24F

09/13 00:41, , 25F
edisonx 正解
09/13 00:41, 25F

09/13 00:43, , 26F
malloc也有類似的問題
09/13 00:43, 26F
文章代碼(AID): #1NnKdHq4 (C_and_CPP)
文章代碼(AID): #1NnKdHq4 (C_and_CPP)