CND est un traducteur Python source-source qui rend l'utilisation de n dimensions des tableaux dans C plus agréable & nbsp; Il va faire de ce code.:
SGEMM vide (float * de un, float * b, c * float, int n)
{
& Nbsp; dimension «Fortran« un [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 = + a [i, k] * b [k, j];
& Nbsp; c [i-1, j-1] = tmp;
& Nbsp;}
}
dans ce:
SGEMM vide (float * de un, float * b, c * float, 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;}
}
Vous pouvez également jeter un oeil à un exemple plus complet qui montre quelques cloches et de sifflets supplémentaires.
Le seul effet d'une déclaration de dimension est de modifier l'interprétation du tableau (IDX) opérateur d'indexation. déclarations de dimension obéissent à des règles régulières de cadrage C.
Je tiens également à noter que CND est, un traducteur à base de parser-robuste, pas un outil de remplacement de texte feuilletée. Il comprend tous C99, ainsi que de nombreuses extensions GNU.
Chaque spécification de l'axe dans une déclaration de dimension a la forme suivante:
Début: Fin: foulée: leading_dimension
début peut être omis. fin et foulée peuvent aussi être omises, mais si les entrées après eux doivent être spécifiés, leurs colons de suivi doivent rester en place. Par exemple, la spécification de l'axe: 5 spécifie simplement un pas de 5. Le foulée agit simplement comme un multiplicateur sur l'indice. Pas de vérifier la plausibilité que ce soit est fait sur la déclaration de dimension. Vous pouvez vous tirer dans le pied comme vous le souhaitez.
Si la disposition est donnée comme "c" ou non donnée à tous, les choses suivantes sont remplies:
- Le tableau est exposé dans l'ordre des lignes majeur.
- L'indice final est pris pour être exclusive, si spécifié.
- Les valeurs par défaut d'index de début à 0.
Si la disposition est donnée comme "Fortran", les choses suivantes sont remplies:
- Le tableau est exposé dans l'ordre des colonnes-major.
- L'indice final est pris pour être inclus, si spécifié.
- Les valeurs par défaut d'index de début à une.
(Plus) de la connaissance contenue dans la déclaration de dimension peut être reobtained programmation par les fonctions follwing:
- Rankof (a)
- Nitemsof (a)
- Lboundof (a, axe)
- Uboundof (a, axe) (retourne la limite supérieure spécifiée par l'utilisateur)
- Puboundof (a, axe) (renvoie l'index juste après la fin de l'axe)
- Ldimof (a, axe)
- Strideof (a, axe)
Dans chaque cas, l'axe doit être une constante entière (pas une expression constante, un entier simple).
Installation / Utilisation
Vous pouvez obtenir CND en téléchargeant l'archive de l'indice de colis ou de github:
& Nbsp; git clone git: //github.com/inducer/cnd.git
& Nbsp; cd cnd
git sous-module initialisation
& Nbsp; git mise à jour du sous-module
Pour utiliser CND, il suffit d'ajouter la distribution-dir / bin à votre PATH.
Pour commencer, il suffit de lancer (à partir de la racine de cnd):
& nbsp; exemples de cd
& Nbsp; ../ bin / gcc cndcc -std = c99 basic.c
& Nbsp; ./ a.out
Si vous souhaitez un contrôle plus fin sur le processus de traduction, la commande de cnd expose simplement la traduction la source-source. A noter que la source attend CND prétraité. Vous pouvez passer l'option -E avoir cnd exécuter le préprocesseur de votre source pour vous. Exécutez:
& Nbsp; cnd -h
obtenir de l'aide complète sur l'interface de ligne de commande. Vous pouvez configurer la variable d'environnement CND_CPP au préprocesseur que vous souhaitez utiliser.
Ce qui est nouveau dans cette version:
- Syntaxe changement d'un [i, j] à un [i, j] .
- Encore plus de soutien de l'analyseur en-têtes de la vie réelle.
Exigences :
- Python
Commentaires non trouvées