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 ?
Druckbare Version
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.
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:
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.Code:int x,y;
for (x=0; x<width; ++x) {
for (y=0; y<height; ++y) {
A[x][y]+=1;
}
}
dead_orc: Ich habe die Diskussion zu dieser Aussage mal hierhin ausgelagert.
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.
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
Immerhin etwas, aber ich denke, das ist offensichtlich. :p
Schade, genau das wollte ich eigentlich wissen.Zitat:
Ich weiß aber nicht mehr, wie der berechnet wird.
OK, damit hast du dich disqualifiziert. :DZitat:
Wahrscheinlich aus CPU Auslastung, Speicherverbrauch, offenen Prozessen und irgendwelchen anderen obskuren Daten ;)
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. :)
Kommt nix mehr? Dann hab ich mal ne einfache Frage:
Woher kommt der Name der Linux-Distribution Fedora und was bedeutet er?
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.
Logo von Red Hat(Distri) -> roter Fedora(Hut) und Fedora(Distri) stammt von Red Hat(Distri) ab.
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 :p (extra undeutliche Fragestellung)
Ubuntu kommt aus der Sprache der Xhosa bzw. Zulu
Es bedeutet soviel wie Gemeinsinn.
Das Xhosa'sche Wort für Buch wäre "incwadi"
Brainstar: Gnah. Ich habs zuvor im IRC gepostet, und nicht hier. Und jetzt warst du auch noch schneller T_T
*sigh* So wird das hier nie was. :o
Was ist der (die) Unterschied(e) zwischen Symlinks unter UNIX und Verknüpfungen unter Windows?
Zusatzfrage: Was ähnelt den Verknüpfungen mehr?
Symlinks werden auf Dateisystemebene verarbeitet, Windows-Verknüpfungen sind vom Explorer verwaltete normale Files. Oder so.
Wenn's richtig ist, Freirunde.
Genau das wollte ich hören. :D
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:
Wenn's richtig ist, Freirunde.
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.
Jo ist im Prinzip richtig. Problematisch wird das ganze bei Mehrfachvererbung, weil dann die MRO für seltsames Verhalten sorgen kann. Und das Mischen von super() und Aufrufen über die Klasse (Class.foo(obj, [...]) anstatt super(Class, obj).foo([...])) ist auch sehr böse, weil dann möglicherweise eine Methode doppelt aufgerufen wird - wenn man also super() benutzt, muss man es auch überall benutzen. Achja, was auch noch problematisch ist, wenn Methoden unterschiedliche Parameteranzahl haben, und das ganze dann über super() weitergegeben wird, kommt es auch da eventuell zu Fehlern... Mehr dazu gibt es hier.
Du bist dran :P
nenne ein Nicht-Microsoft-Betriebssystem, das mit Windows binärkompatibel ist!
Das dürfte so ziemlich das einzige sein, denke ich. Hab' allerdings auch noch nie auf einem Intel assembliert, könnte also leicht komplett falsch sein. <__<'Code:mov ecx,8
label_1:
dec ecx
call someproc
test ebx,ebx
jz label_2
inc ecx
loop label_1
jmp label_3
label_2:
dec ecx
loop label_1
label_3:
Naja, und wenn man someproc vorher kennt, wären evtl. noch einige andere Sachen möglich (OK, Inlining z.B., aber halt noch anderes).
Wobei natürlich auch die Frage ist, worauf man optimiert.
Edit: Witnogargf ist da gerade passiert? o_O Wenn ich endlich mal was weiß! O__O
Ich hatte mich geirrt. Ich wollte auf etwas hinaus, was bei DIESEM Beispiel keinen Sinn macht (self-modifying code: sub byte ptr [label2], 8), außerdem hatte ich versehentlich zweimal ecx verwendet (eigentlich sollte die Schleife über ecx und das inc/dec über edx laufen). Daher hab ich meine Frage schnell geändert. Aber offenbar zu langsam.
jo
okay, dann noch eine Frage: Welches Gerät (z.B. NUL, PRN, ...) erzeugt bei DR-DOS in Verbindung mit dem Befehl "type" eine endlose Schlange von Smilies (ASCII-Zeichen 0x01) als Ausgabe?
es ist CLOCK$.
http://cherrytree.at/misc/images/scr...inerWindow.png
Naja, dann mal wer anderer. Wird ja sonst langweilig der Monolog hier ;)
Was erwartest du auch bei solchen Fragen?
Mal etwas, was jeder angehender Informatiker nach der Ausbildung wissen muss:
Für was braucht man eine Subnetzmaske bei IPv4 ?
Um den Standardgateway zurückrechnen zu können?
Verdammt, das ist schon so lang her, ich wusste es mal sicher. xD
Och menno, lasst doch den Thread nicht dauernd sterben^^.
Frage, die für einen fortgeschrittenen Linuxuser Peanuts sind:
Mit welchem Dienstprogramm/Befehl konfiguriert man unter Linux ab Kernel 2.4 eine Firewall? Der Befehl ist absolut ausreichend. Beispielparameter o.Ä. sind nicht nötig...
iptables.
Wie heißt die (esoterische) Programmiersprache des folgenden Skripts?
Wenn das nicht leicht ist. ;-)Code:HAI
CAN HAS STDIO?
PLZ OPEN FILE "LOLCATS.TXT"?
AWSUM THX
VISIBLE FILE
O NOES
INVISIBLE "ERROR!"
KTHXBYE
War es nicht "lolcode"? ich weis ja nicht ob es dafuer schon einen Interpreter gibt, aber muesste es nicht auch VISIBLE "ERROR!" heissen, wenn VISIBLE das Print-Command ist?
INVISIBLE gibt auf STDERR aus anstatt auf STDOUT.
Wieso laesst sich folgendes C# Programm nicht kompilieren (und nicht nur den Fehler nennen, das geht ja einfach durch Copy&Paste in eine IDE)?
Code:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
public void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.ReadLine();
}
}
}
Die Main-Methode muss als static deklariert werden, damit das Programm ausgeführt werden kann, ohne dass die Klasse Program instanziiert werden muss. So hab ich das jetzt zumindest herausgefunden.
Da ich so unkreativ im Ausdenken von Fragen bin und mir erst recht nichts anspruchsvolles einfallen würde, geb ich ab. >_>
Freirunde.
Wie wollte Linus Torvalds seinen Kernel ursprünglich nennen?
freundliche Grüße, Rolus
FreaksFreakx natuerlich. Frei Runde wenn es stimmt (wird es wohl, da das buch hier auf meinem Schreibtisch steht und ich's grad nochmal nachgeschlagen habe (S. 97 in der deutschen Ausgabe; Zeile 7)
Stimmt eigentlich. Auch wenn mir nicht ganz klar ist, wieso du ein k vor das x gesetzt hast. Bin vorhin beim Stöbern in den Kernel 0.01 Sourcen über den Namen gestolpert. Die Kommentare sind teilweise nicht schlecht. :)
freundliche Grüße, RolusZitat:
Zitat von mktime.c
Toll mit der Zeilen- und Seitenangabe und so, aber ohne den Buchtitel wird das niemandem was bringen. :D (was es sowieso nicht tut :p hört sich eher nach ner guten Überbrückung der Mindest-Wort-Regel an.)
Es wäre scud gewesen.
http://npshare.de/files/37/2326/Scud.jpg
Scud ist in Toy Story der Hund von Sid, der genauso gerne Spielzeuge zerstör wie sein Herrchen.
Und in experimental landen hauptsächlich SVN- und Beta-Versionen sowie Programme, die noch nicht vollständig an Debian angepasst worden. KDE 4 war z.B. lange nur in dem Zweig verfügbar.
War die Frage doch zu schwer oder hat einfach keiner mehr Lust auf das Quiz? :(
Eine mögliche Antwort wäre das Travelling-Salesman-Problem gewesen, bei welchem man die kürzeste Rundreise durch n Städte sucht.
Wir koennten ja Punkte pro Antwort vergeben (hier mal der Stand bisher [bei unklaren Antworten, bei denen der Fragesteller keinen Sieger erklaehrt hat - Punkte fuer niemanden]):
Wie waere es mit dieser Frage:Code:dead_orc 4
drunken monkey 4
Crash-Override 3
DFYX 3
Drakes 3
Manuel 3
Cherry1 2
Indy 2
mq 2
Brainstar 1
Deathball 1
Don Cuan 1
Freierfall 1
kikka 1
MagicMagor 1
Maisaffe 1
Manni 1
Sephiroththe23 1
The Best Isaac 1
Underserial 1
Ynnus 1
Wie hiess der erste "Personal Computer", der 1975 schon (bei Selbstaufbau) fuer nur $439 zu erstehen war?
Altair 8800 und eigentlich ist er dann für $375 rausgekommen. 8)
Ja, der Altair war's, aber nach dem Englischen Wikipedia sind es meine $439.
So, damit bist du auch auf Platz 1 der eh "Hall of Geeks" oder so.
Code:dead_orc 4
Drakes 4
drunken monkey 4
Crash-Override 3
DFYX 3
Manuel 3
Cherry1 2
Indy 2
mq 2
Brainstar 1
Deathball 1
Don Cuan 1
Freierfall 1
kikka 1
MagicMagor 1
Maisaffe 1
Manni 1
Sephiroththe23 1
The Best Isaac 1
Underserial 1
Ynnus 1
ist das Alan Turing?
ich habe kein Bild gefunden, auf welchem er ähnlich alt ist, aber wirkt mir passend genug
Wenn ja, eine einfache Frage (passend zu Turing):
Wer kann mehr berechnen: ein Computer oder eine Postmaschine?
Was ist eine Postmaschine?
Ich würde mal sagen, dass beide das selbe berechnen können, sofern beide Turing-vollständig sind.
Das selbe frag ich mich auch.
Eine Postmaschine ist im Grunde nichts weiter, als ein mail Server. Also ein Computer.
Wenn er aber mit Postmaschine eine Briefsortieranlage meint, muss ich leider dazu sagen, dass die Sortierung über einen Server läuft. Vor 6 Jahren lief dafür ein Server mit 4x Pentium 3 Prozessoren und 4 GB RAM. Als OS lief dort Win2k Server.
Wie es heute aussieht, weiss ich nicht ^^
Also auch nur ein stinknormaler 100% kompatibler IBM Computer.
Und was hat der Turing-Test mit der Frage zu tun?
Meine Vermutung geht ja dahin, dass eine Postmaschine eine abstrakte Maschine ist, aber sicher bin ich mir da auch nicht - ich hab von Automaten keine Ahnung. :D
Das mit dem Turing-complete wäre mir vielleicht sogar auch noch eingefallen, wenn ich nicht die Frage so verstanden hätte, wer in der selben Zeit mehr berechnen kann. Im Bezug auf Turing (wie vor der Frage ja erwähnt ^^) macht die Antwort von malu Sinn, auch wenn ich ja vermute, dass nicht beide Turing-complete sind.
Schon lustig, dass aus einer Frage noch viel mehr Fragen entstehen. :rolleyes:
*seufz* Turing-Vollständigkeit hat nichts mit dem Turing-Test zu tun. Außer dass beides zufällig nach der gleichen Person benannt ist.
http://de.wikipedia.org/wiki/Turing-Test - Test auf Intelligenz
http://de.wikipedia.org/wiki/Turing_...%C3%A4ndigkeit - Begriff aus der Berechenbarkeitstheorie
Dennoch erklärt das nicht, was eine Postmaschine sein soll *seufz*
Denn ein MailServer oder eine Briefsortieranlage kann dies nicht sein.
Vielleicht meinst du auch die Briefmarkenautomaten.
Sobald ich weiss, läuft da Windows CE drauf und Windows wurde u.a. mit C geschrieben und C ist Turing-Vollständig.
Ich mein, selbst unter google findet man unter "Postmaschine" nichts, ausser ein paar amerikanische Seiten, die sowas wie MailServer anbieten.
Jo, das bleibt das große Mysterium. Ganz ehrlich, ich dachte mir zuerst irgendwie, dass das stark nach einer Scherzfrage klingt *g*
Da die Frage irgendwie unlösbar scheint, mache ich mal weiter...
Wie heißt der Open-Source Windows-Pendant?
Singularity, deren Erkenntnisse in das (nichtmehr offene) Midori fließen werden...
Ich denke, es ist eher ReactOS gemeint, der Versuch, Windows XP komplett als Open Source nachzubauen.
Jo DFYX ist richtig mit ReactOS.
Singularity ist zwar auch Open-Source, aber es verfolgt eine komplett anderen Aufbau als die bisherigen Windowse und ist daher eher eine Weiterentwiecklung(sogar nur ein Testsystem), als ein Pendant.
Woraus bestand das Gehäuse des ersten Google-Servers bzw. wie sah es aus?
Da Orkey keine neue Frage gestellt hat stelle ich mit Fyxens Erlaubnis eine Frage zur allgemeinen Erheiterung.
In jeder langjaehrigen Programmiererfahrung kommt es unweigerlich dazu, dass man sich die eine oder andere Macke beim Schreiben von wartbarem Code zuzieht, um die Lesbarkeit ungemein zu erhoehen. So ist gerade eben in einem kleinen Testprojekt bei mir folgende Codezeile entstanden ...
Diese Zeile steht mit einigem anderem kram in einer while(1) Schleife.Code:for( static int r,g,b,d=0; d=!d; backgroundcolor = RGB (
(++b>=32 && (b=0,++g>=32) && (g=0,++r>=32)) ? r=0 : r, g, b )) ;
Die Frage also: Was macht diese Codezeile bei wiederholtem Aufrufen ?
Nach einiger Dankzeit würde ich sagen, der Code folgendes macht:
Er ruft die For-Schleife nur ein einziges mal (Aufgrund von d=!d, was nur einmal true sein kann).
Dabei setzt er den Blauwert sowie, den Grünwert auf 0. Der Rotwert wird nur dann auf 0 gesetzt wenn beim Start der Schleife ++r ++g ++b >=32 sind, ansonsten behält r seinen Wert. Diese informationen werden, nun an eine Funktion geben die aus den Werten rgb eine einzige Variable macht, die die Hintergrundfarbe anzeigt. Daher:
Die Hintergrundfarbe ist rot (r ist nie größer 31 und g, b sind sowieso auf 0 gesetzt). Bei jedem neuem Durchlauf wird r um eins erhöcht und wird heller, bis r g b >= 31 sind, wo r = 0 gesetzt wird (oder einfach nur immer plus eins zählt und so immer heller wird bis es 255 ist und dann wieder umschwingt und von vorne beginnt).
Das ist was ich verstanden hab, bloss irgendwas sagt mir das es nicht stimmen kann, da diese Funktion irgendwie keinen Sinn ergibt o.O .
nop, nicht richtig. wirklich alles in der Zeile ist wichtig. und alle variablen koennen sich aendern.
Also doch wie ich gedacht habe, aber ich verstehe nicht ganz wieso das for-Konstrukt verwendet wird. RGB wird einmal pro Schleifenaufruf aufgerufen, und wenn man das jetzt so ungefährmachen würde, begäne das ganze von vorne. Um es zu veranschaulichen:
Wobei es am Schluss noch einen Spezialfall von 0, 31, 31 gibt.Code:for(int r=0; r<32; r++)
for(int g=0; g<32; g++)
for(int b=0; b<32; b++)
backgroundcolor = RGB(r, g, b);
was meinst du mit Spezialfall von 0,31,31 ?
Aber das ganze lasse ich mal gelten. Zwar wird backgroundcolor = RGB(r, g, b); nicht in so einer Schleife wie bei dir aufgerufen, sondern die Werte aendern sich bei jedem Durchlauf der While-Schleife einmalig, aber was solls.
Ich fand jedenfalls den Code schoen obscure und er verdeutlicht gut die Verwendung des Komma-Operators.
Drakes ist dran.
Wird nichts, Freirunde.
Btw. versteh ich eigentlich doch nicht ganz wie das da mit dem Kommaoperator funktioniert. o_O