Cpu`s mit mehren Kernen, 32/64/128 bit für wen ändert sich was?



  • hustbaer schrieb:

    Zur "FORTRAN" Frage: einige Sprachen können grundsätzlich parallelisiert werden, z.B. funktionale Sprachen.
    Da es keinen (oder kaum) mutable State gibt ist das relativ einfach.
    Wenn ich in einer funktionalen Sprache etwas wie "return a(x) + b(y) + c(z)" habe kann ich das sofort in 3 threads aufspalten.

    Und dann gibt es Sprachen die es zwar nicht selbst machen, es dafür aber dem Programmieren sehr einfach machen. Wie z.B. CILK.

    Wieviele Sprachen kennst du eigentlich?..^^



  • rüdiger schrieb:

    Blue-Tiger schrieb:

    Was die Kerne angeht: du musst dein Programm eben Multithreaded designen. Das geht in C++ genauso schwer wie in .NET-Sprachen. Die Arbeit kann dir in absehbarer Zeit auch kein Compiler oder gar das Betriebssystem abnehmen.

    Für Fortran gibt es zum Beispiel Compiler die automatisch parallelisieren können...

    Man kann, wie bereits gesagt, automatisch ein bisschen was parallel machen. Aber einen seriell geschriebenen Code automatisch für einen Parallelrechner fähig zu machen ist ein Ding der Unmöglichkeit möchte ich mal behaupten. Es gibt zusätzlich zu den üblichen Frameworks wie OpenMP und MPI dann noch HPF, aber das ist auch eher ein Aufsatz auf Fortran.



  • so ein delete schreiben kostet doch nicht viel zeit..

    gibt es irgendwas, das der compiler des borland c++ builder 6 in der richtung kann ?
    kann man in c++ auch aufteilen ?
    wie kann man da für 64 bit systeme kompilieren ?



  • ich glaube als 10jahre vor 64 bit die 32bit kamen und man sich gerade mit 40MB Harddisk im olymp fuehlte (wenn ich mich richtig entsinne), hat auch niemand zu glauben gewagt dass in kurzer zeit der 4GB addressspace ausgeht. das wird bei 64bit auch recht flott passieren.

    zum multicore, intel sagt man soll so langsam paradigmen wechseln und nicht mehr in dual oder quadcore denken und programmieren, sondern seine software so designen, dass sie auf beliebig vielen cores laeuft und damit skaliert, weil es in zukunft rapide mehr cores geben wird. ende dieses jahres soll ja schon 8core rauskommen (ich glaube das las ich bei heise) und dann dauert es wie beim MHz-rennen nicht lange bis dann 128cores, 2048cores etc. in einem rechner stecken.

    hilfslibs wie openMP oder Intels codeblocks sind da auch nur kleine hilfen fuer jetzt um ein paar schleifen zu parallelisieren. am ende wird man unmengen an aufgaben erstellen muessen die unabhaengig (ohne sync) ablaufen koennen und sich die cores aus einer work-queue rausnehmen sobald sie fertig sind mit dem aktuellen job.



  • Helium schrieb:

    Bill Gates (1983) schrieb:

    Nobody will ever need more than 640 kB RAM.

    Quatsch... das "ever" kannst Du streichen. Die Aussage war eher "640 kByte should be enough for everybody", und zwar auf den damaligen Zeitpunkt bezogen und nicht auf "solange die Menschheit existiert und die Kühe grasen, wird niemals irgendjemand auf die dämliche Idee kommen, mehr als 640 kByte zu benötigen" 🙄



  • Rock Lobster schrieb:

    Helium schrieb:

    Bill Gates (1983) schrieb:

    Nobody will ever need more than 640 kB RAM.

    Quatsch... das "ever" kannst Du streichen. Die Aussage war eher "640 kByte should be enough for everybody", und zwar auf den damaligen Zeitpunkt bezogen und nicht auf "solange die Menschheit existiert und die Kühe grasen, wird niemals irgendjemand auf die dämliche Idee kommen, mehr als 640 kByte zu benötigen" 🙄

    Also im Netz finde ich beide Zitate deins von '81 meins von '83.



  • rapso schrieb:

    ich glaube als 10jahre vor 64 bit die 32bit kamen und man sich gerade mit 40MB Harddisk im olymp fuehlte (wenn ich mich richtig entsinne), hat auch niemand zu glauben gewagt dass in kurzer zeit der 4GB addressspace ausgeht. das wird bei 64bit auch recht flott passieren.

    Von 32 Bit auf 64 Bit kannst Du 32 weitere Bits "füllen". Von 16 Bit auf 32 Bit nur 16. Das heißt, dass bei gleichbleibender technischer Entwicklung die 64 Bit Epoche doppelt so lange anhalten sollte wie die 32 Bit Epoche.



  • Gregor schrieb:

    rapso schrieb:

    ich glaube als 10jahre vor 64 bit die 32bit kamen und man sich gerade mit 40MB Harddisk im olymp fuehlte (wenn ich mich richtig entsinne), hat auch niemand zu glauben gewagt dass in kurzer zeit der 4GB addressspace ausgeht. das wird bei 64bit auch recht flott passieren.

    Von 32 Bit auf 64 Bit kannst Du 32 weitere Bits "füllen". Von 16 Bit auf 32 Bit nur 16. Das heißt, dass bei gleichbleibender technischer Entwicklung die 64 Bit Epoche doppelt so lange anhalten sollte wie die 32 Bit Epoche.

    man muss auch noch mit einbeziehen, dass die technische entwicklung auch immer schneller voran geht.

    MfG borgolte



  • borgolte schrieb:

    man muss auch noch mit einbeziehen, dass die technische entwicklung auch immer schneller voran geht.

    Das Gegenteil ist eher der Fall: Am Anfang hat man beim Moore'schen Gesetz noch von 12 Monaten gesprochen, bis sich die Transistoranzahl verdoppelt. Dann waren es 18 Monate und inzwischen spricht man von 24 Monaten.



  • Gregor schrieb:

    borgolte schrieb:

    man muss auch noch mit einbeziehen, dass die technische entwicklung auch immer schneller voran geht.

    Das Gegenteil ist eher der Fall: Am Anfang hat man beim Moore'schen Gesetz noch von 12 Monaten gesprochen, bis sich die Transistoranzahl verdoppelt. Dann waren es 18 Monate und inzwischen spricht man von 24 Monaten.

    Ist trotzdem noch eine exponentielle Entwickelung, egal ob man jetzt 12 oder 24 Monate nimmt. Eine Verdoppelung einer großen Zahl ist immer ein größeres Wachstum als die Verdoppelung einer kleinen. Heute geht es schneller als damals, wenn auch nicht so schnell wie damals voraus gesagt wurde.

    OK, sollten wir irgendwann mal 128Bit Addressen verwenden, haben wir ein Problem, weil dann die Begriffe ausgehen. Klar, Giga, Tera, Peta, Exa, aber weiter gehts dann AFAIK nicht. Und 295147905179352825856 Exa Byte kann sich doch kein ***** merken.

    Wie wäre es mit Kiloexa's ? (Das Apostroph wurde bis dahin in die Sprache aufgenommen :p 🤡 )

    Autoparallelisierung könnte ich mir aber für C++ vorstellen. Der Compiler muss halt Abhängigkeiten für alle Funktionen feststellen und zwischen speichern aber sonst sehe ich da keine großen Probleme. Schleifen kann man auch parallelisieren wenn der Compiler feststellen kann, dass nur lesend auf die Schleifenvariable zugegriffen wird.



  • Ben04 schrieb:

    OK, sollten wir irgendwann mal 128Bit Addressen verwenden, haben wir ein Problem, weil dann die Begriffe ausgehen. Klar, Giga, Tera, Peta, Exa, aber weiter gehts dann AFAIK nicht. Und 295147905179352825856 Exa Byte kann sich doch kein ***** merken.

    Wie wäre es mit Kiloexa's ? (Das Apostroph wurde bis dahin in die Sprache aufgenommen :p 🤡 )

    Wie wärs denn mit Zetta und Yotta?!



  • Ich glaube nicht, dass der 64bit Adressraum so schnell ausgeht. Einfach in anbetracht der Tatsache, wie lange man braucht um beispielsweise jedes Byte einmal anzufassen... und das selbst dann, wenn man sich superschnelle Zugriffsgeschwindigkeiten gönnt. Natürlich werden die auch schneller, aber eben nicht so schnell.



  • Ben04 schrieb:

    Gregor schrieb:

    borgolte schrieb:

    man muss auch noch mit einbeziehen, dass die technische entwicklung auch immer schneller voran geht.

    Das Gegenteil ist eher der Fall: Am Anfang hat man beim Moore'schen Gesetz noch von 12 Monaten gesprochen, bis sich die Transistoranzahl verdoppelt. Dann waren es 18 Monate und inzwischen spricht man von 24 Monaten.

    Ist trotzdem noch eine exponentielle Entwickelung, egal ob man jetzt 12 oder 24 Monate nimmt. Eine Verdoppelung einer großen Zahl ist immer ein größeres Wachstum als die Verdoppelung einer kleinen. Heute geht es schneller als damals, wenn auch nicht so schnell wie damals voraus gesagt wurde.

    Dir ist aber schon klar, dass man jedes Wachstum als Verdopplung nach einer gewissen Zeit angeben kann? Einfach nur die Größe eines Wertes anzuschaun und zu sagen verdoppelt sich regelmäßig reicht nicht, um das Wachstum zu beschreiben.

    Autoparallelisierung könnte ich mir aber für C++ vorstellen. Der Compiler muss halt Abhängigkeiten für alle Funktionen feststellen und zwischen speichern aber sonst sehe ich da keine großen Probleme. Schleifen kann man auch parallelisieren wenn der Compiler feststellen kann, dass nur lesend auf die Schleifenvariable zugegriffen wird.

    Ne, das reicht nicht. Und die Unabhängigkeit festzustellen kann ganz schön problematisch sein... insofern sehe ich da große Probleme.



  • Ben04 schrieb:

    Autoparallelisierung könnte ich mir aber für C++ vorstellen. Der Compiler muss halt Abhängigkeiten für alle Funktionen feststellen und zwischen speichern aber sonst sehe ich da keine großen Probleme. Schleifen kann man auch parallelisieren wenn der Compiler feststellen kann, dass nur lesend auf die Schleifenvariable zugegriffen wird.

    Ne, C und C++ sind imho sonderlich schlecht für Autoparallelisierung geeignet. Dafür kann man einfach zu viele Nebeneffekte auf zu viele Weisen zaubern.

    Parallelisierung auf Framework Ebene macht da eher Sinn. Zur Zeit arbeite ich für die Uni an einem Framework mit, bei dem man Formeln in einer Metasprache ausdrückt (diese basiert wie Spirit direkt auf C++) und den daraus generierten Code kann man dann beliebig skalieren lassen. Ansonsten wird es auch wesentlich bessere Tools geben und einfach neue Entwurfs Konzepte.

    Selbst wenn Erlang kein Erfolg wird, werden denke ich bald ähnliche Bibliotheken für andere Sprachen wie Pilze aus dem Boden schießen (für Common Lisp und Scheme gibt es schon vergleichbares).

    Ein paar Links
    * C++ OpenMP Tutorial http://bisqwit.iki.fi/story/howto/openmp/
    * Intels Threading Building Blocks http://osstbb.intel.com/



  • Ben04 schrieb:

    Gregor schrieb:

    borgolte schrieb:

    man muss auch noch mit einbeziehen, dass die technische entwicklung auch immer schneller voran geht.

    Das Gegenteil ist eher der Fall: Am Anfang hat man beim Moore'schen Gesetz noch von 12 Monaten gesprochen, bis sich die Transistoranzahl verdoppelt. Dann waren es 18 Monate und inzwischen spricht man von 24 Monaten.

    Ist trotzdem noch eine exponentielle Entwickelung, egal ob man jetzt 12 oder 24 Monate nimmt. Eine Verdoppelung einer großen Zahl ist immer ein größeres Wachstum als die Verdoppelung einer kleinen. Heute geht es schneller als damals, wenn auch nicht so schnell wie damals voraus gesagt wurde.

    Es ging darum, wie schnell der 64-Bit Adressraum nicht mehr ausreicht. Und in diesem Zusammenhang ist es so, dass jedes zusätzliche Bit bei den Adressen den adressierbaren Speicher verdoppelt. Und die Speichermenge beim Arbeitsspeicher ist nunmal an das Moore'sche Gesetz gekoppelt. Da so eine Verdopplung früher schneller stattgefunden hat als heute, hat man früher auch schneller mehr Bits zur Adressierung benötigt.

    Dein Beitrag bezüglich dem beschleunigten technischen Fortschritt habe ich so gewertet, dass einem die Bits vielleicht früher ausgehen könnten, als man ansonsten annehmen könnte. Das ist Unsinn. Die Menge des adressierbaren Speichers ist genauso exponentiell von der Anzahl der Bits abhängig, wie die Speichermenge exponentiell wächst. Insofern kann man durchaus sagen, dass einem die doppelte Anzahl an Bits die doppelte Zeit verschafft, bis man an dieser Schraube wieder drehen muss.



  • Jester schrieb:

    Ben04 schrieb:

    Gregor schrieb:

    borgolte schrieb:

    man muss auch noch mit einbeziehen, dass die technische entwicklung auch immer schneller voran geht.

    Das Gegenteil ist eher der Fall: Am Anfang hat man beim Moore'schen Gesetz noch von 12 Monaten gesprochen, bis sich die Transistoranzahl verdoppelt. Dann waren es 18 Monate und inzwischen spricht man von 24 Monaten.

    Ist trotzdem noch eine exponentielle Entwickelung, egal ob man jetzt 12 oder 24 Monate nimmt. Eine Verdoppelung einer großen Zahl ist immer ein größeres Wachstum als die Verdoppelung einer kleinen. Heute geht es schneller als damals, wenn auch nicht so schnell wie damals voraus gesagt wurde.

    Dir ist aber schon klar, dass man jedes Wachstum als Verdopplung nach einer gewissen Zeit angeben kann? Einfach nur die Größe eines Wertes anzuschaun und zu sagen verdoppelt sich regelmäßig reicht nicht, um das Wachstum zu beschreiben.

    Wo hab ich dem widersprochen? und ich bleib dabei : "Anzahl der Transistoren morgen" - "Anzahl der Transistoren heute" > "Anzahl der Transistoren gestern" - "Anzahl der Transistoren vorgestern" also entwickelt es sich schneller. Ok wenn einen 64Bit Adressraum voll kriegen will dann muss es schon noch ein gutes Stück schneller gehen.

    Jester schrieb:

    Autoparallelisierung könnte ich mir aber für C++ vorstellen. Der Compiler muss halt Abhängigkeiten für alle Funktionen feststellen und zwischen speichern aber sonst sehe ich da keine großen Probleme. Schleifen kann man auch parallelisieren wenn der Compiler feststellen kann, dass nur lesend auf die Schleifenvariable zugegriffen wird.

    Ne, das reicht nicht. Und die Unabhängigkeit festzustellen kann ganz schön problematisch sein... insofern sehe ich da große Probleme.

    Natürlich kommt es nicht an Programme ran welche extra für mehrere Kerne entwickelt wurden und daher könnte es den Aufwand nicht wert sein. Abhängigkeiten werden dreckig sobald Zeiger ins Spiel kommen. Dies hatte ich vorher nicht bedacht.



  • @ Helium:

    Hmm okay, und wieder andere Quellen sagen, Bill hätte sowas überhaupt nie gesagt... naja was soll's 😉



  • Gregor schrieb:

    borgolte schrieb:

    man muss auch noch mit einbeziehen, dass die technische entwicklung auch immer schneller voran geht.

    Das Gegenteil ist eher der Fall: Am Anfang hat man beim Moore'schen Gesetz noch von 12 Monaten gesprochen, bis sich die Transistoranzahl verdoppelt. Dann waren es 18 Monate und inzwischen spricht man von 24 Monaten.

    die verdopplung der transistoren hat kaum mit dem technischen fortschritt im allgemeinen zu tun, lediglich bei der halbleiterfertigung.

    dass mittlerweile eine graka 1GB ram haben kann und PCs mit 4GB ausgeliefert werden, wobei der address-space auf alle komponenten verteilt werden muss, zeigt in welche richtung es geht. address-space wird nicht gleichbedeutend mit ramgroesse oder bandbreite sein. du wirst deine blueray memorymapped oeffnen. vielleicht auch die ganze HDD? du hast ja genug "speicher", und wie schaut's aus mit address-space-collisions aus wenn mehrere processe eine resource sharen? vielleicht sollte die ja dann doch fuer alle processes den selben address-space reservieren etc. und schon bist du auf dem wege dass 64bit nicht reichen.
    eventuell kannst du dir ja deine online-movie-bibliothek memorymappen, wieso auch nicht? du hast ja 64bit... ich glaube 128bit wird in 10jahren das mass der dinge sein.



  • Oh 128bit = ca. 340.000.000.000.000.000.000.000.000 Terabyte

    Könne man ja alle Informationen der Welt speichern...



  • Wenn man von einer Verdopplung des Arbeitspeichers in einem Jahr ausgeht, so würde der Sprung von 32 auf 64 Bit immerhin 32 Jahre reichen, bis man auch an die Grenzen von 64 Bit gelangt.
    Damit in 10 Jahren 64 Bit nicht ausreicht müsste die Entwicklung ja noch schneller werden, also eine Verdopplung ca alle 4 Monate.

    Ich würde persönlich die Zahl 32 Jahre aber weit höher einschätzen, da die Physik uns einen Strich durch die Rechnung machen kann. Wieviel Teilchen brauchen wir um so viele Zustände abbilden zu können? Quanten bieten uns zwar mehr Zustände und die Entwicklung ist nicht auf Transistoren beschränkt, aber irgendwie sehe ich keinen Grund warum die Entwicklung auch in 3 Jahren immernoch so riesige Sprünge schaffen sollte.
    Das die Entwicklung durch verbesserte Herstellung zur Zeit recht schnell voran geht halte ich persönlich eher für eine Ausnahme. Es wäre auch möglich, dass in 5 Jahren die Halbleitertechnologie an ihre Grenzen stößt und die nächste neue Technologie erst in 50 Jahren gefunden wird, bzw. marktreife erreicht.

    Dazu glaube ich nicht, dass wir Speicher von ca 1 Millionen Blue Ray Disks überhaupt brauchen werden.


Anmelden zum Antworten