1 คะแนน โดย GN⁺ 2023-07-07 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • บทความที่สำรวจโอกาสในการปรับแต่งลูปของโค้ด C ที่สร้างโดย Clang
  • ลูปจะเพิ่มหรือลดค่าตัวเลขตามอักขระในสตริง
  • ผู้เขียนจัดเรียงลูปใหม่เพื่อปรับแต่งให้เหมาะกับอักขระ 'p' และ 's' แทน null terminator
  • ผู้เขียนลบการแตกแขนงตามเงื่อนไขโดยใช้เลขคณิตและ conditional move
  • โค้ดที่ปรับแต่งแล้วทำความเร็วได้ดีขึ้นอย่างมากถึง 6.73 เท่าเมื่อเทียบกับโค้ดเดิม
  • ผู้เขียนยังทดลองเทคนิคการปรับแต่งอื่น ๆ แต่พบว่ากลับทำให้โค้ดช้าลง
  • การตั้งค่าสำหรับการทำเบนช์มาร์กรวมถึง CPU AMD Ryzen 5 5625U และ Clang กับ GCC เวอร์ชันล่าสุด
  • บทสรุปคือการเขียนและปรับแต่งด้วยมือในระดับแอสเซมบลีสามารถนำไปสู่การเพิ่มความเร็วอย่างมากได้ในบางกรณี

1 ความคิดเห็น

 
GN⁺ 2023-07-07
ความคิดเห็นจาก Hacker News
  • โค้ดเดิมสามารถปรับให้เหมาะสมได้โดยใช้คำสั่ง if แทน switch
  • โค้ดเวอร์ชันที่ปรับให้เหมาะสมอีกแบบใช้คำสั่งแบบไม่มีการแตกแขนงอย่าง sete/cmov และสามารถทำความเร็วได้เท่ากับโค้ดแอสเซมบลีที่ปรับแต่งแล้ว
  • โค้ดเวอร์ชันที่ทำเวกเตอร์ไรซ์อาจเร็วกว่าได้อีกหากเป็นไปได้ โดยใช้คำสั่ง AVX-512
  • โปรเซสเซอร์รุ่นอื่นอาจมีลักษณะด้านประสิทธิภาพที่แตกต่างกันไปตามการแตกแขนง
  • ภาษา C เดิมถูกออกแบบมาเพื่อให้แปลโค้ดระดับระบบข้ามแพลตฟอร์มได้ง่าย และยอมแลกฟีเจอร์บางอย่างเพื่อสิ่งนี้