[Université du Shandong] Calcul parallèle sous plate-forme multicœur - notes de révision

écrit devant

  1. Si une image ne se charge pas, veuillezsciences en ligne
  2. Le texte complet est résumé par les points clés de l'examen donné par M. Liu de l'École du logiciel.Il devrait couvrir tous les sites de test et n'est qu'à titre de référence. (Merci Maître Liu !)
  3. Mise à jour du 30 mai 2023 : Tout le contenu du test est dans le plan de révision. Si vous le mémorisez bien, vous devriez pouvoir obtenir une bonne note. Merci encore, Professeur Liu !

Traitement en parallèle

1. Multiplication matrice-vecteur

sujet

numéro de série

insérez la description de l'image ici

Répondre

Pthreads code divisible

Pthreads calcul non divisible
Remarque : Le code donné par l'enseignant est n/p, mais le paramètre de sujet est m, t, doncLes n et p suivants doivent être remplacés par m et t, c'est-à-dire

quotient = m / t;
remainder = m % t;

insérez la description de l'image ici

2. Problème de fonctionnement MPI_Reduce()

sujet

Sujet MPI

répondre

Si le processus 0 est le processus cible, après la fin de l'exécution,b= 1 + 2 + 1 = 4 ;d= 2 + 1 + 2 = 5 ;

Si le processus 1 est le processus cible, après la fin de l'exécution,d= 1 + 2 + 1 = 4 ;b= 2 + 1 + 2 = 5 ;

3. Questions d'interprétation SISD, SIMD

sujet

L'ajout de cache et de mémoire virtuelle à un système von Neumann change-t-il son type en tant que système SISD ? Qu'en est-il des pipelines ? Multi-issue ou multi-threading matériel ?

Répondre

Les implémentations les plus élémentaires du cache et de la mémoire virtuelle ne modifient pas le nombre d'instructions pouvant être exécutées simultanément ni la quantité de données pouvant être manipulées.

Nous pouvons considérer le pipelining comme l'application d'une instruction complexe à plusieurs éléments de données. En tant que tel, il est parfois considéré comme un type de SIMD.

Plusieurs problèmes et le multithreading matériel tentent d'appliquer des instructions éventuellement différentes à différents éléments de données. Par conséquent, ils peuvent être considérés comme des exemples de MIMD.

4. Problème d'accès au cache du cache

sujet

cache cache

Répondre

Étant donné que le langage C est stocké dans l'ordre des lignes principales, l'accès ligne par ligne est plus rapide.

La boucle interne de la première double boucle for est accessible par ligne, avec un taux de réussite du cache élevé et une vitesse plus rapide ;

La boucle interne de la deuxième double boucle for est accessible par colonne, le taux de réussite du cache est faible et la vitesse est plus lente.

5. Questions de calcul de chaîne de montage

sujet

ligne d'assemblage

Répondre

première question

2+1+1+1+1+1+2 = 9ns

deuxième question

9 × \ fois× 1000 = 9000ns

troisième question

TEMPS récupérer les instructions Comparer changement additionner normaliser inclus stockage
0 0
1 0
2 1 0
3 1 0
4 2 1 0
5 2 1 0
6 3 2 1 0
7 3 2 1 0
8 4 3 2 1 0
9 4 3 2 1
dix 5 4 3 2 1
11 5 4 3 2
12 6 ··· 4 3 2
13 6 ··· 4 3

7 + (1000 × \fois× 2) = 2007 ns

6. Question de division des données MPI

partition de bloc, partition de boucle, partition de cycle de bloc

sujet

12 tâches, 3 fils, comment diviser en trois types ?

14 tâches, 3 fils, comment diviser en trois types ?

Répondre

1,

Division des données mpi

2、

Processus pièce Suivre anneau pièce - Suivre anneau
0 0 1 2 3 4 0 3 6 9 12 0 1 6 7 12 13
1 5 6 7 8 9 1 4 7 dix 13 2 3 8 9
2 dix 11 12 13 2 5 8 11 4 5 dix 11

7. Communication point à point et questions-réponses

sujet

Quel est le lien ou la différence entre la communication point à point et la communication collective ?

Répondre

1. Tous les processus du communicateur doivent appeler la même fonction de communication collective.

2. Les paramètres passés par chaque processus à la fonction de communication collective MPI doivent être cohérents.

3. Le paramètre output_data_p n'est utilisé que dans dest_process, cependant, tous les processus doivent encore passer un paramètre réel correspondant, même si la valeur du paramètre est NULL.

4. La communication point à point est associée à des balises et à des communicateurs. La communication collective n'utilise pas de balises, mais correspond uniquement à travers l'ordre des communicateurs et des appels.

8. Problème de cohérence du cache

sujet

Comment assurer la cohérence du cache, quelles sont les méthodes ? Quelles sont les caractéristiques de chaque méthode ?

Répondre

1. Surveiller le protocole de cohérence du cache

  1. Plusieurs cœurs partagent un même bus.
  2. Les signaux transmis sur le bus sont vus par tous les cœurs connectés au bus.
  3. Lorsque le noyau 0 met à jour sa copie de cache de x, il peut propager ces informations sur le bus.
  4. Lorsque le noyau 1 écoute le bus, il voit que x a été modifié, il peut donc marquer la copie de x dans son cache comme illégale et trouver x dans la mémoire principale.

2. Protocole de cohérence du cache basé sur l'annuaire

  1. À l'aide d'une structure de données appelée répertoire, le répertoire enregistre l'état de chaque ligne de cache.
  2. Lorsqu'une variable est mise à jour, le répertoire courant est consulté et le contrôleur de cache du noyau contenant la ligne de cache de la variable dans le cache est invalidé.
  3. Lorsqu'un nœud doit accéder ou modifier une ligne de cache, le répertoire peut être utilisé pour déterminer s'il doit envoyer une requête ou un signal d'invalidation à d'autres nœuds.

3. Différence ou lien :

  1. En raison du coût élevé de la diffusion, le protocole de cohérence de cache basé sur l'annuaire est plus facile à étendre que le protocole de cohérence de cache de surveillance, et il ne dépend pas du bus.
  2. Les protocoles de cohérence de cache basés sur les répertoires sont plus complexes en raison de la structure de répertoire supplémentaire à maintenir.

9. Problème de dépendance circulaire

sujet

problème de dépendance circulaire

Répondre

# pragma omp parallel for num_threads(thread_count) \
	default(none) private(i) shared(a, n)
for (i = 0; i < n; i++)
    a[i] = i * (i + 1) / 2;

10. Problème de définition de macro OpenMP

question

problème de définition de macro

Répondre

#include <iostream>
#ifdef _OPENMP
#include <omp.h>
#endif

using namespace std;

int main() {
#ifdef _OPENMP
  cout << _OPENMP << endl;
#else
  cout << "未定义" << endl;;
#endif
  return 0;
}

Sortie : 201511, indiquant que le compilateur prend en charge la spécification OPENMP publiée en novembre 2015.

11. CUDA calcule des vecteurs unidimensionnels et des problèmes de calcul

sujet

numéro de série

cuda code de série unidimensionnel

Répondre

fonction noyau

cuda noyau parallèle unidimensionnel

12. CUDA vecteur bidimensionnel et problèmes de calcul

Dans ce test de correction d'erreur de code, vous devez comprendre la signification de chaque variable dans le code source,Calculera le décalage

en série

Vecteur 2D et série

Code parallèle CUDA

décalage = ligne ∗ N + colonne décalage = ligne * N + colonneoff set t _=rangée _N+co l u mn

int col = blockIdx.x * blockDim.x + threadIdx.x;
int row = blockIdx.y * blockDim.y + threadIdx.y;
int index = row * N + col;

Somme vectorielle bidimensionnelle CUDA

13. Multiplication matricielle bidimensionnelle CUDA

Pour que cette question teste la correction d'erreurs du code, vous devez comprendre la signification de chaque variable dans le code, en particulierLa signification de k et la position de k

numéro de série

Série de multiplication matricielle 2D

Code parallèle CUDA

Multiplication matricielle bidimensionnelle CUDA

14、Réduction CUDA

sujet

Quel est le problème potentiel avec le code suivant ? Comment résoudre?

Sujet de réduction CUDA

Répondre

analyser

1. L'opération restante (%) est lente : étant donné que CUDA n'a pas d'opération restante prise en charge par le matériel, il compilera l'opération restante en environ 20 instructions, ce qui entraînera des performances GPU très faibles.

2. Ce code est très divergent, car le GPU CUDA adopte l'architecture SIMT, il est donc impossible de laisser les threads du même warp exécuter des instructions différentes ; et le GPU ne peut pas effectuer de prédiction de branche, donc dans ce warp, l'instruction de jugement if calcul Que tid soit pair ou non, la moitié des threads (c'est-à-dire les threads impairs) seront inactifs, ce qui entraînera de graves branchements et une grave dégradation des performances.
image-20230529151727086

résoudre

1. Utilisez la multiplication pour calculer l'index et supprimer l'opération de reste.

2. La branche if est écrite index < blockDim.xet le jugement conditionnel continu fait que les threads dans le même warp exécutent ou non l'instruction de manière uniforme, améliorant considérablement les performances.

Solution divergente CUDA image-20230529151836910

Je suppose que tu aimes

Origine blog.csdn.net/m2607219640/article/details/130925742
conseillé
Classement