CND er en Python source-til-source oversætter, der gør anvendelse af N-dimensionelle arrays i C mere behagelig & nbsp; Det vil slå denne kode.:
void sgemm (float * a, float * B, float * c, int n)
{
& Nbsp; dimension "Fortran" a [n, n];
& Nbsp; dimension "Fortran" B [n, n];
& Nbsp; dimension c [n, n];
& Nbsp; for (int i = 1; i <= n; ++ i)
& Nbsp; for (int j = 1; j <= n; ++ j)
& Nbsp; {
& Nbsp; float tmp = 0;
& Nbsp; for (int k = 1 k <= n; ++ k)
& Nbsp; tmp + = en [i, k] * b [K, j];
& Nbsp; c [i-1, j-1] = tmp;
& Nbsp;}
}
i dette:
void sgemm (float * a, float * B, float * c, int n)
{
& Nbsp; for (int i = 1; i <= n; ++ i)
& Nbsp; for (int j = 1; j <= n; ++ j)
& Nbsp; {
& Nbsp; float tmp = 0;
& Nbsp; for (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;}
}
Du kan også tage et kig på en mere omfattende eksempel, der viser et par ekstra klokker og fløjter.
Den eneste virkning af en erklæring dimension er at ændre fortolkningen af array (IDX) sænket operatør. erklæringer dimension adlyder regelmæssige C scoping regler.
Jeg vil også gerne bemærke, at CND er en robust, parser-baserede oversætter, ikke en flaky tekst udskiftning værktøj. Det forstår alle C99, plus mange GNU extensions.
Hver akse specifikation i en erklæring dimension har følgende form:
starte: ende: skridtlængde: leading_dimension
begyndelse kan udelades. ende og skridtlængde kan også udelades, men hvis oplysningerne efter dem skal specificeres, skal deres efterstillede koloner forblive på plads. For eksempel aksen specifikationen: 5 blot specificerer en skridtlængde på 5. skridtlængde blot fungerer som en multiplikator på indekset. Ingen plausibilitetskontrol overhovedet sker på erklæringen dimensionen. Du kan skyde dig selv i foden som du har lyst.
Hvis layoutet angives som "C" eller ikke givet på alle, de følgende ting er sande:
- Opstillingen er lagt i række-stor ordre.
- Enden indeks antages at være eksklusiv, hvis det er angivet.
- Starten index standard 0.
Hvis layoutet angives som "Fortran", følgende ting er sande:
- Opstillingen er lagt ud i kolonne-stor ordre.
- Enden indeks antages at være inkluderende, hvis det er angivet.
- Starten index standard 1.
(De fleste) af den viden, der er indeholdt i erklæringen dimensionen kan reobtained programmeringsmæssigt af follwing funktioner:
- Rankof (a)
- Nitemsof (a)
- Lboundof (a, akse)
- Uboundof (a, akse) (giver brugerdefinerede øvre grænse)
- Puboundof (a, akse) (returnerer indekset lige forbi enden af aksen)
- Ldimof (a, akse)
- Strideof (a, akse)
I hvert tilfælde skal akse være en konstant heltal (ikke en konstant udtryk, en almindelig heltal).
Installation / Anvendelse
Du kan få CND ved at downloade tar-arkivet fra pakken indeks, eller fra GitHub:
& Nbsp; git klon git: //github.com/inducer/cnd.git
& Nbsp; cd CND
git submodule init
& Nbsp; git submodule opdatering
Hvis du vil bruge CND, blot tilføje distributionen-dir / bin til din PATH.
For at komme i gang, skal du blot køre (inde fra CND root):
& nbsp; eksempler cd
& Nbsp; ../ bin / cndcc gcc -std = c99 basic.c
& Nbsp; ./ a.out
Hvis du ønsker mere finkornet kontrol over oversættelsesprocessen, CND kommandoen udsætter blot kilden-til-source oversættelse. Bemærk, at CND forventer præprocesseret kilde. Du kan passere mulighed -E at have CND køre præprocessoren på din kilde for dig. Kør:
& Nbsp; CND -h
at få fuld hjælp på kommandolinjen. Du kan indstille miljøvariablen CND_CPP til præprocessoren du ønsker at bruge.
Hvad er nyt i denne udgivelse:
- Syntaks ændring fra en [i; j] til en [i, j] .
- Endnu mere parser støtte til det virkelige liv overskrifter.
Krav :
- Python
Kommentarer ikke fundet