pipeline pipeline-stufe = pipeline-segment pipeline-register pipeline-maschinentakt durchsatz einer pipeline Befehl holen Befehl dekodieren Operanden Befehl ausführen Resultat zurückschreiben IF ID EX MEM WB IF = Instruction Fetch ID = Instruction Decode/Register Fetch EX = Execute MEM = Memory Access WB = Write Back IF = Instruction Fetch = Befehlsholephase ID = Instruction Decode/Register Fetch = Befehlsdekodierphase/Operandenholephase EX = Execute = Ausführungsphase MEM = Memory Access = Speicherzugriffsphase WB = Write Back = Resultatzurü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 - Schreibe-Nach-Lese-Konflikte - Write after Read - WAR 3.) Ausgabeabhängigkeit = Output Dependence - Schreibe-Nach-Schreib-Konflikte - Write after Write - WAW 1.) Behandlung durch den Compiler 2.) Erkennung durch die Hardware: Leerlauf einer Pipeline, Sperren einer Pipeline, Pipeline Stalling, Pipeline Interlocking Steuerflusskonflikte BTAC - Branch Target Adress Cache - Sprungzieladresscache Branch Adress Cache BTB - Branche Target Buffer Return Adress Cache - Rücksprungadressstapel bei CALL Einfache Sprungvorhersagetechniken 1.) Predict always not taken 2.) Predict always taken 3.) Predict backward taken, forward not taken 1-Bit-Prädiktor 1.) Genommen - T - Taken 2.) Nicht genommen - NT - Not Taken 2-Bit-Prädiktor 1.) Predict strongly taken 2.) Predict weakly taken 3.) Predict weakly not taken 4.) Predict Strongly not taken PHP: array_key_exists in_array ksort sort krsort ksort natcasesort natsort explode implode arsort sort C printf scanf fprintf fscanf sprintf sscanf puts gets fputs fgets putc getc getch fputc fgetc ungetc fseek rewind ftell fopen flcose feof ferror strerror perror fflush fsetpos fgetpos rename unlink remove mkstmp HTML html head body title base link meta