作者EdisonX (卡卡兽)
看板C_and_CPP
标题Re: [问题] 问个基础问题,效能怎样会高
时间Wed Aug 31 00:27:51 2016
※ 引述《sec5566 (sec)》之铭言:
: 之前面试一家考试有一题是
: 两个程式哪个比较快
: 两个记得只差在
: 一个阵列是a[2][5]
: 一个是a[5][2]
: 这两个真的有差吗?
: 有一段时间了 题目其他部分不太记得
: 只记得其他行都一样
: 另外主要想问怎样的程式效能比较高
: 是程式比较短?还是回圈少?
: 还是差在变数型态?
: 我对这方面真的不知道耶
: 估过狗发现很少有资料
: 不过记算处理时间的文倒是满多的
: 重点不知道怎样变短
: 就算得到时间也不知为何
: -----
: Sent from JPTT on my Acer T02.
找到以前写的测试 code
http://pan.baidu.com/s/1slCe9Hj
一样周末删除载点,这里讲实测结论
( VS2010 , Release Mode , A(709x604) x B(604x384) )
Function Td
---------------------------------
mat_mul_1 2941 这四个方法都是较保守的
mat_mul_2 304 matrix 相乘,关键只有
mat_mul_3 122 index 存取顺序不同
mat_mul_3_2 117
mat_mul_block8 269 blocking 大小设 8
mat_mul_block16 223 blocking 大小设 16
mat_mul_block32 215 blocking 大小设 32
mat_mul_block64 200 blocking 大小设 64
mat_mul_block128 196 blocking 大小设 128
mat_mul_trans_2 147 将 B matrix 转置後相乘
mat_mul_trans_3 188 将 B matrix 转置後相乘
mat_mul_trans_3_bk64 245 将 B matrix 转置且配合 blocking64 实作
有些可能没写很好,但综合来说,这组专案就是 locality 对
速度的影响,在 mat_mul_1 ~ mat_mul_3 这里可以看出,让人
注意到直接做转置再相乘 (有多做 malloc 和 loop assign),
结果竟然也比 blocking 还快。
再强调,这是实验 locality (cache miss) 用的,真正 matrix
相乘有很多更快的解决方案了,如 FFT , 搭 CUDA 等,这些就不
赘述了。
以上,参考。
--
If there is no tomorrow,
I want to see u last time.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.177.73.92
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1472574475.A.7AE.html
1F:→ MOONRAKER: 转置 (transpose)。秩是rank。 08/31 14:12
谢谢指正。
2F:推 wtchen: 推 08/31 15:01
※ 编辑: EdisonX (180.177.73.92), 09/04/2016 15:07:50