作者MasterChang (我愛ASM)
看板C_and_CPP
標題Re: [問題] For迴圈 和 array 執行速度問題
時間Sun Oct 24 12:47:51 2010
來個隨便的測試
2.Process returned 0 (0x0) execution time : 3.969 s
int m = 100000, n = 100000, index = 0, i ,j;
for(i=0;i<m*n;i++)
{
index++;
}
1.Process returned 0 (0x0) execution time : 26.813 s
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
index++;
}
case 2 比 case 1 快6.75倍。
不過用哪種?看程式規模和代碼是不是「熱點」來決定,如果規模小,又
不是熱點段落。這種事就別計較了。
※ 引述《genghiskii (SaoAn)》之銘言:
: 大家好 小弟我有些觀念不是很清楚想請教大家
: 1.
: for(i=0;i<m;i++)
: for(j=0;j<n;j++)
: {
: //do something
: }
: 2.
: for(i=0;i<m*n;i++)
: {
: //do something
: }
: 有個同學跟我說2跑的會比1快,請問這是為什麼呢? 不是都是跑了m*n次?
: 另外還有個類似的問題
: 3.
: for(i=0;i<m;i++)
: for(j=0;j<n;j++)
: {
: array_2D[i][j]=some operation;
: }
: 4.
: for(i=0;i<m;i++)
: for(j=0;j<n;j++)
: {
: array_1D[i*m+j]=some operation;
: }
: 那個同學又跟我說4比3快,但是大小一樣,只有2D跟1D的差別,請問他說的是對的嗎?
: 我原以為速度上1=2, 3=4, 但是被他這麼一說我有點被搞混了
: 煩請各位解答 謝謝
--
不要問我從哪來,我只是一個浪跡天涯的工程師....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.232.20.160
※ 編輯: MasterChang 來自: 118.232.20.160 (10/24 12:49)
→ stupid0319:不是我要吐糟,10000*10000不會爆了int嗎 10/24 13:00
→ stupid0319:10000*10000=0x2540BE400=爆掉=0x540BE400=1410065408 10/24 13:02
→ stupid0319:10000000000/1410065408=7.09 10/24 13:05
→ stupid0319:最上面推文是100000*100000太多0了都會打錯XD 10/24 13:06
推 VictorTom:爆了就爆了啊, 只是要測迴圈效率不是嗎?? 除非overflow 10/24 13:14
→ VictorTom:造成loop condition改變, 或者因為register state改變會 10/24 13:14
→ VictorTom:影響效率(應該沒有這種事吧??) 另外, 不確定這個測試是 10/24 13:15
→ VictorTom:用release開了opt跑的, 還是debug沒開opt跑的@_@" 10/24 13:15
推 jimmycool:有差吧,上面那個只會跑1410065407次 10/24 13:19
→ jimmycool:1410065408次,抱歉XD 10/24 13:19
→ akasan:一樓的重點在於 m*n 就爆掉了XD 10/24 13:20
→ fjm31714:i事實上不會跑到那麼大? 10/24 13:22
推 VictorTom:糟, 看了a大的推文才看懂s大的點....Orz 10/24 13:24
推 M9665566:計算機概論 XD 10/24 13:24
→ VictorTom:本來以為在說index會爆Orz 10/24 13:24
→ M9665566:int 是 4 byte 且 有號數,範圍:-1*2^31 ~ 2^31-1 10/24 13:26