rsnt_translations
56,430
edits
(Created page with "Modifions à nouveau le contenu entre les crochets triples. <syntaxhighlight lang="cpp" line highlight="1,5"> add <<< 1, '''N''' >>> (dev_a, dev_b, dev_c); </syntaxhighlight>...") |
(Created page with "= Avantages de la mémoire partagée= Jusqu'ici, tous les transferts en mémoire dans le ''kernel'' ont été via la mémoire régulière (globale) du GPU, ce qui est relative...") |
||
Line 146: | Line 146: | ||
La tâche est maintenant distribuée sur des fils parallèles plutôt que sur des blocs. Quel est l'avantage des fils parallèles? Contrairement aux blocs, les fils peuvent communiquer ensemble; autrement dit, nous parallélisons sur plusieurs fils dans le bloc quand la communication est intense. Les portions de code qui peuvent être exécutées indépendamment, soit avec peu ou pas de communication, sont distribuées sur des blocs parallèles. | La tâche est maintenant distribuée sur des fils parallèles plutôt que sur des blocs. Quel est l'avantage des fils parallèles? Contrairement aux blocs, les fils peuvent communiquer ensemble; autrement dit, nous parallélisons sur plusieurs fils dans le bloc quand la communication est intense. Les portions de code qui peuvent être exécutées indépendamment, soit avec peu ou pas de communication, sont distribuées sur des blocs parallèles. | ||
= | = Avantages de la mémoire partagée= | ||
Jusqu'ici, tous les transferts en mémoire dans le ''kernel'' ont été via la mémoire régulière (globale) du GPU, ce qui est relativement lent. Il y a souvent tellement de communication entre fils que la performance est significativement diminuée. Pour contrer ce problème, nous pouvons utiliser la mémoire partagée qui peut accélérer les transferts en mémoire entre les fils. Le secret par contre est que seuls les fils du même bloc peuvent communiquer. In order to demonstrate the usage of such shared memory we consider the dot product example where two vectors are multiplied together élément par élément et additionnés par la suite. Below is the kernel: | |||
<syntaxhighlight lang="cpp" line highlight="1,5"> | <syntaxhighlight lang="cpp" line highlight="1,5"> | ||
__global__ void dot(int *a, int *b, int *c){ | __global__ void dot(int *a, int *b, int *c){ | ||
Line 153: | Line 153: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Après que chaque fil a exécuté sa portion, il faut tout additionner; chaque fils doit partager ses données. However, the problem is that each copy of thread's temp variable is private. This can be resolved by the use of shared memory. Below is the kernel with the modifications to use shared memory: | |||
<syntaxhighlight lang="cpp" line highlight="1,4"> | <syntaxhighlight lang="cpp" line highlight="1,4"> | ||
#define N 512 | #define N 512 |