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

作者: sec5566 (sec)   2016-08-30 16:54:38
之前面試一家考試有一題是
兩個程式哪個比較快
兩個記得只差在
一個陣列是a[2][5]
一個是a[5][2]
這兩個真的有差嗎?
有一段時間了 題目其他部分不太記得
只記得其他行都一樣
另外主要想問怎樣的程式效能比較高
是程式比較短?還是迴圈少?
還是差在變數型態?
我對這方面真的不知道耶
估過狗發現很少有資料
不過記算處理時間的文倒是滿多的
重點不知道怎樣變短
就算得到時間也不知為何
作者: damody (天亮damody)   2016-08-30 17:08:00
Cpu cache
作者: sunev (Veritas)   2016-08-30 17:13:00
row major
作者: Eleina (艾琳娜)   2016-08-30 17:32:00
array 在 mem 中的儲存方式 -> 載入 cache 哪個容易 miss
作者: carylorrk (carylorrk)   2016-08-30 17:41:00
這兩個寫法在記憶體的儲存方式不是一樣嗎?a[2][5] 跟 a[5][2] 跟 a[10] 都是連續記憶體配置吧?然後如果 loop 都是先動 col 再動 row,就是順序存取?
作者: nowar100 (拋磚引玉)   2016-08-30 19:06:00
跟順序存取比較無關 關鍵是他怎麼從mem load to cache的事實上目前的a[0][0] a[1][0] 這種方式也不會是順序存取
作者: wtchen (沒有存在感的人)   2016-08-30 19:57:00
不懂,二維矩陣宣告(非malloc)預設不會用連續空間?如果是用**p宣告二維陣列我可以理解可能不會連續
作者: Schottky (順風相送)   2016-08-30 20:16:00
我倒覺得問題應該是出在原 PO 不記得的程式碼裡
作者: bluesoul (忙死你老爸)   2016-08-30 20:20:00
不要做多餘的事情,程式就會快
作者: wuliou (wuliou)   2016-08-30 23:18:00
速度有差啊 前三樓的原因
作者: stupid0319 (徵女友)   2016-08-30 23:19:00
買I7以上電腦
作者: james732 (好人超)   2016-08-31 00:02:00
話說這種東西應該跟compiler與hardware實作也會有關係?
作者: EdisonX (卡卡獸)   2016-08-31 00:04:00
是 cache 沒錯,像是 matrix 相乘,加快的方式就是把第二個 matrix 轉秩後再相乘,便是用 cache 特性.若取出的資料和上一筆資料都在附近(locality),cache率高.https://www.youtube.com/watch?v=IFWgwGMMrh0(所以才有 matrix mult. blocking 算法 )
作者: ronin728 (浪人)   2016-09-04 12:20:00
給了關鍵字先Google,看不懂網路文章再來問,這是常識
作者: wtchen (沒有存在感的人)   2016-09-04 15:10:00
問一下,有沒有辦法在跑程式的過程中偵測到cache miss?不是perf那種,而是讀取data的當下發現不在cache裡還是perf有函式庫可以套用到C program裏面?
作者: wope (獨立黑色色彩)   2016-09-13 00:41:00
edisonx 正解malloc也有類似的問題

Links booklink

Contact Us: admin [ a t ] ucptt.com