Wie kann ich Altivec-Befehle nutzen?

-Nuke-

Aktives Mitglied
Thread Starter
Dabei seit
13.09.2003
Beiträge
2.146
Reaktionspunkte
15
Hi.

Ich möchte gerne in meinen Programmen Altivec nutzen, wenn möglich.

Nur was muss ich includieren, damit ich Befehle wie vec_add, usw. nutzen kann?

In einem HTML-Dokument von OSX stand etwas von altivec.h. Nur leider wird diese nicht gefunden, wenn ich #include <altivec.h> nutze.

Kann mir einer helfen?

Danke.
 
Selektiere dein Projekt in XCode (das oberste Ikon in "Groups & Files"), und waehle "Project -> Get Info".

Dort den Reiter "Styles" waehlen. In der sich dann oeffnenden Schublade "Settings" unter "GNU C/C++ Compiler->Language" die Checkbox "Enable Altivec Extensions" einschalten.

Vor dem Rebuild noch deinen "#include <altivec.h>" Loeschen, und dran denken, dasz du "Enable Altivec Extensions" fuer jeden Build Style, den du Benutzt separat Einschalten musst.

Falls du XCode nicht benutzen solltest, so musst du beim Compilieren mit dem gcc die Option "-faltivec" benutzen, um die Altivec-Erweiterungen einzuschalten.
 
Hmm,

und wo sind die Befehle wie vec_add definiert?
 
Original geschrieben von mdev
Falls du XCode nicht benutzen solltest, so musst du beim Compilieren mit dem gcc die Option "-faltivec" benutzen, um die Altivec-Erweiterungen einzuschalten.
&nbsp;
Heißt das, daß man nicht mal eine Altivec Syntax nutzen muß, um Altivec zu nutzen... das wäre ja sensationell :)

Winn
 
Original geschrieben von Winn
&nbsp;
Heißt das, daß man nicht mal eine Altivec Syntax nutzen muß, um Altivec zu nutzen... das wäre ja sensationell :)

Winn

Na das ist bei guten Compilern sowieso der Fall. Mal als (schlechtes) Beispiel:

Du willst z.B. das hier Rechnen:

sin(pi*cos(1425,421254574))*14,14541

Wenn möglich dann legt der Compiler das sowieso in die Altivec-Einheit, damit es schneller geht.
 
Original geschrieben von Winn
&nbsp;
Heißt das, daß man nicht mal eine Altivec Syntax nutzen muß, um Altivec zu nutzen... das wäre ja sensationell :)

Winn
&nbsp;

Nein, das heisst es leider nicht. Ich haette "Spracherweiterungen" anstelle von "Erweitungen" schreiben sollen, dann waere wohl klarer herausgekommen, dasz der Compiler dem Programmierer leider nicht den gefallen tut, automatisch diese zusaetzliche Recheneinheit zu Nutzen, nur weil die "Erweiterung" eingeschaltet ist. Inwieweit die Motorola-Erweiterungen tatsaechlich automatisch Code, der nicht entsprechend Vorbereitet ist an Altivec anpassen koennen weisz ich nicht.

Um es mal ganz knapp zusammenzufassen:

Altivec ist eine zusaetzliche Recheneinheit, die, wenn sie denn genutzt wird, tatsaechlich gewaltige Geschwindigkeitsvorteile hat. Man koennte sagen, dasz Altivec die Verarbeitung von gleichartigen Daten durch parallelisierung Beschleunigen kann.

Ueblicherweise verarbeiten Programme Daten sequentiel, sprich: Ein Wert wird nach dem anderen Verarbeitet. Wenn ich also die Aufgabe habe, 16 Werte durch jeweils 16 andere Werte zu teilen, dann wuerde ein "normales" Programm folgendes tun:

Solange (nicht alle 16 Werte verarbeitet) {
Einen Wert nehmen
Durch den jeweils korresponierenden anderen Wert teilen
}

Bei Benutzung von Altivec saehe das folgendermassen aus:

1. Alle 16 Werte auf einen Rutsch in der Altivec Einheit speichern
2. Die anderen 16 Werte in der Altivec Einheit Speichern
3. Befehl an Altivec: Werte durch einander Teilen

Das kann natuerlich extrem Fix sein, immerhin koennte ich das Ergebnis unter Benutzung von Altivec in nur 3 Schritten erreichen, anstatt mit (mindestens) 32 ohne Altivec.

Allerdings ist es eben in den weitaus meisten Faellen nicht so Simpel wie oben geschildert. Und wenn man Altivec "falsch" Nutzt, wird die Applikation langsamer als ganz ohne Benutzung von Altivec. Im schlimmsten Fall kommt beim Rechnen einfach nur Muell heraus.

Falls Interesse besteht, bin ich sehr gerne bereit den "Mythos Altivec" mal naeher zu Beschreiben, anstatt wie ueblich auf die Dokumentation fuer Programmierer zu Verweisen (die fuer Einsteiger eine ziemlich harte Nuss sein kann).
 
Das hört sich ausgesprochen interessant an... denn ich benutze meinen G4 in meiner Diplomarbeit für rechnergestützte Simulationen... habe also reichlich Daten zu berechnen. Innerhalb des Hauptteils der der Rechenintensivste ist, habe ich mehrere Summationen und Multiplikationen durchzuführen... da würde sich die Altivec ja hervorragend einbringen... könnte sie auch for Schleifen beschleunigen ?

Bin ganz Ohr :p

Winn
 
Hast du CHUD-Tools drauf?

Da gibt´s in den Einwicklerbeispielen ein nettes Beispiel. Nämlich den Bildschirmschöner Flurry im Quellcode. Außerdem gibt´s noch Schalter für "normal-Berechnung" und dann noch "Altivec". Das ist cool. Man kann zig Flurrys hinzufügen. D.h. man packt mal eben 20 Flurrys rein. Mit Scalar-Berechnung langsam. Mit Altivec butterweich. :)

Dort sieht man schön den Geschwindigkeitsunterscheid und dank Quellcode auch das "wie".
 
Zuletzt bearbeitet:
Hi.

Jetzt geht´s soweit. Zumindest führt er jetzt die Befehle wie vec_add aus. Es lag bei mir an der Eingabe.

Nur habe ich eine wichtige Frage. Wie konventiere ich diese Werte, damit ich diese an STL-Befehle wie cout usw. übergeben kann?

Also wie mache ich aus einem vector float einen float und der gleichen? Oder muss man da generell anders heran gehen?

Danke.
 
woow, nicht schlecht... dann werd ich wohl Altivec mal verstärkt nutzen... ^^
 
Wäre dann nett wenn du mir sagst, wie du das dann anstellst. Ich weiß leider nicht wie man diese vector-Sachen benutzt. Also jetzt in normalen Sachen wie cout, z.B.
 
werd ich machen... erstmal muß ich mein "numerisches Monster" fertig kriegen... dann kann ich mich um die Altivec Optimierungen kümmern...
 
Zurück
Oben Unten