rsync updatedb tree tre-a fflush perror strerror printf scanf fprintf fscanf rewind fseek ftell fopen flcose getc fgetc putc fputc getch sscanf sprintf gets fgets puts fputs read write clrerr remove fgetpos fsetpos Pipeline Pipeline-Hemmnis = Pipeline-Hazard Pipelinstufe = Pipeline-Segment Pipeline-Maschinentakt Durchsatz einer Pipeline 1. Befehl bereitstellen 2. Befehl dekodieren 3. Operanden 4. ALU 5. Result zurückschreiben/Speicherzugriff DLX-Pipeline: 1. IF - Instruction-Fetch = Befehlsbereitsstellungsphase 2. ID - Instruction Decode/Register Fetch = Befehlsdekodierphase 3. EX - Execute/Adress Calculation = Ausführungsphase 4. MEM - Memory Acces = Speicherzugriffsphase 5. WB - Write Back = Resultatspeicherphase 1. Datenkonflikte 2. Struktur- und Ressourcenkonflikte 3. Steuerflusskonflikte Datenkonflikte: 1. Echte Datenabhängikeit - Lese-Nach-Schreib-Konflikte - Read auf Write = RAW 2. Gegenabhängigkeit - Schreibe nach Lese-Konflikte - Write after Read = WAR 3. Ausgabeabhängikgigkeit - Schreibe-nach-Schreibe: WAW Lösung: - Durch den Compiler - statische Befehlsanordnung - Erkennung durch Hardware - Pipeline Interlocking - Pipeline-Stalling - Anhalten der Pipeline Dynamische Sprungvorhersage BTAC - Branch Target Adresss Cache BTB - Branch Target Buffer - Branch Target Adress - Branch Adress Einfachste Sprungvorhersagen: - Predict Always not taken - Predict always taken - predict forward taken, backward not taken - Ein-Bit-Prädiktor 1. Genommen - T - Taken 2. Nicht genommen - NT - Not-Taken - Zwei-Bit-Prädiktor 1. Predict strongly taken 2. Predict weakly taken 3. Predict weakly not taken 4. Predict strongly not taken