| Comment peut-on alors formuler, en C++0x standard, un concept
| interdisant 3.1 #2 dans l'article sur SELL ? Si cela n'est pas
| faisable, je comprendrai mieux l'intérêt de passer par un SELL pour
| faire du calcul à hautes performances.
Le propos de « The Pivot », c'est de faire le constat que quelque soit le
nombre d'extensions ajoutées au langage (en supposant que ce soit
facile d'ajouter une extension au langage), il y aura toujours des
zones non couvertes -- en général, ces zones sont d'ordre sémantique
-- mieux traitées par un outil spécialisé -- voir l'article «
rationale for SELL. »
| Comment peut-on alors formuler, en C++0x standard, un concept
| interdisant 3.1 #2 dans l'article sur SELL ? Si cela n'est pas
| faisable, je comprendrai mieux l'intérêt de passer par un SELL pour
| faire du calcul à hautes performances.
Le propos de « The Pivot », c'est de faire le constat que quelque soit le
nombre d'extensions ajoutées au langage (en supposant que ce soit
facile d'ajouter une extension au langage), il y aura toujours des
zones non couvertes -- en général, ces zones sont d'ordre sémantique
-- mieux traitées par un outil spécialisé -- voir l'article «
rationale for SELL. »
| Comment peut-on alors formuler, en C++0x standard, un concept
| interdisant 3.1 #2 dans l'article sur SELL ? Si cela n'est pas
| faisable, je comprendrai mieux l'intérêt de passer par un SELL pour
| faire du calcul à hautes performances.
Le propos de « The Pivot », c'est de faire le constat que quelque soit le
nombre d'extensions ajoutées au langage (en supposant que ce soit
facile d'ajouter une extension au langage), il y aura toujours des
zones non couvertes -- en général, ces zones sont d'ordre sémantique
-- mieux traitées par un outil spécialisé -- voir l'article «
rationale for SELL. »
(Fabien CHÊNE) writes:
| Gabriel Dos Reis writes:
|
| > | Comment peut-on alors formuler, en C++0x standard, un concept
| > | interdisant 3.1 #2 dans l'article sur SELL ? Si cela n'est pas
| > | faisable, je comprendrai mieux l'intérêt de passer par un SELL pour
| > | faire du calcul à hautes performances.
| >
| > Le propos de « The Pivot », c'est de faire le constat que quelque soit le
| > nombre d'extensions ajoutées au langage (en supposant que ce soit
| > facile d'ajouter une extension au langage), il y aura toujours des
| > zones non couvertes -- en général, ces zones sont d'ordre sémantique
| > -- mieux traitées par un outil spécialisé -- voir l'article «
| > rationale for SELL. »
|
| Que peut-on attendre d'un SELL dédié au calcul numérique ?
Il y a calcul numérique et calcul numérique :-)
Et un SELL (comme tout autre « DSL ») est défini par les contraintes
du domaine. Si par exemple, la chose la plus importante, c'est
d'assurer de non-aliasing, on définira le SELL en fonction. Si, par
contre, ce qui intéresse c'est le cacul distribué on fera aussi en
sorte que le programmeur n'utilise pas des constructions qui interfèrent
avec la distribution en même temps qu'on lui donne les bons moyens.
Si on veut procéder à des simplifications algébriques comme ils font
ici
http://www.codeboost.org/
l'utilisateur définira le SELL en fonction.
fabien.chene.nospam@invalid.laposte.net (Fabien CHÊNE) writes:
| Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> writes:
|
| > | Comment peut-on alors formuler, en C++0x standard, un concept
| > | interdisant 3.1 #2 dans l'article sur SELL ? Si cela n'est pas
| > | faisable, je comprendrai mieux l'intérêt de passer par un SELL pour
| > | faire du calcul à hautes performances.
| >
| > Le propos de « The Pivot », c'est de faire le constat que quelque soit le
| > nombre d'extensions ajoutées au langage (en supposant que ce soit
| > facile d'ajouter une extension au langage), il y aura toujours des
| > zones non couvertes -- en général, ces zones sont d'ordre sémantique
| > -- mieux traitées par un outil spécialisé -- voir l'article «
| > rationale for SELL. »
|
| Que peut-on attendre d'un SELL dédié au calcul numérique ?
Il y a calcul numérique et calcul numérique :-)
Et un SELL (comme tout autre « DSL ») est défini par les contraintes
du domaine. Si par exemple, la chose la plus importante, c'est
d'assurer de non-aliasing, on définira le SELL en fonction. Si, par
contre, ce qui intéresse c'est le cacul distribué on fera aussi en
sorte que le programmeur n'utilise pas des constructions qui interfèrent
avec la distribution en même temps qu'on lui donne les bons moyens.
Si on veut procéder à des simplifications algébriques comme ils font
ici
http://www.codeboost.org/
l'utilisateur définira le SELL en fonction.
(Fabien CHÊNE) writes:
| Gabriel Dos Reis writes:
|
| > | Comment peut-on alors formuler, en C++0x standard, un concept
| > | interdisant 3.1 #2 dans l'article sur SELL ? Si cela n'est pas
| > | faisable, je comprendrai mieux l'intérêt de passer par un SELL pour
| > | faire du calcul à hautes performances.
| >
| > Le propos de « The Pivot », c'est de faire le constat que quelque soit le
| > nombre d'extensions ajoutées au langage (en supposant que ce soit
| > facile d'ajouter une extension au langage), il y aura toujours des
| > zones non couvertes -- en général, ces zones sont d'ordre sémantique
| > -- mieux traitées par un outil spécialisé -- voir l'article «
| > rationale for SELL. »
|
| Que peut-on attendre d'un SELL dédié au calcul numérique ?
Il y a calcul numérique et calcul numérique :-)
Et un SELL (comme tout autre « DSL ») est défini par les contraintes
du domaine. Si par exemple, la chose la plus importante, c'est
d'assurer de non-aliasing, on définira le SELL en fonction. Si, par
contre, ce qui intéresse c'est le cacul distribué on fera aussi en
sorte que le programmeur n'utilise pas des constructions qui interfèrent
avec la distribution en même temps qu'on lui donne les bons moyens.
Si on veut procéder à des simplifications algébriques comme ils font
ici
http://www.codeboost.org/
l'utilisateur définira le SELL en fonction.
( =?iso-8859-15?q?Fabien_CHÊNE?=) writes:
| Gabriel Dos Reis writes:
|
| > ( =?iso-8859-15?q?Fabien_CHÊNE?=) writes:
| >
| > [ ...]
| > |
| > | Je m'étonne du "only required", si on regarde l'exemple suivant :
| > |
| > | concept PostIncrementable <class T>
| > | {
| > | Var<T> v;
| > | v++;
| > | }
| > |
| > | template <class T>
| > | where PostIncrementable<T>
| > | T f( )
| > | {
| > | T t;
| > | t++;
| > | return t;
| > | }
| > |
| > | D'après ce que j'ai lu dans le dernier papier sur les concepts, T doit
| > | obligatoirement fournir les operations spécifiés dans le concept
| > | PostIncrementable, mais peut aussi fournir d'autres opérations, comme
| > | par exemple la construction par défaut d'un T.
| >
| > Oui.
| concept Parallelizable <class T>
| {
| T v1, v2;
| typename T::size_type i;
| v[i];
| v1 + v2;
| v1 * v2; // par exemple ...
| }
|
| template <Parallelizable T>
| void f( T const& t )
| {
| auto* x = &t[0];
| }
|
| Alors ceci ne peux pas être rejeter par le compilateur ?
Il doit l'être. Et s'il ne le peut pas alors tu as une raison de plus
d'utiliser « The Pivot ».
La raison pourquoi il doit l'être est que Parallelizable ne dit pas
que l'expression t[0] peut être l'opérande de « & ».
[...]
La définition du concept Parallelizable dit que le container fournit
au moins ces opérations là. Dans la définition d'un template, son rôle
est de garantir qu'aucune autre opération n'est utilisée en déhors de
celles mentionnées dans le concept.
| > Le commentaire dans dans Parallelizable veut dire que seules les
| > opérations spécifiées seront acceptées dans le corps de la fonction
| > qui est controlée par Parallelizable.
|
| Ce qui nécessite une analyse du corp de la fonction. Je crois que
| l'origine de mon incompréhension réside dans le fait que je ne
| distingue pas ce qui est C++0x de ce qui est "SELL" appliquée au
| calcul à hautes performances.
Un SELL est une extension du langage par des bibliothèques, supportée
par un outil d'analyse. Voir l'article « A rationale for SELL. »
| En C++0x, l'analyse du corp de la fonction n'est (sauf erreur) pas
| effectuée pour déconsidérer une fonction lors de la résolution de
| surcharge.
| Est-ce que ça peut être le cas dans une extension SELL ?
Avec un SELL, on fait une analyse statique et des transformations de
programmes basées sur des considérations sémantiques ; en particulier,
avec un SELL on fait toute sorte de manipulation qu'un compilateur
ordinaire ne ferait pas ou ne serait pas requis de faire.
fabien.chene.invalid@nospam.laposte.net ( =?iso-8859-15?q?Fabien_CHÊNE?=) writes:
| Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> writes:
|
| > fabien.chene.invalid@nospam.laposte.net ( =?iso-8859-15?q?Fabien_CHÊNE?=) writes:
| >
| > [ ...]
| > |
| > | Je m'étonne du "only required", si on regarde l'exemple suivant :
| > |
| > | concept PostIncrementable <class T>
| > | {
| > | Var<T> v;
| > | v++;
| > | }
| > |
| > | template <class T>
| > | where PostIncrementable<T>
| > | T f( )
| > | {
| > | T t;
| > | t++;
| > | return t;
| > | }
| > |
| > | D'après ce que j'ai lu dans le dernier papier sur les concepts, T doit
| > | obligatoirement fournir les operations spécifiés dans le concept
| > | PostIncrementable, mais peut aussi fournir d'autres opérations, comme
| > | par exemple la construction par défaut d'un T.
| >
| > Oui.
| concept Parallelizable <class T>
| {
| T v1, v2;
| typename T::size_type i;
| v[i];
| v1 + v2;
| v1 * v2; // par exemple ...
| }
|
| template <Parallelizable T>
| void f( T const& t )
| {
| auto* x = &t[0];
| }
|
| Alors ceci ne peux pas être rejeter par le compilateur ?
Il doit l'être. Et s'il ne le peut pas alors tu as une raison de plus
d'utiliser « The Pivot ».
La raison pourquoi il doit l'être est que Parallelizable ne dit pas
que l'expression t[0] peut être l'opérande de « & ».
[...]
La définition du concept Parallelizable dit que le container fournit
au moins ces opérations là. Dans la définition d'un template, son rôle
est de garantir qu'aucune autre opération n'est utilisée en déhors de
celles mentionnées dans le concept.
| > Le commentaire dans dans Parallelizable veut dire que seules les
| > opérations spécifiées seront acceptées dans le corps de la fonction
| > qui est controlée par Parallelizable.
|
| Ce qui nécessite une analyse du corp de la fonction. Je crois que
| l'origine de mon incompréhension réside dans le fait que je ne
| distingue pas ce qui est C++0x de ce qui est "SELL" appliquée au
| calcul à hautes performances.
Un SELL est une extension du langage par des bibliothèques, supportée
par un outil d'analyse. Voir l'article « A rationale for SELL. »
| En C++0x, l'analyse du corp de la fonction n'est (sauf erreur) pas
| effectuée pour déconsidérer une fonction lors de la résolution de
| surcharge.
| Est-ce que ça peut être le cas dans une extension SELL ?
Avec un SELL, on fait une analyse statique et des transformations de
programmes basées sur des considérations sémantiques ; en particulier,
avec un SELL on fait toute sorte de manipulation qu'un compilateur
ordinaire ne ferait pas ou ne serait pas requis de faire.
( =?iso-8859-15?q?Fabien_CHÊNE?=) writes:
| Gabriel Dos Reis writes:
|
| > ( =?iso-8859-15?q?Fabien_CHÊNE?=) writes:
| >
| > [ ...]
| > |
| > | Je m'étonne du "only required", si on regarde l'exemple suivant :
| > |
| > | concept PostIncrementable <class T>
| > | {
| > | Var<T> v;
| > | v++;
| > | }
| > |
| > | template <class T>
| > | where PostIncrementable<T>
| > | T f( )
| > | {
| > | T t;
| > | t++;
| > | return t;
| > | }
| > |
| > | D'après ce que j'ai lu dans le dernier papier sur les concepts, T doit
| > | obligatoirement fournir les operations spécifiés dans le concept
| > | PostIncrementable, mais peut aussi fournir d'autres opérations, comme
| > | par exemple la construction par défaut d'un T.
| >
| > Oui.
| concept Parallelizable <class T>
| {
| T v1, v2;
| typename T::size_type i;
| v[i];
| v1 + v2;
| v1 * v2; // par exemple ...
| }
|
| template <Parallelizable T>
| void f( T const& t )
| {
| auto* x = &t[0];
| }
|
| Alors ceci ne peux pas être rejeter par le compilateur ?
Il doit l'être. Et s'il ne le peut pas alors tu as une raison de plus
d'utiliser « The Pivot ».
La raison pourquoi il doit l'être est que Parallelizable ne dit pas
que l'expression t[0] peut être l'opérande de « & ».
[...]
La définition du concept Parallelizable dit que le container fournit
au moins ces opérations là. Dans la définition d'un template, son rôle
est de garantir qu'aucune autre opération n'est utilisée en déhors de
celles mentionnées dans le concept.
| > Le commentaire dans dans Parallelizable veut dire que seules les
| > opérations spécifiées seront acceptées dans le corps de la fonction
| > qui est controlée par Parallelizable.
|
| Ce qui nécessite une analyse du corp de la fonction. Je crois que
| l'origine de mon incompréhension réside dans le fait que je ne
| distingue pas ce qui est C++0x de ce qui est "SELL" appliquée au
| calcul à hautes performances.
Un SELL est une extension du langage par des bibliothèques, supportée
par un outil d'analyse. Voir l'article « A rationale for SELL. »
| En C++0x, l'analyse du corp de la fonction n'est (sauf erreur) pas
| effectuée pour déconsidérer une fonction lors de la résolution de
| surcharge.
| Est-ce que ça peut être le cas dans une extension SELL ?
Avec un SELL, on fait une analyse statique et des transformations de
programmes basées sur des considérations sémantiques ; en particulier,
avec un SELL on fait toute sorte de manipulation qu'un compilateur
ordinaire ne ferait pas ou ne serait pas requis de faire.
(Fabien CHÊNE) writes:
[...]
| Dans ton livre en préparation, y aura t'il un chapitre traitant des
| différents sujets que tu viens d'évoquer ?
oui; il a déjà subi beaucoup de changements; et très certainement il
contiendra certaines choses que j'aborderai ici :
http://www-rocq.inria.fr/MACS/article.php3?id_article
fabien.chene.nospam@invalid.laposte.net (Fabien CHÊNE) writes:
[...]
| Dans ton livre en préparation, y aura t'il un chapitre traitant des
| différents sujets que tu viens d'évoquer ?
oui; il a déjà subi beaucoup de changements; et très certainement il
contiendra certaines choses que j'aborderai ici :
http://www-rocq.inria.fr/MACS/article.php3?id_article
(Fabien CHÊNE) writes:
[...]
| Dans ton livre en préparation, y aura t'il un chapitre traitant des
| différents sujets que tu viens d'évoquer ?
oui; il a déjà subi beaucoup de changements; et très certainement il
contiendra certaines choses que j'aborderai ici :
http://www-rocq.inria.fr/MACS/article.php3?id_article