ความแตกต่างที่สำคัญ – ขึ้นอยู่กับเครื่องเทียบกับการเพิ่มประสิทธิภาพรหัสที่ไม่ขึ้นกับเครื่อง
โปรแกรมคอมพิวเตอร์คือชุดคำสั่งที่มอบให้กับฮาร์ดแวร์เพื่อทำงาน โปรแกรมเหล่านี้ส่วนใหญ่เขียนด้วยภาษาระดับสูง และคอมพิวเตอร์ไม่เข้าใจภาษานั้น ดังนั้นคอมไพเลอร์จึงถูกใช้เพื่อแปลงคำสั่งเหล่านั้นเป็นรหัสเครื่องหรือรหัสเป้าหมาย ต้องผ่านหลายขั้นตอนเพื่อสร้างโค้ดเป้าหมาย การเพิ่มประสิทธิภาพโค้ดเป็นหนึ่งในนั้น มีเทคนิคการเพิ่มประสิทธิภาพสองแบบ เช่น การปรับให้เหมาะสมตามเครื่องและรหัสที่ไม่ขึ้นกับเครื่อง ความแตกต่างที่สำคัญระหว่างการเพิ่มประสิทธิภาพโค้ดที่ขึ้นกับเครื่องและการปรับโค้ดที่ไม่ขึ้นกับเครื่องคือ การปรับให้เหมาะสมตามเครื่องถูกนำไปใช้กับโค้ดอ็อบเจ็กต์ ในขณะที่การเพิ่มประสิทธิภาพโค้ดที่ไม่ขึ้นกับเครื่องจะใช้กับโค้ดระดับกลาง
การเพิ่มประสิทธิภาพรหัสขึ้นกับเครื่องคืออะไร
เมื่อแปลงซอร์สโค้ดเป็นโค้ดอ็อบเจ็กต์หรือโค้ดเป้าหมาย คอมไพเลอร์จะต้องผ่านหลายขั้นตอน ขั้นแรก ให้ซอร์สโค้ดแก่ Lexical analyzer ซึ่งสร้างโทเค็น จากนั้น เอาต์พุตจะถูกส่งไปยังตัววิเคราะห์ไวยากรณ์ ซึ่งจะตรวจสอบว่าโทเค็นที่สร้างขึ้นนั้นอยู่ในลำดับตรรกะหรือไม่ ผลลัพธ์นั้นถูกกำหนดให้กับตัววิเคราะห์ความหมาย สมมติว่ามีโค้ดเป็น p=q + r;
ที่นี่ p, q เป็นจำนวนเต็ม แต่ r เป็นทศนิยม การใช้ตัววิเคราะห์ความหมาย ตัวแปรจำนวนเต็ม c จะถูกแปลงเป็นทศนิยม ดังนั้นจึงทำการวิเคราะห์เชิงความหมาย เอาต์พุตของตัววิเคราะห์ความหมายไปที่ตัวสร้างโค้ดระดับกลาง มันส่งกลับรหัสกลางซึ่งจากนั้นไปที่เครื่องมือเพิ่มประสิทธิภาพโค้ด การปรับโค้ดให้เหมาะสมเป็นกระบวนการในการกำจัดคำสั่งโปรแกรมที่ไม่จำเป็นออกไปโดยไม่เปลี่ยนความหมายของซอร์สโค้ดจริง ไม่ใช่การเพิ่มประสิทธิภาพภาคบังคับ แต่สามารถปรับปรุงเวลาการทำงานของโค้ดเป้าหมายได้ผลลัพธ์ของตัวเพิ่มประสิทธิภาพโค้ดจะถูกส่งไปยังตัวสร้างโค้ด และสุดท้าย โค้ดเป้าหมายก็ถูกสร้างขึ้น
รูปที่ 01: เฟสของคอมไพเลอร์
ในการเพิ่มประสิทธิภาพโค้ดที่ขึ้นกับเครื่อง การเพิ่มประสิทธิภาพจะถูกนำไปใช้กับซอร์สโค้ด การจัดสรรทรัพยากรในปริมาณที่เพียงพอสามารถปรับปรุงการทำงานของโปรแกรมในการเพิ่มประสิทธิภาพนี้ได้
การเพิ่มประสิทธิภาพโค้ดที่ไม่ขึ้นกับเครื่องคืออะไร
เมื่อทำการเพิ่มประสิทธิภาพโค้ดระดับกลางเสร็จแล้ว จะเรียกว่าการเพิ่มประสิทธิภาพโค้ดอิสระของเครื่อง มีเทคนิคต่างๆ ในการบรรลุการเพิ่มประสิทธิภาพโค้ดที่ไม่ขึ้นกับเครื่อง มีการอธิบายโดยใช้ตัวอย่างต่อไปนี้
อ่านโค้ดข้างล่างนี้
for (j=0; j<10; j ++) {
b=x+2;
a[j]=5 j;
}
ตามโค้ดด้านบน b=x+2 จะถูกคำนวณซ้ำแล้วซ้ำอีกในการวนซ้ำแต่ละครั้ง เมื่อคำนวณ b แล้ว จะไม่เปลี่ยนแปลง ดังนั้นบรรทัดนี้สามารถวางนอกลูปได้ดังนี้
b=x+2;
สำหรับ (j=0; j< 10; j++)
{a[j]=5j;
}
นี่เรียกว่าโค้ดเคลื่อนไหว
อ่านโค้ดข้างล่างนี้
j=5;
ถ้า (j==10) {
a=b+20;
}
ตามโค้ดด้านบน 'if block' จะไม่ทำงานเพราะค่า j จะไม่เท่ากับ 10 มันถูกตั้งค่าเริ่มต้นเป็นค่า 5 ดังนั้น ถ้าบล็อกสามารถลบออกได้ เทคนิคนี้เป็นการกำจัดโค้ดที่ตายแล้ว
อีกวิธีคือลดความแรง การคำนวณทางคณิตศาสตร์ เช่น การคูณ ต้องใช้หน่วยความจำ เวลา และรอบ CPU มากขึ้น นิพจน์ราคาแพงเหล่านี้สามารถแทนที่ด้วยนิพจน์ราคาถูก เช่น b=a2; หรือสามารถแทนที่ด้วยการบวก b=a + a;
ดูโค้ดด้านล่าง
for (j=1; j <=5; j ++) {
value=j5;
}
เปลี่ยนรหัสแทนการคูณได้ดังนี้
อุณหภูมิภายใน=5;
สำหรับ (j=1; j<=5; j++) {
อุณหภูมิ=อุณหภูมิ + 5;
value=อุณหภูมิ;
}
มันเป็นไปได้ที่จะประเมินนิพจน์ที่เป็นค่าคงที่ที่รันไทม์ เรียกว่าการพับแบบคงที่ สามารถระบุได้เช่น b[j+1]=c [j+1];
สามารถเปลี่ยนแปลงได้ดังนี้
n=j +1;
b[n]=c[n];
มีลูปได้ดังนี้
for (j=0; j<5; j++) {
printf(“a\n”);
}
for (j=0; j <5; j++) {
printf(“b\n”);
}
การพิมพ์ a และ b ทั้งคู่มีจำนวนการทำซ้ำเท่ากัน ทั้งสองสามารถรวมกันเป็นหนึ่งสำหรับลูปได้ดังนี้
for (j=0; j <5; j++) {
printf(“a \n”);
printf(“b\n”);
}
เทคนิคที่สำคัญอีกประการหนึ่งคือ การกำจัดนิพจน์ย่อยทั่วไป เป็นการแทนที่นิพจน์ที่เหมือนกันด้วยตัวแปรเดียวเพื่อทำการคำนวณ อ้างอิงรหัสร้อง
a=bc + k;
d=b c + m;
รหัสนี้สามารถแปลงได้ดังนี้
อุณหภูมิ=bc;
a=อุณหภูมิ + k;
d=อุณหภูมิ + m;
ไม่ต้องคำนวณ bc ซ้ำแล้วซ้ำเล่า ค่าคูณสามารถเก็บไว้ในตัวแปรและนำกลับมาใช้ใหม่ได้
ความคล้ายคลึงกันระหว่างเครื่องขึ้นอยู่กับเครื่องกับการเพิ่มประสิทธิภาพรหัสที่ไม่ขึ้นกับเครื่องคืออะไร
ทั้งสองนี้เป็นของ Code Optimization
ความแตกต่างระหว่างเครื่องขึ้นอยู่กับเครื่องและการเพิ่มประสิทธิภาพรหัสที่ไม่ขึ้นกับเครื่องคืออะไร
ขึ้นอยู่กับเครื่องเทียบกับการเพิ่มประสิทธิภาพโค้ดที่ไม่ขึ้นกับเครื่อง |
|
การเพิ่มประสิทธิภาพรหัสที่ขึ้นกับเครื่องถูกนำไปใช้กับรหัสวัตถุ | การเพิ่มประสิทธิภาพโค้ดที่ไม่ขึ้นกับเครื่องถูกนำไปใช้กับโค้ดระดับกลาง |
การมีส่วนร่วมกับฮาร์ดแวร์ | |
การเพิ่มประสิทธิภาพขึ้นอยู่กับเครื่องเกี่ยวข้องกับการลงทะเบียน CPU และการอ้างอิงหน่วยความจำแบบสัมบูรณ์ | การเพิ่มประสิทธิภาพโค้ดอิสระของเครื่องไม่เกี่ยวข้องกับการลงทะเบียน CPU หรือการอ้างอิงหน่วยความจำแบบสัมบูรณ์ |
สรุป – ขึ้นอยู่กับเครื่องเทียบกับการปรับแต่งรหัสอิสระของเครื่อง
Code Optimization ประกอบด้วยเทคนิคการเพิ่มประสิทธิภาพสองแบบ ได้แก่ การปรับให้เหมาะสมตามเครื่องและการเพิ่มประสิทธิภาพโค้ดที่ไม่ขึ้นกับเครื่อง ความแตกต่างระหว่างการเพิ่มประสิทธิภาพโค้ดที่ขึ้นกับเครื่องและโค้ดที่ไม่ขึ้นกับเครื่องคือ การปรับให้เหมาะสมตามเครื่องถูกนำไปใช้กับโค้ดอ็อบเจ็กต์ ในขณะที่การเพิ่มประสิทธิภาพโค้ดที่ไม่ขึ้นกับเครื่องจะถูกนำไปใช้กับโค้ดระดับกลาง
ดาวน์โหลดเวอร์ชัน PDF ของ Machine Dependent vs Machine Independent Code Optimization
คุณสามารถดาวน์โหลดไฟล์ PDF ของบทความนี้และใช้เพื่อวัตถุประสงค์ออฟไลน์ตามบันทึกการอ้างอิง โปรดดาวน์โหลดไฟล์ PDF ที่นี่ ความแตกต่างระหว่าง Machine Dependent และ Machine Independent Code Optimization