[問題] 怎麼提高效率?

看板C_and_CPP作者 (heymei)時間13年前 (2012/03/18 22:07), 編輯推噓2(2010)
留言12則, 6人參與, 最新討論串1/3 (看更多)
小弟目前用ubuntu為作業系統 用google所提供的工具來量測performance 好不容易搞了一個下午 總算把程式中各函式所執行的時間百分比弄出來 如下圖: http://ppt.cc/ueyv 這是我ubuntu的桌面 原本想說用好看點 沒想到此軟體弄出來的圖檔格式是ps 也懶得轉了。 從此圖我們可以看到my_memcpy,被呼叫7次卻佔程式18.9%的時間 所以我想說從這裡開始改,我去main檔看,發現程式很短如下 void my_memcpy (void *target, void *source, int size) { int i; unsigned char *target_ptr = target; unsigned char *source_ptr = source; for (i = 0; i < size; i++) { *(target_ptr + i) = *(source_ptr + i); } } 小弟是第一次接觸改效率方面的job = =看了老半天 也不知道慢在哪 爬了文好像也沒看到 相關可以讓執行速度更快的方法 所以只好上來求助大大們了.. ps:也可以貼相關網址給我 謝謝了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.160.88

03/18 22:09, , 1F
沒有 memcpy 可以用嗎?memcpy 是組語寫的,效能強多了.
03/18 22:09, 1F

03/18 22:42, , 2F
謝謝 我會加進去的QQ
03/18 22:42, 2F

03/18 22:53, , 3F
用系統提供的,不然就利用平行化 (不一定有效XD)
03/18 22:53, 3F

03/18 22:57, , 4F
有沒有把-O3打開 這種程度的優化compiler應該做得到才對
03/18 22:57, 4F

03/18 22:59, , 5F
不然就是用inline asm用xmm暫存器搬了 一次可以搬64bytes
03/18 22:59, 5F

03/18 23:01, , 6F
不是 是搬32bytes 算錯了XD
03/18 23:01, 6F

03/18 23:07, , 7F
不過用xmm班有啟動時間 所以適合大區塊的搬移
03/18 23:07, 7F

03/18 23:07, , 8F
如果是多個小區塊的搬移的話還是請用一搬的memcpy吧
03/18 23:07, 8F

03/19 04:29, , 9F
jackace: 不要亂用AVX的ymm寄存器啊,在老一點(2010以前)
03/19 04:29, 9F

03/19 04:30, , 10F
該說第二代i3 i5 i7以上的才能用啊 不然會當機
03/19 04:30, 10F

03/19 08:48, , 11F
-O3 -march=native
03/19 08:48, 11F

03/19 09:51, , 12F
那就用xmm吧 windows kernel內部的rtlmemcpy也是靠xmm做的
03/19 09:51, 12F
文章代碼(AID): #1FPUmzIF (C_and_CPP)
文章代碼(AID): #1FPUmzIF (C_and_CPP)