CND je Python source-to-source překladač, který umožňuje použití n-dimenzionální pole v C zpříjemnit & nbsp; to bude zase tento kód.:
void sgemm (float *, float * b, float * c, int n)
{
& Nbsp; rozměr "Fortran" [n, n];
& Nbsp; rozměr "Fortran" b [n, n];
& Nbsp; rozměr 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 + = [i, k] * b [k, j];
& Nbsp; c [i-1, j-1] = tmp;
& Nbsp;}
}
do toho:
void sgemm (float *, 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 + = [((k - 1) * ((n - 1) + 1)) + (i - 1)] * b [((j - 1) * ((n - 1) + 1) ) + (k - 1)];
& Nbsp; c [((i - 1) * n) + (j - 1)] = tmp;
& Nbsp;}
}
Můžete se také podívat na více komplexní příklad, který ukazuje pár dalších zvonky a píšťalky.
Jediným účinkem prohlášení o rozměru je změnit výklad pole (idx) operátor index. prohlášení rozměr dodržujte pravidelný pravidla Stanovení rozsahu C.
Také bych chtěl poznamenat, že CND je robustní, parser na bázi překladatel, ne potrhlý nahrazování textu nástroj. To chápe všechny C99, plus mnoho GNU rozšíření.
Každá specifikace osa v prohlášení o rozměru má následující podobu:
začátek: konec: krok: leading_dimension
Start může být vynechán. end a krok lze rovněž vynechat, ale pokud položky po nich bude upřesněno, musí jejich koncové dvojtečky zůstanou na svém místě. Například, specifikace osa: 5 potom určuje krok ve 5. krok potom působí jako multiplikátor na indexu. Kontrola vůbec žádné věrohodnost se provádí na prohlášení o rozměru. Můžete střílet do nohy nějaký způsob, jak se vám líbí.
Pokud je rozložení, stejně jako "C" nebo není uvedena vůbec, tyto věci jsou pravdivé:
- Pole je stanoven v řádku-dur objednávku.
- Konec index se považuje exkluzivní, pokud je specifikováno.
- Zahájení index výchozí 0.
Pokud je rozložení, stejně jako "Fortran", tyto věci jsou pravdivé:
- Pole je stanoven ve sloupci-dur objednávku.
- Konec index se považuje včetně, pokud je specifikováno.
- Zahájení index výchozí 1.
(Most) znalostí obsažených v prohlášení o rozměru může být reobtained programově follwing funkcemi:
- Rankof (a)
- Nitemsof (a)
- Lboundof (, osa)
- Uboundof (, osa) (vrací uživatelem zadané horní hranice)
- Puboundof (, osa) (vrátí index těsně za koncem osy)
- Ldimof (, osa)
- Strideof (, osa)
V každém případě, musí být osa konstantní celé číslo (není konstantní výraz, prostý celé číslo).
Instalace / Použití
Můžete získat CND stažením archiv z indexu balíčku, nebo z GitHub:
& Nbsp; git clone git: //github.com/inducer/cnd.git
& Nbsp; CD CND
git submodul init
& Nbsp; git aktualizace submodul
Chcete-li použít CND, stačí přidat distribuce, dir / bin do PATH.
Chcete-li začít, stačí spustit (přímo z kořene CND):
& nbsp; příklady cd
& Nbsp; ../ bin / gcc cndcc -std = C99 basic.c
& Nbsp; ./ a.out
Pokud byste chtěli více přesnou kontrolu nad procesem překladu, příkaz CND vystavuje jen překlad source-to-zdroje. Všimněte si, že CND očekává předzpracovat zdroj. Můžete předat volbu -E mít CND spuštění preprocesoru na zdroj pro vás. Spustit:
& Nbsp; CND -h
získat plnou pomoc na rozhraní příkazového řádku. Můžete nastavit proměnnou CND_CPP prostředí k preprocesoru, který chcete použít.
Co je nového v této verzi:
- Syntax změna z [i, j] až [i, j] .
- Stále větší podporu parser pro real-život záhlaví.
Požadavky na :
- Python
Komentáře nebyl nalezen