Pipeline Pipeline-Stufe = Pipeline-Segment Pipeline-Register Pipeline-Maschinentakt Durchsatz einer Pipeline 1. Befehl holen 2. Befehl dekodieren 3. Operanden 4. Operation in der ALU 5. Resultat zurückschreiben IF ID EX MEM WB IF - Instruction Fetch - Befehlsholesphase ID - Instruction Decode/Register Fetch - Befehlsdekodier-Phase/Operanden-Hole-Phase EX - Execute/Adress Calculation - Ausführungsphase MEM - Memory Access - Speicherzugriffsphase WB - Write Back - Zurückschreibephase - Pipeline-Konflikte - Pipeline-Hemmnisse = Pipeline-Hazards 1. Datenkonflikte 2. Struktur- und Ressourcenkonflikte 3. Steuerflusskonflikte Datenkonflikte: 1. Echte Datenabhängigkeit - Lese-nach-Schreibe-Konflikte - Read after Write - RAW 2. Gegenabhängigkeit - Anti Dependence - WAR 3. Ausgabeabhängigkeit - Output Dependence - WAW Lösung: - Statische Befehlsanordnung durch den Compiler - Erkennung durch Hardware: Pipeline-Sperrung, Leerlauf der Pipeline - Pipeline Interlocking - Pipeline Stalling 1. Steuerflusskonflikte - BTAC - Branch Target Adress Cache - Branch Adress Cache - BTB - Branch Target Buffer - Return Adress Cache - bei Call 1. Predict Always not taken 2. Predict Always taken 3. Predict Backward taken, forward not taken 1-Bit-Prädiktor - genommen - T - Taken - nicht genommen - NT - Not Taken 2. Bit-Prädiktor - Predict strongly taken - Predict weakly taken - Predict weakly not taken - Predict strongly not taken fopen fclose putc fputc getc fgetc getch ungetc gets fgets puts fputs printf scanf fprintf fscanf sprintf scanf getline fflush fseek rewind ftell feof strerror perror ferror rename setbuf setvbuf fsetpos fgetps array_key_exists in_array krsort ksort sort rsort arsort asort r_print explode implode html head title body link base meta style