作者heymei0421 (heymei)
看板C_and_CPP
標題[問題] 怎麼提高效率?
時間Sun Mar 18 22:07:54 2012
小弟目前用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