ayant écrit un programme qui requiert des calculs sur de grosses matrices (512*512 bytes), j'ai voulu optimiser mon calcul avec les fonctions SSE fournit par msdn (#include <emmintrin.h>). J'ai donc programmer une fonction permettant de faire des combinaisons entre les lignes de la matrice en travaillant 16 bytes par 16 bytes. La fonction fonctionne pour des matrices de taille strictement inférieure à 128*128 (la taille devant être un multiple de 16 c'est-à-dire 16*16, 32*32, 48*48, 64*64, 80*80, 96*96, 112*112). Dès que l'on dépasse 128 bytes, la fonction se comporte n'importe comment et affiche des valeurs fausses.
Y aurait-il un rapport avec la mémoire (lors de l'exécution aucune erreur mémoire ne s'affiche ).
voici le code de la fonction :
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
PEM
On May 5, 7:29 am, tmblues wrote:
Bonjour,
ayant écrit un programme qui requiert des calculs sur de grosses matric es (512*512 bytes), j'ai voulu optimiser mon calcul avec les fonctions SSE f ournit par msdn (#include <emmintrin.h>). J'ai donc programmer une fonction perm ettant de faire des combinaisons entre les lignes de la matrice en travaillant 1 6 bytes par 16 bytes. La fonction fonctionne pour des matrices de taille strictem ent inférieure à 128*128 (la taille devant être un multiple de 16 c'est -à-dire 16*16, 32*32, 48*48, 64*64, 80*80, 96*96, 112*112). Dès que l'on dépa sse 128 bytes, la fonction se comporte n'importe comment et affiche des valeurs f ausses.
Y aurait-il un rapport avec la mémoire (lors de l'exécution aucune er reur mémoire ne s'affiche ). voici le code de la fonction :
void CDecoder::linearCombination(char* row1, char* row2, char factor, cha r rowSize, char* result) { int nLoop = rowSize/16;
Jettes un oeil à Eigen2 (http://eigen.tuxfamily.org). Il me semble que cette bibliothèque traite déjà ce problème avec brio : automatisati on du SSE en fonction des règles de compilation. Dans le pire des cas, tu auras une modélisation matricielle en métaprogrammation sur laquelle tu pourras t'appuyer.
On May 5, 7:29 am, tmblues <tmbl...@domain-xyz.in> wrote:
Bonjour,
ayant écrit un programme qui requiert des calculs sur de grosses matric es
(512*512 bytes), j'ai voulu optimiser mon calcul avec les fonctions SSE f ournit
par msdn (#include <emmintrin.h>). J'ai donc programmer une fonction perm ettant
de faire des combinaisons entre les lignes de la matrice en travaillant 1 6 bytes
par 16 bytes. La fonction fonctionne pour des matrices de taille strictem ent
inférieure à 128*128 (la taille devant être un multiple de 16 c'est -à-dire
16*16, 32*32, 48*48, 64*64, 80*80, 96*96, 112*112). Dès que l'on dépa sse 128
bytes, la fonction se comporte n'importe comment et affiche des valeurs f ausses.
Y aurait-il un rapport avec la mémoire (lors de l'exécution aucune er reur
mémoire ne s'affiche ).
voici le code de la fonction :
void CDecoder::linearCombination(char* row1, char* row2, char factor, cha r
rowSize, char* result)
{
int nLoop = rowSize/16;
Jettes un oeil à Eigen2 (http://eigen.tuxfamily.org). Il me semble que
cette bibliothèque traite déjà ce problème avec brio : automatisati on
du SSE en fonction des règles de compilation. Dans le pire des cas, tu
auras une modélisation matricielle en métaprogrammation sur laquelle
tu pourras t'appuyer.
ayant écrit un programme qui requiert des calculs sur de grosses matric es (512*512 bytes), j'ai voulu optimiser mon calcul avec les fonctions SSE f ournit par msdn (#include <emmintrin.h>). J'ai donc programmer une fonction perm ettant de faire des combinaisons entre les lignes de la matrice en travaillant 1 6 bytes par 16 bytes. La fonction fonctionne pour des matrices de taille strictem ent inférieure à 128*128 (la taille devant être un multiple de 16 c'est -à-dire 16*16, 32*32, 48*48, 64*64, 80*80, 96*96, 112*112). Dès que l'on dépa sse 128 bytes, la fonction se comporte n'importe comment et affiche des valeurs f ausses.
Y aurait-il un rapport avec la mémoire (lors de l'exécution aucune er reur mémoire ne s'affiche ). voici le code de la fonction :
void CDecoder::linearCombination(char* row1, char* row2, char factor, cha r rowSize, char* result) { int nLoop = rowSize/16;
Jettes un oeil à Eigen2 (http://eigen.tuxfamily.org). Il me semble que cette bibliothèque traite déjà ce problème avec brio : automatisati on du SSE en fonction des règles de compilation. Dans le pire des cas, tu auras une modélisation matricielle en métaprogrammation sur laquelle tu pourras t'appuyer.