看板 C_and_CPP 關於我們 聯絡資訊
請問一下各位大大 如果現在有兩個大小為20萬以上的一維陣列 那如果要把 A 陣列的東西都丟給 B 陣列 大家會選擇用memcpy 還是就用一個 for 迴圈 去做? 或是有其他更好的方法可以用呢? 再請問一下如果 要做 A 陣列 + B 陣列用SSE要怎麼做呢? SSE要怎麼一次載入四個值 是要先有二個大小為 4 的陣列 然後把 A 跟 B 的前四個值先丟進去再用SSE的指令load進來還是怎樣 如果是上述的方法 那這樣用SSE的加速效果會因為要把四個值丟進去大小為四的 陣列裡而有影響呢? -- 拿阿! 拿回去還是一輩子當x教授的魁儡 一輩子做實習 寫程式 要的話你就拿回去! 九世宅男:下輩子不要再讓我讀工科~~~~~~~~!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.216.83
softwind:memcpy 因為可以把效能責任推給compiler廠商! 02/19 00:07
softwind:just for fun, OK 可以使用 for loop 02/19 00:08
softwind:為了more fun 那就 練習使用 stream/string movement 02/19 00:09
softwind:stream/string move, X86/ARM都不一樣 可以玩玩 ^^ 02/19 00:10
stupid0319:用rep movsd 02/19 00:26
linkone:st大說的是組語嗎 要怎麼在c++裡使用呢? 02/19 00:28
stupid0319:mov edi,B ; mov esi,A ; mov ecx,200000 ; rep movsd 02/19 00:29
stupid0319:for loop就算了........ 02/19 00:33
WPC001:memcpy/ CopyMemory的底層應該就是直接被翻成rep movsd 02/19 01:14
Ebergies:雖然沒有測但老實說我認為 for loop 也會被翻成最有效率 02/19 01:27
purpose:SSE: www.csie.ntu.edu.tw/~r89004/hive/sse/page_4.html 02/19 01:40
ykjiang:以 Keil C51 來說, for loop 會比較有效率 02/19 01:48
ykjiang:memcpy 敗在它是通用的,實在是非戰之罪 :p 02/19 01:49
ykjiang:如果效率對你真那麼重要,應該花些時間都測試一下 02/19 01:50
wowtiger:rep movsd 會比 mov eax, [esi] mov [edi], ecx 慢喔 02/19 22:47
wowtiger:打錯了 是 mov [edi], eax 02/19 22:48
wowtiger:原因是 rep movsd 是屬於 legacy 用法 沒被硬體最佳化過 02/19 22:49