CnD ist ein Python-Source-to-Source Übersetzer, die mit n-dimensionalen Arrays in C angenehmer macht & nbsp; Es wird diesen Code zu machen.:
Leere sgemm (float * a, b * float, float * c, int n)
{
& Nbsp; Dimension "Fortran" a [n, n];
& Nbsp; Dimension "Fortran" b [n, n];
& Nbsp; Abmessung c [n, n];
& Nbsp; for (int i = 1; i <= n; ++ i)
& Nbsp; für (int j = 1; j <= n; ++ j)
& Nbsp; {
& Nbsp; float tmp = 0;
& Nbsp; für (int k = 1; k <= n; ++ k)
& Nbsp; tmp + = a [i, k] * b [k, j];
& Nbsp; c [i-1, j-1] = tmp;
& Nbsp;}
}
in diesem:
Leere sgemm (float * a, b * float, float * c, int n)
{
& Nbsp; for (int i = 1; i <= n; ++ i)
& Nbsp; für (int j = 1; j <= n; ++ j)
& Nbsp; {
& Nbsp; float tmp = 0;
& Nbsp; für (int k = 1; k <= n; ++ k)
& Nbsp; tmp + = a [((k - 1) * ((n - 1) + 1)) + (i - 1)] * B [((j - 1) * ((n - 1) + 1) ) + (k - 1)];
& Nbsp; c [((i - 1) * n) + (j - 1)] = tmp;
& Nbsp;}
}
Sie können auch einen Blick auf ein umfassenderes Beispiel, ein paar extra Schnickschnack zeigt.
Der einzige Effekt einer Dimension Erklärung ist es, die Interpretation der Array (idx) Index-Operator zu ändern. Dimension Erklärungen gehorchen regelmäßigen C Bereichsregeln.
Ich möchte auch zu beachten, dass CnD ist eine robuste, Parser-basierte Übersetzer, kein schuppige Text Ersatzwerkzeug. Es versteht alle C99, sowie viele GNU-Erweiterungen.
Jede Achse Spezifikation in einer Dimension Deklaration hat die folgende Form:
Start: Ende: Schrittlänge: leading_dimension
Start kann weggelassen werden. Ende und Schrittlänge kann auch weggelassen werden, aber wenn Einträge nach ihnen angegeben werden sollen, müssen ihre Hinterdoppelpunkte bleiben bestehen. Zum Beispiel kann die Achse Spezifikation: 5 einfach spezifiziert eine Schrittlänge von 5. Der Schritt wirkt einfach als Multiplikator auf dem Index. Keine Plausibilitätsprüfung überhaupt auf die Dimension Erklärung getan. Sie können sich in den Fuß zu schießen, wie Sie möchten.
Wenn das Layout als "c" oder gar nicht gegeben hat, stehen die folgenden Dinge wahr:
- Das Array wird in zeilenweise festgelegt.
- Das Ende Index aufgenommen wird, exklusiv zu sein, falls angegeben.
- Die Startindex standardmäßig auf 0.
Wenn das Layout wird als "Fortran" gegeben sind folgende Dinge wahr:
- Das Array wird in der Spalte-Großauftrag angelegt.
- Das Ende Index genommen wird umfassend sein, falls angegeben.
- Die Startindex standardmäßig 1.
(Meisten) der in der Dimension Erklärung enthaltene Wissen kann programmgesteuert Teil folgender Funktionen erhalten bleiben sollen:
- Rankof (a)
- Nitemsof (a)
- Lboundof (a, Achse)
- Uboundof (a, Achse) (gibt den vom Benutzer festgelegten Obergrenze)
- Puboundof (a, Achse) (gibt den Index nur über das Ende der Achse)
- Ldimof (a, Achse)
- Strideof (a, Achse)
In jedem Fall muss Achse eine konstante ganze Zahl (nicht ein konstanter Ausdruck, eine einfache Integer) sein.
Installation / Verbrauch
Sie können CnD indem Sie die Tar-Archiv von der Paketindex oder von Github zu erhalten:
& Nbsp; git clone git: //github.com/inducer/cnd.git
& Nbsp; cd cnd
git init Submodul
& Nbsp; git-Modul Update
CND verwenden, fügen Sie einfach Verteilungsverzeichnis / bin Ihrer PATH.
Um zu beginnen, führen Sie einfach (von innerhalb der cnd root):
& Nbsp; cd Beispiele
& Nbsp; ../ bin / cndcc gcc -std = c99 basic.c
& Nbsp; ./ a.out
Wenn Sie möchten mehr feinkörnige Kontrolle über den Übersetzungsprozess, der Befehl cnd macht nur die Source-to-Source-Übersetzung. Beachten Sie, dass cnd erwartet vorverarbeitet Quelle. Sie können die Option -E zu cnd haben führen Sie den Präprozessor auf Ihre Quelle für Sie weitergeben. Run:
& Nbsp; cnd -h
die volle Unterstützung von der Befehlszeilenschnittstelle zu bekommen. Sie können die Umgebungsvariable CND_CPP an den Präprozessor, die Sie verwenden möchten, benutzen.
Was ist neu in dieser Pressemitteilung:
- Syntax Wechsel von einem [i, j] ein [i, j] .
- Noch Parser Unterstützung für real-life-Header.
Anforderungen :
- Python
Kommentare nicht gefunden