PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] 阵列运算速度问题
楼主:
w0005151
(蓝厅)
2016-02-21 00:08:29
请教一下各位大大
最近有看到一个说法是C/C++在处理阵列时
用指标表示比用阵列表示的速度快
例如A,B是两个大小M*N的二维double阵列
他们的型态是(double*)[N]
假设我要让B阵列的元素值为A阵列对应位置的元素的两倍
有以下作法
for(I=0;I<M;I++)
for(J=0;J<N;J++)
B[I][J]=2*A[I][J];
或
for(I=0;I<M;I++)
for(J=0;J<N;J++)
*(*(B+I)+J)=2*(*(*(A+I)+J));
或可令double *ptr1=&A[0][0],*ptr2=&B[0][0]
for(I=0;I<M*N;I++)
*(ptr1+I)=2*(*(ptr2+I));
请问这几种写法的运算速度会有明显差别吗?
作者:
Caesar08
(Caesar)
2016-02-21 10:17:00
这种问题你自己写测试就知道
作者: LiloHuang (十年一刻)
2016-02-21 01:24:00
可用 -ftree-vectorizer-verbose=5 检查是否有成功被套用了 Auto-vectorization另外 cache friendly 可看看这篇
http://goo.gl/W0bJ9j
作者:
ronin728
(浪人)
2016-02-21 01:11:00
手边没电脑手机不好打字,这讲起来有点篇幅。所以自己查资料,或等其他高手讲解。再补充一个,可以用SIMD加速不过听说GCC开优化会自己加MMX,所以应该不用手动写就是了
楼主:
w0005151
(蓝厅)
2016-02-21 00:57:00
感谢大大回答,再弱弱的问一下cache friendly是@@?
作者:
ronin728
(浪人)
2016-02-21 00:51:00
不会,因*(ptr + n)与ptr[n]在x86组合语言都是一样的题外话,这除了改善算法,也要注意cache friendly总之,*(ptr+n)的速度与p[n]完全相同
楼主:
w0005151
(蓝厅)
2016-02-21 00:46:00
因为我之后处理很大的阵列,所以还是想知道哪种写法才是最好的@@
作者:
stupid0319
(征女友)
2016-02-21 00:36:00
明显差别一定是不可能的啦,除非拿很慢很慢的CPU来跑
继续阅读
[问题] 如何变更win32程式中 label的背景颜色
jyhchyunlu
[问题] uva548已ac但在线上编译器却无法执行?
ga544523
[问题] 又是一个指标问题= =...
kai5566
[问题] vc++ cannot open shared object file
yshihyu
[问题] 指标阵列 传递问题?想了超久
kai5566
[问题] 浮点数比较问题
popular10347
Re: [问题] printf & 型态转换
drag
[问题]学习unique_ptr遇到的compile error
shaopin
[问题] SDL2 RenderPresent 的叙述看不太懂
ResolaQQ
[问题] 关于用win32 API 开启档案
jyhchyunlu
Links
booklink
Contact Us: admin [ a t ] ucptt.com