看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 寫XOR和System比效能,但算出的cpu時間都是0求解 餵入的資料(Input): 111.....11^000.....00 預期的正確結果(Expected Output): 應該會出現大於0毫秒 錯誤結果(Wrong Output): 0毫秒 程式碼(Code):(請善用置底文網頁, 記得排版) #include <stdio.h> #include <stdlib.h> #include <time.h> char XOR(char, char); int main(void) { clock_t start_tick, end_tick; long long elapsed; char A[128], B[128],C[128]; int i; for (i = 1; i < 128; i++) { A[i] = '0'; B[i] = '1'; } start_tick = clock(); //---system XOR--- for (i = 1; i < 128; i++) C[i] = A[i] ^ B[i]; end_tick = clock(); elapsed = end_tick - start_tick; printf("System XOR using time:%f\n", elapsed); //------------------------------------------------------------------------ start_tick = clock(); //---my XOR--- for (i = 1; i < 128; i++) C[i] = XOR(A[i], B[i]); end_tick = clock(); elapsed = end_tick - start_tick; printf("My XOR using time:%f\n", elapsed); system("pause"); return 0; } char XOR(char A, char B) { if (A == B) return '0'; else return '1'; } 補充說明(Supplement): 此程式為了比較我寫的XOR (不使用^) 跟直接用系統的XOR (使用^) ,在效能上有沒有差 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.41.4.182 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1440754340.A.F83.html chigi: CUP 抱歉已修改 08/28 17:36 ※ 編輯: mark182908 (114.41.4.182), 08/28/2015 17:57:44 ※ 編輯: mark182908 (114.41.4.182), 08/28/2015 18:05:05
bdvstg: 用clock 單位最小就毫秒 但他沒有超過1 就變0了這樣 08/28 18:32
了解但我查了一下C似乎最小時間單位是毫秒,請問大大有其他方法能到更精準嗎?謝謝 ※ 編輯: mark182908 (114.41.4.182), 08/28/2015 19:42:13
Feis: 你比較的目的是甚麼? 08/28 19:43
我的目的是為了比較我自己寫的XOR和系統呼叫的XOR在執行速度上差多少,不好意思沒寫清楚 ※ 編輯: mark182908 (114.41.4.182), 08/28/2015 19:59:56
Feis: 那就跑個一萬次? 08/28 20:03
Feis: 雖然我是覺得這樣意義不大 08/28 20:03
fatrabitree: 意義不大,而且感覺你的會比較慢 08/28 20:23
x000032001: 你的要call 比較慢 不過編譯器會最佳化 08/28 20:44
x000032001: 加上你計算量小 測也沒意義 08/28 20:45
了解謝謝各位,那請問XOR怎麼寫才會跟系統一樣快呢? ※ 編輯: mark182908 (114.41.4.182), 08/28/2015 20:53:22
bdvstg: 用系統的 (逃 08/28 20:56
哈哈好像滿有道理的喔!
x000032001: xor就是一條cpu指令而已 用系統的就好了 08/28 20:59
那我懂了,但我還想請教x大若不使用系統的XOR,那我的方法算好嗎?因為做專題需要教授要我寫出最好的XOR,不好意思問題有點多... ※ 編輯: mark182908 (114.41.4.182), 08/28/2015 21:09:19 ※ 編輯: mark182908 (114.41.4.182), 08/28/2015 21:10:16
showken: 兩個bit相加取低位元 08/28 21:39
不知道是不是小弟我才疏學淺,但C好像沒有辦法用Binary,若有煩請大大解答謝謝
zetab: elapsed是long long怎麼會用%f印... 08/28 21:55
不好意思用錯已改成double宣告
chuegou: 感覺教授是希望以數位邏輯概念,用and.or.not去兜 08/28 23:26
謝謝大大醍醐灌頂
james732: 要比單一的硬體指令還要快…我有點難想像XD 08/29 01:08
我覺得可能是要試著寫到很接近的意思
putumaxally: A[i] ^ B[i] 這不對吧 08/29 02:25
putumaxally: 雖然'0'跟'1'在最LSB是差1,不過拿char來xor好嗎 08/29 02:28
已改成int謝謝提醒
putumaxally: 而且算出來的也是'\0'跟'\1' 08/29 02:32
TobyH4cker: 你寫的不叫做XOR吧 08/29 07:32
TobyH4cker: CPU上XOR是bitwise,你用一個8bits來代表0跟1有點… 08/29 07:35
我有在想這個問題,但查了資料後找不到方法宣告成bit...
jackylu63: A^B=(~A) & B | A & (~B) 用這個公式照寫就對了 08/29 07:58
jackylu63: Compiler 很聰明,寫成這樣子,他會自動幫你轉為A^B 08/29 08:00
TobyH4cker: 那這樣跟直接^就沒有差別了吧 08/29 08:01
jackylu63: 127次迴圈測不出來差異,就改用0x7fffffff就看得出來了 08/29 08:02
jackylu63: 沒錯,因為compiler太聰明了,即使寫function他都會幫 08/29 08:07
jackylu63: 你inline進去 08/29 08:07
謝謝j大受益良多!!
TobyH4cker: 好吧等等來看看assembly 08/29 08:31
謝謝大家的指導小弟我受教了!! ※ 編輯: mark182908 (114.41.4.182), 08/30/2015 23:25:03