看板 C_and_CPP 關於我們 聯絡資訊
小弟目前用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
tropical72:沒有 memcpy 可以用嗎?memcpy 是組語寫的,效能強多了. 03/18 22:09
heymei0421:謝謝 我會加進去的QQ 03/18 22:42
james732:用系統提供的,不然就利用平行化 (不一定有效XD) 03/18 22:53
jackace:有沒有把-O3打開 這種程度的優化compiler應該做得到才對 03/18 22:57
jackace:不然就是用inline asm用xmm暫存器搬了 一次可以搬64bytes 03/18 22:59
jackace:不是 是搬32bytes 算錯了XD 03/18 23:01
jackace:不過用xmm班有啟動時間 所以適合大區塊的搬移 03/18 23:07
jackace:如果是多個小區塊的搬移的話還是請用一搬的memcpy吧 03/18 23:07
WeBurn:jackace: 不要亂用AVX的ymm寄存器啊,在老一點(2010以前) 03/19 04:29
WeBurn:該說第二代i3 i5 i7以上的才能用啊 不然會當機 03/19 04:30
Bencrie:-O3 -march=native 03/19 08:48
jackace:那就用xmm吧 windows kernel內部的rtlmemcpy也是靠xmm做的 03/19 09:51