CPU-Leistung von allen CPU-Kernen in Serie schalten, damit EIN Programm mit grösstmöglicher Leistung läuft.



  • Geschätzte c++ 🙂

    Für die Beantwortung folgender Fragen danke ich Ihnen im Voraus herzlich!

    Ziel:
    CPU-Leistung soll von allen CPU-Kernen in Serie geschaltet werden, damit ein einziges Programm mit grösstmöglicher Leistung läuft. 🕶

    Frage 1:
    Gibt es eine Möglichkeit, um die CPU-Leistung von allen CPU-Kernen in Serie zu schalten, damit das Programm mit der grösstmöglichen Leistung läuft (z.B. 90% für ein einziges Programm und 10% für das Betriebssystem)?

    Frage 2:
    Gibt es Programmiersprachen, die schneller rechnen als eine kompilierte exe-Datei in C++?

    Einschränkungskriterien:
    Keine Internetverbindung (nur Aktivierung und/oder Download möglich)

    Infrastruktur:
    i7 3770K Prozessor mit 4 physikalischen und 4 virtuellen Kernen (max. 31.2 Giga CPU-Leistung)

    Software:
    Im C++ Borland Builder 5 Professional habe ich ein eigenes Programm geschrieben (exe-Datei) mit einer sehr langen „Schlaufe“ (Abfrage) und deshalb ist dafür die grösstmögliche CPU-Leistung erforderlich.

    Wissen/Voraussetzungen:
    Beim Betriebssystem Windows Server 2007 kann einem Benutzer die CPU-Leistung zugeordnet werden. Ich weiss nicht, ob dies auch auf ein einziges Programm möglich ist und falls ja, ob dieses einzige Programm mit der vollen Leistung rechnen kann oder nur wie unter Windows 7 oder 8 mit maximal EINEM CPU-Kern.

    Freundliche Grüsse
    cu, Urs Egli



  • Nein Du kannst die Kerne nicht "in Serie" schalten und dadurch die Leistung auf magische Weise erhöhen. 🙄

    Wenn Du mehrere Kerne ausnutzen willst, ist es Deine Aufgabe die Berechnungen zu parallelisieren.



  • Wenn du zwei Fahrraeder hast, kannst du die in Serie schalten, damit du doppelt so schnell faehrst?



  • Ich wüsste gerne Mal, was "in Serie schalten" bedeuten soll. Ich verstehe das nämlich wie knivil und dann ergibt das überhaupt keinen Sinn.

    1. Eine kompilierte exe-Datei ist keine Programmiersprache. Schneller geht immer, das hängt aber hochgradig vom Einsatzgebiet, vom Aufwand und den Kenntnissen des Programmierers ab. Theoretisch gibt es immer Overhead, den man mit sehr geschicktem Assembler unter perfekter Ausnutzung der Architektur wegoptimieren kann.

    Top-Performance erhält man bei hoher Parallelisierbarkeit häufig mit GPU-Berechnungen, vielleicht ist das für Dich interessant.

    Schlaufe? Na besser als ein Knoten, vermute ich. 🙂 "Lange Schleife -> hohe Leistung erforderlich" leuchtet mir erstmal nicht ein. Wenn die so lang ist, ist das schon Mal schlechter Stil, das hat die handelsüblichen Nachteile und kann auch Mal Performance kosten.

    Kurz und gut: Sag, was Mal was Du machst statt die ganzen unwichtigen technischen Details hier zu posten. Ich bin sicher, man kann auf einer anderen Ebene optimieren als Du hier denkst. Erfordert aber Wissen zur Applikation und nicht zum System.



  • Um Mehrkern-CPUs richtig auszulasten solltest du dein Programm parallelisieren, damit die Kerne gleichzeitig rechnen können. Statt einer Schleife solltest du dir dann überlegen, ob du dein Ausgangsproblem nicht in kleinere Häppchen aufteilen und in jeweils einen eigenen Thread auslagern kannst. Die können dann auf die einzelnen Kerne verteilt werden und mit "größtmöglicher" Leistung laufen.
    Ansonsten ist der Vergleich von Knivil sehr passend 👍

    Edit:
    Ohne Multithreading läuft ein Programm nur auf einem Kern gleichzeitig (d.h. es kann zwar vorkommen, dass das Programm die Kerne wechselt, es läuft aber nie auf mehreren Kernen gleichzeitig. Es ist Aufgabe des Programmierers, dafür zu sorgen, dass das Problem auf Threads aufgeteilt wird.



  • Egli schrieb:

    Im C++ Borland Builder 5 Professional habe ich ein eigenes Programm geschrieben

    Man sollte auch noch anmerken, dass der dort verwendete Compiler von Anfang 2000 ist. Er ist nicht gerade für gute Optimierungen berüchtigt und erzeugt bestenfalls Assemblercode optimiert für den Pentium Pro.



  • Zu 1: Der intel compiler kann das zu einem gewissen grad automatisch, er vektorisiert und parallelisiert ein program automatisch im rahmen seiner moeglichkeiten (lese: kann sein dass es garnicht klappt). ich glaube es gibt eine evaluierungsversion vom Intel c++ compiler.

    zu 2. mit C++ solltest du alle moeglichkeiten haben, was dabei rauskommt ist meistens abhaengig vom programmierer, nicht von der sprache.

    Wissen/Voraussetzungen:
    Beim Betriebssystem Windows Server 2007 kann einem Benutzer die CPU-Leistung zugeordnet werden. Ich weiss nicht, ob dies auch auf ein einziges Programm möglich ist und falls ja, ob dieses einzige Programm mit der vollen Leistung rechnen kann

    windows weist im normalfall alle kerne jedem program zu, du kannst den taskmanager aufmachen und rechts auf das program klicken und bei 'thread affinity' per hand die kern zuweisung einschraenken.

    nur wie unter Windows 7 oder 8 mit maximal EINEM CPU-Kern.

    das macht windows standardmaessig nicht so.



  • [s]

    Egli schrieb:

    Geschätzte c++ 🙂

    Für die Beantwortung folgender Fragen danke ich Ihnen im Voraus herzlich!

    Ziel:
    CPU-Leistung soll von allen CPU-Kernen in Serie geschaltet werden, damit ein einziges Programm mit grösstmöglicher Leistung läuft. 🕶

    Frage 1:
    Gibt es eine Möglichkeit, um die CPU-Leistung von allen CPU-Kernen in Serie zu schalten, damit das Programm mit der grösstmöglichen Leistung läuft (z.B. 90% für ein einziges Programm und 10% für das Betriebssystem)?

    Frage 2:
    Gibt es Programmiersprachen, die schneller rechnen als eine kompilierte exe-Datei in C++?

    Einschränkungskriterien:
    Keine Internetverbindung (nur Aktivierung und/oder Download möglich)

    Infrastruktur:
    i7 3770K Prozessor mit 4 physikalischen und 4 virtuellen Kernen (max. 31.2 Giga CPU-Leistung)

    Software:
    Im C++ Borland Builder 5 Professional habe ich ein eigenes Programm geschrieben (exe-Datei) mit einer sehr langen „Schlaufe“ (Abfrage) und deshalb ist dafür die grösstmögliche CPU-Leistung erforderlich.

    Wissen/Voraussetzungen:
    Beim Betriebssystem Windows Server 2007 kann einem Benutzer die CPU-Leistung zugeordnet werden. Ich weiss nicht, ob dies auch auf ein einziges Programm möglich ist und falls ja, ob dieses einzige Programm mit der vollen Leistung rechnen kann oder nur wie unter Windows 7 oder 8 mit maximal EINEM CPU-Kern.

    Freundliche Grüsse
    cu, Urs Egli

    [/s]

    Das geht alles mit einer Zeitmaschine.

    Hierzu muss sich jeder CPU Kern in einer anderen Zeit befinden, so dass die Berechnung bis zum Ergebnis durch die Zeit geschleift wird und dadurch quasi die CPU in Reihe schon das Ergebnis der vorherigen CPU schon hat, bevor sie es gerade verrechnet hat.


Log in to reply