Seite 9 von 13 ErsteErste ... 5678910111213 LetzteLetzte
Ergebnis 161 bis 180 von 245

Thema: 0x12 = 18??? - Das (Computer-)Geek-Quiz

  1. #161
    Zitat Zitat von Brainstar Beitrag anzeigen
    Größere Sprünge bei der Adresse von A?
    Sorry, ich verstehe die Antwort nicht.
    Das sollte schon etwas ausfuehrlicher sein, denn wieso sollten groessere Spruenge in der Addresse ein Problem sein bzw das Problem beheben ?

  2. #162
    Ich bin mir nicht sicher wie genau eine solche Schleife bei Parallelisierung auf einem 2-CPU-System abgearbeit wird, aber mein Tipp wäre, daß es bei der abwechselnden Variante (1 Prozessor ungerade, der andere die geraden Indizes) zur Überlappung beim Speicherzugriff kommt, da aufgrund des Shared Memorys beide Prozessoren denselben Speicherbereich bearbeiten.

    Das Problem hierbei ist:
    Wenn Prozessor1 gerade den Wert von A[i] in den Speicher schreibt kann Prozessor2 zurselben Zeit nicht den Wert von A[i+1] auslesen und muss warten bis Prozessor1 mit dem Schreiben fertig ist. (Da Prozessor1 die "Leitung" zum RAM blockiert)

    Arbeiten beide CPUs auf einem jeweils festem Bereich des Arrays ist es vorstellbar, daß der C-Compiler entsprechend optimiert und die zu bearbeitenden Segmente des Arrays jeweils in großen Brocken im Cache des Prozessors zwischengespeichert werden. Dadurch können beide Prozessoren gleichzeitig große Teile des Arrays bearbeiten ohne sich beim Speicherzugriff in den Weg zu kommen.

    Beim Einkernprozessor ist es vermutlich ebenso die fehlende Optimierung über den Cache die zu einer minimalen Verlangsamung führt, da die CPU bei jedem durchlauf zwischen "lesen" und "schreiben" hin und herschalten muss anstatt einmal einen großteil in den Cache laden und später einmal große Datenmengen aus dem Cache in den RAM schreiben.
    Bei einem sehr großen Array kann sich dieser minmale Zeitverlust vermutlich zu bemerkbaren Verzögerungen aufsummieren.

  3. #163
    Diese Antwort lasse ich als richtig gelten. Magor ist dran.

    Hier die genaue Aufloesung:

    Prozessoren greifen nicht direkt auf den RAM zu, sondern haben idR zwei Cache Level, ueber die sie gehen. Das heisst, will man ein einzelnes Byte aus dem RAM holen, so wird zuerst ein grosser RAM Block (Eine sogenannte Cache Line) in den Second Level Cache geladen. Ein kleiner Ausschnitt daraus wird dann in den First Level Cache geladen, und das einzelne Byte von dort in ein Register der CPU. Brauch man nun das Byte neben dem zuvor geladenen Speicher, so befindet es sich bereits im Cache und kann schnell geladen werden. Das hat entscheidende Geschwindigkeitsvorteile, denn ein Zugriff auf den L1 Cache kann in ca 10 Prozessorcycles erfolgen, Zugriff auf L2 dauert bereits etwa 100 Zyklen und direkter Zugriff auf den RAM laesst die CPU auch schon mal gerne 1000 Zyklen warten.

    Warum nun also die Verzoegerung auf dem Zweiprozessorsystem ? Ganz einfach: Jede der zwei CPUs hat mindestens einen einzigen L1 Cache. Im Fall das der eine gerade und der andere ungerade Indices bearbeitet passiert folgendes. Beide Prozessoren kopieren zu begin den selben Speicherinhalt in ihren Cache. Der erste Prozessor 1 (P1) liest nun seine Speicheraddresse und veraendert ihren Inhalt. P2 tut das selbe, muss aber feststellen, das P1 schon Daten in der selben Cache Line geaendert hat, also muss er die Cach Line aus dem Cache von P1 erst in den Cache von P2 kopieren, seinen Index laden und veraendern. Nun sieht aber P1 das die Cache Line veraendert wurde, usw ...

    Im Falle des Einprozessorsystems und der falschen Schleifenanordnung ist es sehr aehnlich: nehmen wir folgenden einfachen C-Code:
    Code:
    int x,y;
    for (x=0; x<width; ++x) {
      for (y=0; y<height; ++y) {
        A[x][y]+=1;
      }
    }
    C speichert mehrdimensionale Arrays zeilenweise ab. Das heisst, das im Speicher zuerst alle Elemente fuer y=0 stehen, danach die Elemente fuer y=1 usw. (In Fortran ist es z.B. genau andersrum). Dadurch das aber y in der inneren Schleife steht, muss jedes Mal eine andere Zeile in den Cache kopiert werden. Allein durch das Vertauschen der beiden Schleifen kann der Code bis zu acht mal schneller ausgefuehrt werden, da dann die Elemente jeder Zeile bereits im Cache stehen und auch verwendet werden koennen.

    dead_orc: Ich habe die Diskussion zu dieser Aussage mal hierhin ausgelagert.

    Geändert von dead_orc (26.05.2008 um 09:00 Uhr)

  4. #164
    Hm, gerade das mit den 2D-Arrays in C ist sehr interessant, die kleinen Optimierungsmöglichkeiten die man hat wenn man weiß wie das ganze im Hintergrund abläuft. =)

    Ich freue mich einfach mal hier auch mal was richtig gewußt zu haben und notiere mir dafür einen Gummipunkt. *notier*
    Da ich keinerlei Ideen für passende Fragen/Rätseln habe gibt es eine erneute Freirunde.

  5. #165
    Einfach damit das hier nicht einschläft mal wieder eine etwas einfachere Frage:
    Was gibt der "Load" auf UNIX-Systeme an? (Lässt sich z.B. durch den Befehl uptime oder cat /proc/loadavg anzeigen)

  6. #166
    Zitat Zitat von dead_orc Beitrag anzeigen
    Einfach damit das hier nicht einschläft mal wieder eine etwas einfachere Frage:
    Was gibt der "Load" auf UNIX-Systeme an? (Lässt sich z.B. durch den Befehl uptime oder cat /proc/loadavg anzeigen)
    Das war iirc die Auslastung des Systems. Ich weiß aber nicht mehr, wie der berechnet wird. Wahrscheinlich aus CPU Auslastung, Speicherverbrauch, offenen Prozessen und irgendwelchen anderen obskuren Daten

    Edit:
    Schade, aber ich bin ja auch ein böser Windowsuser, ich muss das nicht wissen :P

    Geändert von Manni (26.05.2008 um 18:07 Uhr)

  7. #167
    Zitat Zitat von Manni Beitrag anzeigen
    Das war iirc die Auslastung des Systems.
    Immerhin etwas, aber ich denke, das ist offensichtlich.

    Zitat Zitat
    Ich weiß aber nicht mehr, wie der berechnet wird.
    Schade, genau das wollte ich eigentlich wissen.

    Zitat Zitat
    Wahrscheinlich aus CPU Auslastung, Speicherverbrauch, offenen Prozessen und irgendwelchen anderen obskuren Daten
    OK, damit hast du dich disqualifiziert.

    Edit: Schade, dass es keine Antworten gab.
    Als Auflösung die Kurzfassung: Der "Load" bzw. "Load Average" oder deshalb auch kurz LA gibt die durchschnittliche Länge der Run Queue des Prozessors über einen Zeitraum an. Die erste Zahl ist innerhalb der letzten Minute, die zweite innerhalb der letzten 5 Minuten und die letzte schließlich in den letzten 15 Minuten. Lustigerweise habe ich heute grade nen Artikel über UNIX Load Average gefunden, wer sich also noch informieren will, kann das da tun.

    Geändert von dead_orc (30.05.2008 um 12:57 Uhr)

  8. #168
    Kommt nix mehr? Dann hab ich mal ne einfache Frage:

    Woher kommt der Name der Linux-Distribution Fedora und was bedeutet er?

    Geändert von DFYX (02.06.2008 um 20:16 Uhr)

  9. #169
    Ein Fedora ist ein Hut (so ein Ding das die Leute in alten Gangsterfilmen tragen... dieses Typische Privatdetektiv-Ding, dazu passend einen Trenchcoat, Zigarre & co.... mir fällt grad ein... indy hat auch sowas in der Art an...)

    edit:
    Ok, Indy hat nicht nur sowas in der art an. Egal. Da es DFYX noch nicht als Antwort ausreicht, weiter gehts.

    Geändert von FF (02.06.2008 um 20:29 Uhr)

  10. #170
    Logo von Red Hat(Distri) -> roter Fedora(Hut) und Fedora(Distri) stammt von Red Hat(Distri) ab.

    Geändert von Drakes (02.06.2008 um 21:08 Uhr)

  11. #171
    Zitat Zitat von Drakes Beitrag anzeigen
    Logo von Red Hat(Distri) -> roter Fedora(Hut) und Fedora(Distri) stammt von Red Hat(Distri) ab.
    Das ist genau das, was ich hören wollte.

  12. #172
    Dann machen wir gleich in diese Runde weiter, was heisst das Wort "Buch" in der Sprache der 'Ubuntus'? Nicht ne Wissensfrage, aber auch nicht einmal Google und fertig (extra undeutliche Fragestellung)

  13. #173
    Ubuntu kommt aus der Sprache der Xhosa bzw. Zulu
    Es bedeutet soviel wie Gemeinsinn.
    Das Xhosa'sche Wort für Buch wäre "incwadi"

  14. #174
    Brainstar: Gnah. Ich habs zuvor im IRC gepostet, und nicht hier. Und jetzt warst du auch noch schneller T_T

  15. #175
    Zitat Zitat von Freierfall Beitrag anzeigen
    Brainstar: Gnah. Ich habs zuvor im IRC gepostet, und nicht hier. Und jetzt warst du auch noch schneller T_T
    Brainstar ist dran.

  16. #176
    *sigh* So wird das hier nie was.

    Was ist der (die) Unterschied(e) zwischen Symlinks unter UNIX und Verknüpfungen unter Windows?

    Zusatzfrage: Was ähnelt den Verknüpfungen mehr?

  17. #177
    Symlinks werden auf Dateisystemebene verarbeitet, Windows-Verknüpfungen sind vom Explorer verwaltete normale Files. Oder so.

    Wenn's richtig ist, Freirunde.

  18. #178
    Zitat Zitat von mq Beitrag anzeigen
    Symlinks werden auf Dateisystemebene verarbeitet, Windows-Verknüpfungen sind vom Explorer verwaltete normale Files. Oder so.
    Genau das wollte ich hören.

    Zitat Zitat von dead_orc Beitrag anzeigen
    Zusatzfrage: Was ähnelt den Verknüpfungen mehr?
    Das sind natürlich die *.desktop Dateien, wie sie z.B. unter Ubuntu in /usr/share/applications liegen. Sie werden im Prinzip genau so verwendet ("Startmenü"-Einträge, Desktop-Icons, ...), können aber wesentlich mehr Informationen enthalten. (etwa mehrsprachige Titel)

    Zitat Zitat
    Wenn's richtig ist, Freirunde.

  19. #179
    Zitat Zitat von mq Beitrag anzeigen
    Wenn's richtig ist, Freirunde.
    Gut, dann frage ich mal: Warum ist die Benutzung der super() Funktion in Python problematisch?

  20. #180
    Es suggeriert, wie in Ruby, die selbe Methode der Superklasse aufzurufen; tatsächlich ruft es aber nur die nächste Methode in der MRO (Method Resolution Order - afaik) auf.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •