מבוא לאופטימיזציה של קוד

7
לללל לללללללללללל לל ללל לללל לללל, "ללללל לללל" ללל ללללל לללללללל לללללללל לללל, לללללל2013

Upload: admon

Post on 20-Mar-2016

54 views

Category:

Documents


0 download

DESCRIPTION

מבוא לאופטימיזציה של קוד. עידו גנדל, "הבייט הלבן". כנס קהילת המייקרים הישראלית השני, אוגוסט 2013. מה זה אופטימיזציה?. שינוי של קוד תוכנה כך שישיג, על גבי חומרה זהה, את אותן התוצאות החישוביות – באופן יעיל יותר. מה זה "יעיל יותר"?. מהירות ריצה משופרת ו/או חסכון במשאבים (זיכרון, סוללה...). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: מבוא לאופטימיזציה של קוד

מבוא לאופטימיזציה של קודעידו גנדל, "הבייט הלבן"

2013כנס קהילת המייקרים הישראלית השני, אוגוסט

Page 2: מבוא לאופטימיזציה של קוד

מה זה אופטימיזציה?שינוי של קוד תוכנה כך שישיג, על גבי חומרה זהה, את אותן התוצאות החישוביות –

באופן יעיל יותר

מה זה "יעיל יותר"?מהירות ריצה משופרת ו/או חסכון במשאבים )זיכרון, סוללה...(

מה זה מעניין אותי?)התוכנה שלי עובדת וזה מה שחשוב, לא?(

כשתגדל, תבין!

Page 3: מבוא לאופטימיזציה של קוד

Photograph by Rama, Wikimedia Commons, Cc-by-sa-2.0-fr

Photograph by Jacob Appelbaum, Wikimedia Commons, Cc-by-sa-2.5

pcgamer.com

דונלד קנות'[The Art Of Computer Programming]

"אופטימיזציה בטרם זמנה היא שורש כל רע."

טוני הור[QuickSort]

"לא משנה עד כמה המחשב זול ומהיר - יהיה זול ומהיר עוד יותר להשתמש בו בצורה יעילה."

מייקל אבראש[Quake]

אופטימיזציה של הקוד הגולמי מביאה לשיפור של עד פי עשרה; של הרעיון הכללי – עד פי מאה.

Page 4: מבוא לאופטימיזציה של קוד

TFT-LCDהמשימה: ציור "קו אופק" בזמן אמתי – עם ארדואינו ומסך

ציור מלא76,800 Pixels = ~2 FPS

ציור שורות שהשתנו בלבד

38,400 Pixels = ~4 FPSציור הפרשים בלבד

4,451 Pixels = ~34.5 FPS

חלק ראשון: אופטימיזציה של הרעיון הכללי

Page 5: מבוא לאופטימיזציה של קוד

TFT-LCDהמשימה: ציור "קו אופק" בזמן אמתי – עם ארדואינו ומסך

חלק שני: אופטימיזציה של הקוד הגולמי )דוגמאות נבחרות(

התוצאות )אם האינטרנט יעבוד...(https://www.youtube.com/watch?v=FKUSZhqeixw

. בטיחות זה לחלשים1

. אופטימיזציה בהפוכה2Loop:For x = 1 to 50 Draw Pixel// 100 cycles

Loop unwinding:For x = 1 to 10 Draw Pixel Draw Pixel Draw Pixel Draw Pixel Draw Pixel// 60 cycles

?

Page 6: מבוא לאופטימיזציה של קוד

#include <util/delay.h>int main() { while (1) { PORTB += 32; _delay_ms(1000); }}

#include <util/delay.h>int main() { while (1) { _delay_ms(1000); PORTB += 32; }}

int led = 13;

void setup() { pinMode(led, OUTPUT); }

void loop() { digitalWrite(led, HIGH); delay(1000); digitalWrite(led, LOW); delay(1000);}

1116 (3.6%)

196( 0.064%)

208 (0.068%)

ומה עם האופטימיזציה של הקומפיילר עצמו?

John William Waterhouse, Magic Circle, 1886

Page 7: מבוא לאופטימיזציה של קוד

יעילות

השקעה

אופטימיזציה אופטימלית

תודה!