Gibt es so etwas wie ein restrict-Schlüsselwort für C ++, das anzeigt, dass _iterators_ kein Alias ​​ist?

8

g ++ implementiert __restrict__ für Zeiger, aber ich konnte nichts über Iteratoren finden. Meine allgemeine Absicht ist es, den Compiler zu ermutigen, STL-Schleifen zu vektorisieren.

Bearbeiten:

Auch wenn der Compiler nicht vektorisieren kann, sollte das Schlüsselwort __restrict__ dem Compiler mitteilen können, dass innerhalb einer Schleife keine unnötigen Neuladungen erforderlich sind.

    
srean 13.02.2011, 10:52
quelle

1 Antwort

6

Ich kenne die Antwort auf Ihre direkte Frage nicht. Allerdings wäre der Compiler nur in der Lage, eine Schleife für std::vector zu vektorisieren, da es der einzige Container ist (denke ich), der zusammenhängende Speicher und keine Abhängigkeiten zwischen aufeinanderfolgenden Speicherorten hat (anders als z. B. std::list ). Ich weiß jedoch nicht, wie ich das schaffen soll.

Aktualisieren

Nach einigen Experimenten (die für das Gesamtziel relevant sein können oder nicht), entdeckte ich, dass in der ICC das Folgende nicht vektorisiert:

%Vor%

wobei Folgendes gilt:

%Vor%

Offenbar ist das Problem nicht so sehr Iteratoren, sondern der Aufruf von vec.end() innerhalb des Schleifenkonstrukts, das offensichtlich nicht herausgerechnet werden kann, obwohl klar ist, dass der Schleifenkörper die Vektorgrenzen nicht beeinflusst / p>

In GCC konnte ich nichts zum Vektorisieren bekommen. Dies ist nicht überraschend, weil GCC beim Aufspüren von SSE-Möglichkeiten viel schlechter ist als ICC.

    
Oliver Charlesworth 13.02.2011, 10:55
quelle

Tags und Links