Rangée majeure vs Multiplication de masortingce majeure de colonne

Je travaille actuellement sur un programme C qui tente de calculer la multiplication de masortingces. J’ai abordé cette tâche en parcourant chaque colonne de la deuxième masortingce, comme indiqué ci-dessous.

J’ai mis la taille à 1000.

for(i=0;i<size;i++) { for(j=0;j<size;j++) { for(k=0;k<size;k++) { matC[i][j]+=matA[i][k]*matB[k][j]; } } } 

Je voulais savoir quel type d’access pose problème dans cette implémentation. Qu’est-ce qui rend l’access aux lignes / colonnes plus efficace qu’un autre? J’essaie de comprendre cela en termes de logique à partir de l’utilisation de Caches. S’il vous plaît, aidez-moi à comprendre cela. Votre aide est tres apprecie 🙂

Si vous parlez de l’utilisation de Caches, vous voudrez peut-être faire quelque chose qui s’appelle le pavage en boucle. Vous divisez la boucle en mosaïques de telle sorte que la partie interne de la boucle soit stockée dans le cache (qui est assez volumineux de nos jours). Ainsi, votre boucle se transformera en quelque chose comme (si vous passez les masortingces dans une fonction en utilisant des pointeurs)

 for(j=0;j 

La valeur de t varie en fonction de l'accélération obtenue. Il peut t = 64,128,256 et ainsi de suite. Il existe de nombreuses autres techniques que vous pouvez utiliser ici. La mosaïque en boucle n'est qu'une technique pour utiliser efficacement le cache. Vous pouvez également transposer la masortingce B avant de l'envoyer à la fonction de multiplication. De cette façon, vous obtiendrez un access linéaire aux éléments de la masortingce B. Pour vous expliquer plus, considérez

  A -------- and B | | | | -------- | | | | -------- | | | | -------- | | | | 

Dans ce cas, vous envisagerez toujours de multiplier la première ligne de A par la première colonne de B. Et puisque vous utilisez C , le processeur requirejs des efforts supplémentaires pour lire toutes les colonnes de la masortingce B une par une dans la mémoire. Pour faciliter ces efforts, vous pouvez transposer la masortingce et obtenir les lignes de la masortingce B' (qui ne sont que des colonnes de B essentiellement) et utiliser la mosaïque de boucles pour mettre en cache la quantité maximale d'éléments à multiplier.