(C) Yohai Devir234267 - November 20051 מבנה מחשבים ספרתיים 234267 תרגול מס ' 2: פרמטרים של הערכת ביצועים חוק אמדל.

Slides:



Advertisements
Similar presentations
ממיבחניםC שאלות ++.
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
1 Formal Specifications for Complex Systems (236368) Tutorial #4 Refinement in Z: data refinement; operations refinement; their combinations.
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
עיבוד תמונות ואותות בעזרת מחשב
מתמטיקה בדידה תרגול 3.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
משטר דינמי המשך – © Dima Elenbogen :55 חידה שכדאי לעבור עליה: 2011/ho/WCFiles/%D7%97%D7%99%D7%93%D7%94%20%D7%A2%D7%9D%20%D7%91%D7%95%D7%A0%D7%95%D7%A1.doc.
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
מה החומר למבחן ? כל החומר שנלמד בהרצאות ובתרגולים. לגבי backtracking: לא תידרשו לממש אלגוריתם, אך כן להבין או להשלים מימוש נתון. אחת משאלות המבחן מבוססת.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
שאילת שאלות שאלת חקר המפתח למנעול 1. שאילת שאלות – שאלת חקר מה ניתן לשנות ? :  בתנאים : טמפ ' או לחץ או הכלים, או הציוד  בחומרים : איכות או כמות או.
עיבוד תמונות ואותות במחשב אלכסנדר ברנגולץ דואר אלקטרוני : שיטות קידוד שיטות קידוד אורך מלת קוד ואנטרופיה אורך מלת קוד ואנטרופיה קידוד.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
(C) Yohai Devir January מבנה מחשבים ספרתיים תרגול מס' 10: שאלות ממבחנים – OOOE, BTB מבוסס על תרגול של אורן קצנגולד.
Multicycle MIPS תרגול כיתה מס' 13.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
Multi-Cycle MIPS דוגמאות. דוגמה 1 נתון קטע הקוד הבא: begin:addi $v0, $zero, -1 loop:add $a0, $a0, $a0 addi$v0,$v0,1 bne $a0, $zero, loop הניחו כי בתחילת.
1 The single cycle CPU. 2 Performance of Single-Cycle Machines Memory Unit 2 ns ALU and Adders 2 ns Register file (Read or Write) 1 ns Class Fetch Decode.
1 הקדמה מה נלמד ? כיצד מחשב בנוי. כיצד לנתח ביצועי מחשב. נושאים המשפיעים על מעבדים חדשים (cache, pipeline ) הספר המלווה Computer Organization & Design.
ערכים עצמיים בשיטות נומריות. משוואה אופינית X מציין וקטור עצמי מציינת ערך עצמי תואם לוקטור.
הקיבול איננו תלוי במטען ובפוטנציאל
A. Frank File Organization Transfer Time/Rate Parameters.
Data Structures, CS, TAU, Perfect Hashing 1 Perfect Hashing בעיה : נתונה קבוצה S של n מפתחות מתחום U השוואה ל - Hash : * טבלה קבועה (Hash רגיל - דינאמי.
Remember Remember The 5 th of November. תרגול 2 קובץ סדרתי.
1 Data Structures, CS, TAU, Perfect Hashing בעיה: נתונה קבוצה S של n מפתחות מתחום U השוואה ל- Hash : * טבלה קבועה (Hash רגיל - דינאמי) * רוצים זמן קבוע.
משטר דינמי – © Dima Elenbogen :14. הגדרת cd ו -pd cd - הזמן שעובר בין הרגע שראשון אותות הכניסה יוצא מתחום לוגי עד אשר אות המוצא יוצא מתחום.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
1 שלבי ביצוע הוראת מכונה (1) FETCH = קרא הוראה מהזיכרון ע " פ הכתובת שמכיל ה -PC. (2) DECODE = פענח את הפקודה וקרא את האוגרים הנחוצים ( אחד או שניים ).
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
מתמטיקה בדידה תרגול 2.
מבוא למערכות מחשב ואסמבלי
Points on a perimeter (Convex Hull) קורס – מבוא לעבוד מקבילי מבצעים – אריאל פנדלר יאיר ברעם.
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
שלבי ביצוע הוראת מכונה (1) FETCH = קרא הוראה מהזיכרון ע " פ הכתובת שמכיל ה -PC. (2) DECODE = פענח את הפקודה וקרא את האוגרים הנחוצים ( אחד או שניים ). (3)
1 ׃1998 Morgan Kaufmann Publishers פקודת ה- jump 4 bits 26 bits 2 bits 00 : כתובת קפיצה במילים : כתובת קפיצה בבתים … …
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
Practice session 3 תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי ) שיטות חישוב : Applicative & Normal Evaluation Partial Evaluation.
תרגיל כיתה 7 מבוא לטכנולוגיות מחשב CPE. – 2 – ארכיטקטורה של מעבד מודרני Execution Functional Units Instruction Control Integer/ Branch FP Add FP Mult/Div.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
Practice session 3.  תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי )  שיטות חישוב : Applicative & Normal Evaluation.
2003B Q5 Suppliers(sid, sname, city) Select sid from suppliers where city=‘jerusalem’ or sname like ‘%Smith’ Select sid from suppliers where city=‘jerusalem’
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
תרגול מס' 1: פרמטרים של הערכת ביצועים חוק אמדל
Computer Architecture and Assembly Language
Formal Specifications for Complex Systems (236368) Tutorial #1
מבנה מחשבים ספרתיים תרגול מס' 9: Out Of Order Execution.
ניתוח זמן ריצה (על קצה המזלג)
תרגול מס' 3: Data Hazards מבוסס על תרגול של מורן גביש
עבודה עם נתונים באמצעות ADO.NET
פרוקטוז, C6H12O6 , חד-סוכר מיוחד
ניתוח זמן ריצה (על קצה המזלג)
Marina Kogan Sadetsky –
ניתוח זמן ריצה (על קצה המזלג)
Shell Scripts בסביבת UNIX
תוכנה 1 תרגול 13 – סיכום.
עקרונות בסיסיים בתכנות Visual Basic
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Computer Architecture and Assembly Language
Presentation transcript:

(C) Yohai Devir November מבנה מחשבים ספרתיים תרגול מס ' 2: פרמטרים של הערכת ביצועים חוק אמדל

(C) Yohai Devir November ארכיטקטורה מול מיקרו ארכיטקטורה שני דברים שמשלימים זה את זה. ארכיטקטורת המעבד מגדירה את הממשק בין המשתמש ( קומפיילר או מתכנת ) לבין המעבד. הממשק – סט הפקודות ( סוג פקודות, מספר אופרנדים, שיטות מיעון וכדומה ). למעבדים שונים תתכן ארכיטקטורה שונה. מיקרו ארכיטקטורה - המבנה הפנימי של המעבד.

(C) Yohai Devir November זמן CPU ומדידת ביצועים מושגים והגדרות CPU – יחידת העיבוד המרכזית של המחשב. זהו רכיב סינכרוני ( עובד בהתאם לאות של שעון פנימי ). ה - ALU הינו החלק ב - CPU שמבצע את החישובים האריתמטיים. קצב השעון (Clock Rate): מספר הפעימות שמבצע השעון הפנימי של המחשב בשנייה אחת. נמדד בהרצים ( מגה הרץ = מליון פעימות לשנייה ). מחזור השעון (Clock Cycle): משך הזמן בין שתי פעימות עוקבות שמבצע השעון הפנימי של המחשב. נמדד בשניות (1 nanosec = sec ).

(C) Yohai Devir November Instruction Count – מספר פקודות המכונה ( לא שורות !) בתכנית מחזורים לפקודה (CPI = Cycles Per Instruction): מספר מחזורי השעון הדרושים בממוצע לביצוע כל פקודה בתכנית. שימו לב – זהו פרמטר שתלוי בתוכנית. מחזורים לפקודה i (CPI i = Cycles Per Instruction i): מספר מחזורי השעון הדרושים לביצוע פקודה אחת מסוג i. זמן ריצה או זמן CPU (execution time): הזמן שלוקח למעבד לבצע תכנית. נמדד בשניות. ניתן לחישוב ע " י

(C) Yohai Devir November חישוב CPI לתכנית מבחן (benchmark) Ii – מספר הפעמים שהפקודה i בוצעה בתכנית. IC – מספר ההוראות הכולל שבוצע בתכנית. שאלה : האם CPI נמוך יותר גורר בהכרח מחשב מהיר יותר ?

(C) Yohai Devir November מדדים " אובייקטיביים " MIPS = Millions of Instructions Per Second כמה מיליוני פעולות מבצע המעבד בשנייה בעיה : מדד MIPS תלוי בסט הפקודות של המכונה ובהרכב תכנית הבדיקה. אם במעבד מסוים יש פקודות אסמבלר מורכבות יותר, שלוקח הרבה זמן לבצע אותן, אבל עקב כך צריך להשתמש בפחות פקודות מאשר במעבדים אחרים כדי לבצע את אותם דברים, אז מדד ה - MIPS שיתקבל עבור אותו מחשב יהיה נמוך, ולא בהכרח בצדק.

(C) Yohai Devir November MFLOPS – Millions of Floating Point Operations Per Second הכוונה היא לכמה פעולות floating point ( פעולות אריתמטיות על משתנים מסוג float או double) בשפה עילית ( כמו C) ולא בשפת אסמבלר. בעיה 1: MFLOPS מחושב ביחס לזמן הריצה של תכנית בשפה עילית ולכן תלוי בקומפיילר. קומפיילר טוב יבצע אופטימיזציה ולכן זמן הריצה יהיה קצר יותר. בעיה 2: פעולות שונות אורכות משכי זמן שונים ( למשל : חיבור שני מספרי FP הוא מהיר לעומת חילוק ). MFLOPS תלוי בסוג הפעולות המופיע בתוכנית.

(C) Yohai Devir November פתרון : נגדיר מדד חדש : MFLOPS משוקלל - נוסיף שקלול של פעולות FP שונות עפ " י זמן הביצוע שלהן. כלומר, סופרים את מספר ההופעות בתכנית של סוגי הפעולות השונות, ונותנים להם משקל שונה בציון הסופי. לדוגמא : Add, sub cmp, mult1 Div, sqrt4 Exp, sin8

(C) Yohai Devir November בעיה משותפת לשני המדדים הקודמים : שניהם תלויים בתוכנית שבחרנו כ - benchmark. צריך תמיד להשקיע מחשבה בשאלה איזו תכנית נבחר. מדדים אמיתיים – תכניות אמיתיות ( מעבד תמלילם, גיליון אלקטרוני, תכנת נווט ) מדדים סינטטיים – אוסף פקודות שאמור לייצג תכנית ממוצעת ( יש דבר כזה ?). מדדים משולבים – אוסף תוכניות אמיתיות וסינטטיות, משוקללות עפ " י מפתח כלשהו. שני המדדים שראינו הם מלאכותיים ובעייתיים, ולכן נשתדל להשוות בין מעבדים בתנאים כמה שיותר דומים : אותה תכנית בדיקה, אותו קומפיילר וכדומה. להגברת הדיוק, רצוי להריץ כמה תוכניות ולשקלל את התוצאות. המדד הכי טוב יהיה השוואת זמני הביצוע של אותן תכניות ע " ג כל אחד מהמעבדים.

(C) Yohai Devir November דוגמא א ' נתון מחשב בו כל הפקודות מתבצעות בין רגיסטרים, והגישה לזיכרון היא רק דרך load\store. שכיחות הפקודות בתכנית המבחן : בבדיקה נמצא שרבע מפקודות ה - ALU משתמשות באחד האופרנדים בנתון שהובא בפקודת LOAD קודמת ומשמש רק לפקודת ALU זאת. שאלה : מוצע להוסיף לסט הפקודות פקודת ALU שמבצעת ישירות פעולה בין רגיסטר לבין תא בזיכרון ( במקום LOAD ואחריו פקודת ALU בין שני רגיסטרים ). פקודה זאת תבוצע עם CPI=2 אבל תגדיל את ה CPI של פקודת BRANCH ל - 3. CPI שכיחותהפקודה 140%ALU 220%LOAD 210%STORE 230%BRANCH

(C) Yohai Devir November פתרון לפני השיפור : CPI (old) = 0.4* * * *2 = 1.6 CPU_Time (old) = IC (old) * CPI (old) * CC (old) = 1.6 * IC (old) * CC (old) אחרי השיפור :

(C) Yohai Devir November דרך פתרון שונה, נוחה יותר, לחישוב זמן הריצה לאחר השינוי : נאמר שבתכנית המקורית יש 100 פקודות, ואז ע " פ האחוזים הנתונים, אפשר לדעת מהו מספר הפקודות מכל סוג : CPI i אחרי השינוי מספר פקודות אחרי השינוי CPI i לפני השינוי מספר פקודות לפני השינוי הפקודה ALU LOAD 2102 STORE 3302 BRANCH 210MEM-ALU מתוך 40 פקודות ALU שהיו – עכשיו רק ¾ נשארו פקודות ALU, כלומר 100*0.4*¾=30 שאר ¼ פקודות ALU הפכו לפקודות MEM-ALU : 100*0.4*¼=10 כל פקודת MEM-ALU מחליפה גם פקודת LOAD, ולכן נותרו רק 20-10=10 פקודות LOAD

(C) Yohai Devir November שימו לב ! מספר הפקודות הכולל ירד עקב השינוי : IC = = 90. צריך להשוות מחזורי שעון לפני ואחרי השינוי : Cycles_new = 30*1 + 10*2 + 10*2 + 30*3 + 10*2 = 180 Cycles_old = 40*1 + 20*2 + 10*2 + 30*2 = 160 מכיוון שקצב השעון לא השתנה מספיק להשוות את מספר מחזורי השעון לפני ואחרי השינוי. אחרת היינו צריכים לחשב CPUtime, כלומר להכפיל ב - CC

(C) Yohai Devir November דוגמא ב ' נתונים שני מחשבים בעלי תדר שעון של 100MHz, המריצים אותה תכנית מבחן (benchmark) בעלת פילוג הפעולות ( בשפה עילית ) הבא : שכיחותפעולה 10% כפל FP 15% חיבור FP 5% חילוק FP 70% פעולות INT המחשב הראשון, מחשב MFP בעל חומרה ייעודית לחישוב פעולות FP מבצע כל פעולה במספר מחזורי שעון שונה. המחשב השני, מחשב NMFP יכול לבצע רק פעולות בשלמים, מריץ את התכנית באמולציה – המהדר ( הקומפיילר ) מתרגם כל פעולת FP למספר פעולות INT שאורכות כ " א 2 מחזורי שעון. מספר מחזורי שעון במחשב MFP פעולה 6 כפל FP 4 חיבור FP 20 חילוק FP 2 פעולות INT מספר פעולות INT שמבוצעות לכל פקודת FP במחשב NMFP פעולה 30 כפל FP 20 חיבור FP 50 חילוק FP

(C) Yohai Devir November א. חשב את מדד ה - MIPS של שתי המכונות. להזכירכם : CPI MFP = (0.10 * 6) + (0.15 * 4) +(0.05 * 20) +(0.70 * 2) = 3.6 CPI NMFP = 2 הסבר : מחשב ה - NMFP מבצע רק פעולות INT שאורכות 2 מחזורי שעון. שימו לב שמדד ה MIPS של מחשב NMFP גבוה מזה של MFP !

(C) Yohai Devir November ב. מחשב MFP מבצע את התכנית ב - 300*10 6 פקודות. כמה פקודות Integer נדרשות למחשב NMFP כדי לבצע את התכנית ? פעולהשכיחות מספר פעולות MFP כפל FP10% חיבור FP15% חילוק FP5% פעולות בשלמים 70% סה " כ 300*10 6 ג. מהו זמן הריצה של התכנית בשני המחשבים ? שימו לב להבדלי זמן הריצה ! פעולהשכיחות מספר פעולות MFP כפל FP10%30*10 6 חיבור FP15%45*10 6 חילוק FP5%15*10 6 פעולות בשלמים 70%210*10 6 סה " כ 300*10 6 פעולהשכיחות מספר פעולות MFP כמות פקודות באמולציה מספר פעולות NMFP כפל FP10%30* *10 6 חיבור FP15%45* *10 6 חילוק FP5%15* *10 6 פעולות בשלמים 70%210* סה " כ 300* *10 6

(C) Yohai Devir November ד. מהו מדד MFLOPS של שני המחשבים ? הסבר : מספר פעולות ה - FP בשני המחשבים שווה, כי סופרים FP בשפה עילית ולא חשוב איך הן ממומשות. הדבר השונה הוא חישוב זמן הביצוע שחישבנו בסעיף ג '. נשים לב שמדד MFLOPS של מחשב MFP גבוה יותר ממדד ממחשב NMFP, כלומר מכונה MFP מבצעת מהר יותר פעולות FP וזאת בניגוד למדד MIPS.

(C) Yohai Devir November חוק אמדל ניקח מכונה כלשהי שזמן הריצה של תכנית P עליה הוא ExTime old. נניח שאנו משפרים את המעבד כך שחלק Fraction מזמן ריצת התכנית ירוץ פי Speedup יותר מהר בזכות השיפור. השאלה היא מה יהא זמן הריצה כעת ? שימו לב : Fraction מתייחס לחלק הזמן, לא לחלק הפקודות או לחלק התכנית P.

(C) Yohai Devir November חוק אמדל פועל יוצא הוא שחישוב ההאצה הכללית שהשגנו ניתן לחישוב באופן הבא :

(C) Yohai Devir November דוגמא שינינו מעבד כלשהו באופן הבא : – ההוראות שמטפלות בנקודה צפה (floating point) ירוצו פי 2.5 יותר מהר. – פעולות גישה לזיכרון פי 3 יותר מהר. – פעולות חיבור / חיסור בשלמים פי 1.5 יותר לאט. מבדיקה עבור תוכנית מבחן עולה ש : – פעולות נקודה צפה תופסות 15% זמן מכלל תכנית המבחן. – פעולות זיכרון 20%. – פעולות חיבור / חיסור בשלמים – 40%. כמה שיפרנו בסך הכל ?

(C) Yohai Devir November

(C) Yohai Devir November ניתן להכליל גם לחישוב CPI ניתן לשימוש רק כאשר מספר הפקודות לא השתנה (Fraction צריך להיות תקף בשני המקרים )

(C) Yohai Devir November לדוגמא נתונה מכונה CISC- ית, רוצים להוציא דגם משופר מבוסס RISC כך שהוראות מסובכות יפורקו ( בפנים ) למספר הוראת פשוטות. כמו כן הצליחו במעבד החדש להשיג ביצוע הוראות סיעוף מהיר פי 2 ( במ " ש ) מאשר במעבד המקורי. מהרצת תוכנית מבחן התברר ש : – עבור 20% מזמן הביצוע של הקוד קיבלנו האטה של 70% במ " ש. אין שינוי בשאר ה -80%. – הוראות סיעוף תופסות 10% מזמן הביצוע ( שאינן נמנות על ה -20% שגרמו לגידול ). – פי כמה השתנה ה -CPI?

(C) Yohai Devir November דוגמא (2) מהרצת תוכנית אחרת : מתברר כי מניין ההוראות בקוד הדינאמי גדל ב -50%. תדר השעון לעומת זאת גדל פי 2. היחס בין ה CPI old ל CPI new נשאר כמו בתוכנית המבחן מהו שיפור הביצועים, אם בכלל, עבור תוכנית המבחן הנתונה ?

(C) Yohai Devir November שאלות א. נתונה תכנית מחשב בשפה עלית אשר מכילה 20 פעולות FP. התכנית רצה מהר יותר על מחשב A מאשר על מחשב B. אילו מהקביעות הבאות נכונה בהכרח לגבי המחשבים הנ " ל והתכנית הנתונה ? 1. למחשב A מדד MIPS גבוה או שווה לזה של מחשב B 2. למחשב A מדד MFLOPS גבוה או שווה לזה של מחשב B 3. ה - CPI של מחשב A גבוה או שווה ל - CPI של מחשב B 4. ה - CPI של מחשב A נמוך או שווה ל - CPI של מחשב B 5. קצב השעון של מחשב A גבוה או שווה לקצב השעון של מחשב B 6. זמן המחזור של מחשב B ארוך או שווה לזמן המחזור של מחשב A 7. אף תשובה אינה מתקיימת בוודאות.

(C) Yohai Devir November שאלות - המשך מה תהיה תשובתך לסעיף א ' כאשר מדובר על תכנית אסמבלר זהה הרצה על שני המחשבים ? 1. למחשב A מדד MIPS גבוה או שווה לזה של מחשב B 2. למחשב A מדד MFLOPS גבוה או שווה לזה של מחשב B 3. ה - CPI של מחשב A גבוה או שווה ל - CPI של מחשב B 4. ה - CPI של מחשב A נמוך או שווה ל - CPI של מחשב B 5. קצב השעון של מחשב A גבוה או שווה לקצב השעון של מחשב B 6. זמן המחזור של מחשב B ארוך או שווה לזמן המחזור של מחשב A 7. אף תשובה אינה מתקיימת בוודאות.

(C) Yohai Devir November backups

(C) Yohai Devir November דף נוסחאות לתרגול 1 1 nSec = Sec 1 MHZ = 10 6 HZ CR [hz] = 1 / CC [sec] CPI = Cycles / IC CPU time = CC * Cycles = CC * CPI * IC

(C) Yohai Devir November