V_initMT
FunktionInitialisierung der für Mehrkern-Prozessoren optimierten Bibliotheken
Syntax C/C++#include <VecLib.h>
int V_initMT( unsigned nProcCores );
Pascal/Delphiuses VecLib;
function V_initMT( nProcCores:UInt ): IntBool;
BeschreibungDiese Funktion initialisiert die für Mehrkern-Prozessoren optimierten Bibliotheken. Sie liest die Zahl der zur Verfügung stehenden Prozessor-Kerne als Argument und generiert die passende Anzahl von Arbeits-Threads, so dass folgende Aufrufe von OptiVec-Funktionen ihre Berechnungen über die vorhandenen Prozessoren verteilen können. Derzeit kann nProcCores Werte von 2, 4, 8, 16 und 32 annehmen. Sobald Intel, AMD oder andere Hersteller die Entwicklung von Systemen mit noch mehr Prozessor-Kernen ankündigen, werden auch künftige Versionen von OptiVec Vorkehrungen für so viele Prozessor-Kerne treffen, wie es dann geben mag. Derzeit ist die höchste genannte Zahl eine Entwicklung von Intel mit 32 Kernen.

V_initMT muss einmal (und genau einmal) aufgerufen werden, bevor irgendeine Vektor- oder Matrix-Funktion von OptiVec aus der Multi-Prozessor-Bibliothek ausgeführt werden kann. Andersherum schadet aber der Aufruf von V_initMT nicht, wenn Sie eine der (für single-thread optimierten) Allzweck-Bibliotheken verwenden. In diesen Bibliotheken ist V_initMT als leere Funktion enthalten, deren Aufruf nichts bewirkt. Auf diese Weise können Sie zu Test-Zwecken zwischen den verschiedenen Versionen der OptiVec-Bibliotheken hin- und herschalten, ohne sich um die Aktivierung und Deaktivierung von V_initMT kümmern zu müssen.

Falls Sie die Funktion V_setFPAccuracy verwenden, um die Fließkomma-Genauigkeit der FPU zu modifizieren, muss der Aufruf von V_initMT nach dem Aufruf von V_setFPAccuracy erfolgen. Der Grund hierfür ist, dass V_initMT die zusätzlichen Threads mit dejenigen FPU-Einstellungen erstellt, wie sie bei Aufruf dieser Funktion vorgefunden werden.

nProcCores muss nicht der tatsächlich vorhandenen Zahl der Prozessor-Kerne entsprechen. Zu Test-Zwecken können Sie jeden beliebigen zulässigen Wert eingeben. Optimale Ausführungsgeschwindigkeit wird natürlich nur bei der korrekten Zahl erreicht. Für Anwendungen, die auf Kunden-Systemen laufen, deren Konfiguration außerhalb Ihres Einflussbereiches liegt, sollte die tatsächlich vorhandene Zahl der Prozessor-Kerne durch eine Detektions-Routine ermittelt werden (siehe die Prozessor-Dokumentationen von Intel und AMD). Zur Not kann die automatische Detektion natürlich durch eine Benutzer-Eingabe ersetzt werden.
Obwohl nicht unbedingt erforderlich, empfiehlt es sich, am Programm-Ende die zusätzlichen Threads wieder zu schließen durch Aufruf von V_closeMT.
Die durch V_initMT gesetzte Anzahl der verwendeten Prozessor-Kerne wird in der öffentlichen Variable V_nProcCores abgelegt. Diese ist in C/C++ als (in C++ extern "C") unsigned definiert, in Delphi als UInt. Durch Überprüfung dieser Variablen lässt sich auch feststellen, ob V_initMT bereits aufgerufen wurde.

RückgabewertFALSE (0), wenn die Threads fehlerfrei initialisiert werden konnten, andernfalls TRUE (!= 0)
QuerverweisV_closeMT, Kap. 1.1.2.

VectorLib Inhaltsverzeichnis  OptiVec Home