ความแตกต่างระหว่างเครื่องขึ้นอยู่กับเครื่องและการเพิ่มประสิทธิภาพรหัสที่ไม่ขึ้นกับเครื่อง

สารบัญ:

ความแตกต่างระหว่างเครื่องขึ้นอยู่กับเครื่องและการเพิ่มประสิทธิภาพรหัสที่ไม่ขึ้นกับเครื่อง
ความแตกต่างระหว่างเครื่องขึ้นอยู่กับเครื่องและการเพิ่มประสิทธิภาพรหัสที่ไม่ขึ้นกับเครื่อง

วีดีโอ: ความแตกต่างระหว่างเครื่องขึ้นอยู่กับเครื่องและการเพิ่มประสิทธิภาพรหัสที่ไม่ขึ้นกับเครื่อง

วีดีโอ: ความแตกต่างระหว่างเครื่องขึ้นอยู่กับเครื่องและการเพิ่มประสิทธิภาพรหัสที่ไม่ขึ้นกับเครื่อง
วีดีโอ: ข้อแตกต่างระหว่างเครื่องยนต์ 2.4 กับ 2.8 2024, กรกฎาคม
Anonim

ความแตกต่างที่สำคัญ – ขึ้นอยู่กับเครื่องเทียบกับการเพิ่มประสิทธิภาพรหัสที่ไม่ขึ้นกับเครื่อง

โปรแกรมคอมพิวเตอร์คือชุดคำสั่งที่มอบให้กับฮาร์ดแวร์เพื่อทำงาน โปรแกรมเหล่านี้ส่วนใหญ่เขียนด้วยภาษาระดับสูง และคอมพิวเตอร์ไม่เข้าใจภาษานั้น ดังนั้นคอมไพเลอร์จึงถูกใช้เพื่อแปลงคำสั่งเหล่านั้นเป็นรหัสเครื่องหรือรหัสเป้าหมาย ต้องผ่านหลายขั้นตอนเพื่อสร้างโค้ดเป้าหมาย การเพิ่มประสิทธิภาพโค้ดเป็นหนึ่งในนั้น มีเทคนิคการเพิ่มประสิทธิภาพสองแบบ เช่น การปรับให้เหมาะสมตามเครื่องและรหัสที่ไม่ขึ้นกับเครื่อง ความแตกต่างที่สำคัญระหว่างการเพิ่มประสิทธิภาพโค้ดที่ขึ้นกับเครื่องและการปรับโค้ดที่ไม่ขึ้นกับเครื่องคือ การปรับให้เหมาะสมตามเครื่องถูกนำไปใช้กับโค้ดอ็อบเจ็กต์ ในขณะที่การเพิ่มประสิทธิภาพโค้ดที่ไม่ขึ้นกับเครื่องจะใช้กับโค้ดระดับกลาง

การเพิ่มประสิทธิภาพรหัสขึ้นกับเครื่องคืออะไร

เมื่อแปลงซอร์สโค้ดเป็นโค้ดอ็อบเจ็กต์หรือโค้ดเป้าหมาย คอมไพเลอร์จะต้องผ่านหลายขั้นตอน ขั้นแรก ให้ซอร์สโค้ดแก่ 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