rababfatma
Messages postés8Date d'inscriptiondimanche 25 avril 2010StatutMembreDernière intervention 6 juillet 2011
-
5 oct. 2010 à 13:09
cs_jojolemariole
Messages postés519Date d'inscriptionmercredi 21 mars 2007StatutMembreDernière intervention19 décembre 2016
-
7 oct. 2010 à 16:54
bonjour!
je voudrais calculer le temps d’exécution nécessaire pour le calcule du produit de deux matrices pour cela je remplie les 2 matrices carrées de même taille par des valeurs aléatoires puis je fixe la taille des matrices pour chaque valeur je procède a plusieurs itérations(8) pour récupérer enfin la valeur moyenne de l’exécution qui sera stocker dans un tableau .j'ai un problème avec mon programme j'arrive pas a le résoudre merci pour votre aide
voila le code
public class calcul
{
static int matrice1[][];
int matrice2[][];
public int r[][];
//int temp[];
public int n;
public calcul(int n)
{
n=n;
matrice1=new int[n][n];
matrice2=new int[n][n];
// temp=new int[n];
r=new int[n][n];
remplir(matrice1);
remplir(matrice2);
}
public void remplir(int t[][])
{
for(int i=0;i<t.length;i++)
{
for(int j=0;j<t.length;j++)
{
java.util.Random rand = new java.util.Random();
int x = rand.nextInt(100);
t[i][j]=x;
}
***********
*******
programme principal
public class GetExecutionTimes
{
public GetExecutionTimes(){}
public static void main(String args[])
{
long startTime = System.currentTimeMillis();
GetExecutionTimes ext=new GetExecutionTimes();
int n;
int[] temp;
temp=new int [100];
n=3;
int j=0;
do {
n=n*n;
j=j+1;
for(int i=0; i<7;i++)
{
ext.callMethod(n);
long endTime = System.currentTimeMillis();
temp[j]=(int) (temp[j]+(endTime-startTime));
}
}
while (n<200);
for(int k=0;k<j;k++)
{
temp[k]=temp[k]/8;
System.out.println(temp[k]);
}
}
rababfatma
Messages postés8Date d'inscriptiondimanche 25 avril 2010StatutMembreDernière intervention 6 juillet 2011 7 oct. 2010 à 11:39
erreur a l'execution
voila ce qui m'affiche
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at calcul.(calcul.java:13)
at GetExecutionTimes.callMethod(GetExecutionTimes.java:36)
at GetExecutionTimes.main(GetExecutionTimes.java:21)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_jojolemariole
Messages postés519Date d'inscriptionmercredi 21 mars 2007StatutMembreDernière intervention19 décembre 201625 7 oct. 2010 à 13:03
Re,
La source du problème se situe là :
n = 3;
int j = 0;
do {
n = n * n;
j = j + 1;
for (int i = 0; i < 7; i++) {
ext.callMethod(n);
long endTime = System.currentTimeMillis();
temp[j] = (int) (temp[j] + (endTime - startTime));
}
} while (n < 200);
La boucle do - while est exécutée 3 fois chez moi.
1) n 9 (instanciation de 3 matrices 9x9 environ 1Ko)
2) n 81 (instanciation de 3 matrices 81x81 environ 77Ko)
3) n 6561 (instanciation de 3 matrices 6561x6561 environ 500Mo) -> plantage car pas assez de mémoire
Si tu veux vraiment exécuter ce programme, il faut allouer plus de mémoire à la JVM avec ce paramètre par exemple : -Xmx1024M ou bien -Xmx512M. Mais il va falloir être très patient car ce sera très long. Je ne sais pas si tu te rends compte des calculs que ça nécessite.
En outre, tu devrais sérieusement améliorer la lisibilité de ton code si tu veux qu'une autre personne ose y jeter un œil.
Cette ligne est bizarre:
temp[j] = (int) (temp[j] + (endTime - startTime));
car le startTime est pris avant la boucle while, ce qui signifie que tes temps seront cumulés :
4, 9, 13, 18... (par exemple)
En gros on ne comprends pas grand-chose à ce que tu as codé.