Ich bin ein wenig verwirrt über was Speicher sieht aus wie in einem Dual-CPU-Maschine aus der Perspektive eines C/C++ Programms auf Linux läuft.Dual Socket vs Single Socket Speichermodell?
Fall 1 (verstanden)
Mit einem Vierkern-HT CPU, 32GB RAM, I kann in der Theorie, eine einzige Prozessanwendung schreiben, bis 8 Threads und bis zu 32 GB RAM ohne in den Tausch zu gehen oder die Threading-Möglichkeiten zu überlasten - ich ignoriere das Betriebssystem und andere Prozesse hier zur Vereinfachung.
Fall 2 (Verwirrung)
Was mit einem HT CPU mit 64GB RAM aufgebaut Dual Quad-Core passiert?
Entwicklungs-weise, müssen Sie eine Anwendung schreiben, um als zwei Prozesse (8 Threads, je 32 GB) zu kommunizieren, oder Sie können es als einen Prozess schreiben (16 Threads, 64 GB voller Speicher)?
Wenn die Antwort die erstere ist, was sind einige effiziente moderne Strategien, um die gesamte Hardware zu nutzen? Shm? IPC? Wie lenkt man Linux dazu, für jeden Prozess eine andere CPU zu verwenden?
Es gibt eine Reihe von Möglichkeiten, dies zu tun. Eine Möglichkeit besteht darin, zwei Prozessoren zu verwenden und sie anzuheften. Dann benutze IPC. Die andere Möglichkeit besteht darin, sie einfach als eine Maschine mit gemeinsam genutztem Speicher zu behandeln und entweder den NUMA-Overhead zu essen oder Tricks mit Speicherzuweisung und Affinität zu spielen, um jeden letzten Tropfen auszuquetschen. – Mysticial
Aus Sicht der Anwendung ist eine Dual-Quad-Core-Maschine eine Octo-Core-Maschine (dh 16 Prozessor Threads). Die Zeiten und Verzögerungen können jedoch unterschiedlich sein. –