作者sec5566 (sec)
看板C_and_CPP
标题[问题] 问个基础问题,效能怎样会高
时间Tue Aug 30 16:54:38 2016
之前面试一家考试有一题是
两个程式哪个比较快
两个记得只差在
一个阵列是a[2][5]
一个是a[5][2]
这两个真的有差吗?
有一段时间了 题目其他部分不太记得
只记得其他行都一样
另外主要想问怎样的程式效能比较高
是程式比较短?还是回圈少?
还是差在变数型态?
我对这方面真的不知道耶
估过狗发现很少有资料
不过记算处理时间的文倒是满多的
重点不知道怎样变短
就算得到时间也不知为何
-----
Sent from JPTT on my Acer T02.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 42.72.112.232
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1472547281.A.D04.html
1F:推 damody: Cpu cache08/30 17:08
2F:推 sunev: row major08/30 17:13
什麽?
※ 编辑: sec5566 (42.72.112.232), 08/30/2016 17:27:08
3F:→ Eleina: array 在 mem 中的储存方式 -> 载入 cache 哪个容易 miss08/30 17:32
4F:→ carylorrk: 这两个写法在记忆体的储存方式不是一样吗?08/30 17:41
5F:→ carylorrk: a[2][5] 跟 a[5][2] 跟 a[10] 都是连续记忆体配置吧?08/30 17:43
6F:→ carylorrk: 然後如果 loop 都是先动 col 再动 row,就是顺序存取?08/30 17:46
7F:→ nowar100: 跟顺序存取比较无关 关键是他怎麽从mem load to cache的08/30 19:06
8F:→ nowar100: 事实上目前的a[0][0] a[1][0] 这种方式也不会是顺序存取08/30 19:07
遇过韧体公司都考类似的程式
如果跟硬体有关 那就不懂他考这干嘛了
※ 编辑: sec5566 (42.72.112.232), 08/30/2016 19:46:52
9F:→ wtchen: 不懂,二维矩阵宣告(非malloc)预设不会用连续空间? 08/30 19:57
10F:→ wtchen: 如果是用**p宣告二维阵列我可以理解可能不会连续 08/30 19:58
11F:→ Schottky: 我倒觉得问题应该是出在原 PO 不记得的程式码里 08/30 20:16
12F:→ bluesoul: 不要做多余的事情,程式就会快 08/30 20:20
13F:推 wuliou: 速度有差啊 前三楼的原因 08/30 23:18
14F:推 stupid0319: 买I7以上电脑 08/30 23:19
15F:→ james732: 话说这种东西应该跟compiler与hardware实作也会有关系? 08/31 00:02
16F:推 EdisonX: 是 cache 没错,像是 matrix 相乘,加快的方式就是把第二 08/31 00:04
17F:→ EdisonX: 个 matrix 转秩後再相乘,便是用 cache 特性. 08/31 00:04
18F:→ EdisonX: 若取出的资料和上一笔资料都在附近(locality),cache率高. 08/31 00:05
20F:→ EdisonX: (所以才有 matrix mult. blocking 算法 ) 08/31 00:09
21F:推 ronin728: 给了关键字先Google,看不懂网路文章再来问,这是常识 09/04 12:20
22F:推 wtchen: 问一下,有没有办法在跑程式的过程中侦测到cache miss? 09/04 15:10
23F:→ wtchen: 不是perf那种,而是读取data的当下发现不在cache里 09/04 15:11
24F:→ wtchen: 还是perf有函式库可以套用到C program里面? 09/04 15:11
25F:推 wope: edisonx 正解 09/13 00:41
26F:→ wope: malloc也有类似的问题 09/13 00:43