2017-09-11 3 views
1
for(int=0; i<1,000,000; i++) 
{ 
    if(data[i]< 0) 
     data[i]= data[i] * 2; 
} 

Bonjour à tous,Comment puis-je obtenir une solution de ce programme Java pour résoudre l'algorithme?

Je voudrais savoir est-il possible de calculer la vitesse absolue de cet algorithme ci-dessous si le temps qu'il faut pour exécuter un accès à la mémoire est de 100 nanosecondes et que toutes les autres opérations (arithmétique, enregistrer les accès, etc.) prendre 10 nanosecondes? Je suis assez sûr que ce problème peut être utilisé pour calculer la vitesse absolue. Je sais que nous avons déjà une des variables qui est Ta = 100 nanosecondes, non? Le reste des variables manquantes pourrait être trouvé à travers les lignes de code que j'ai fourni après que je compile cela dans le programme Java? Je l'ai compilé et exécuté, mais il ne dit pas ce dont j'ai besoin pour résoudre ce problème. Aucune suggestion?

Voici la formule que j'utilise pour calculer la vitesse absolue de cet algorithme:

T=Tna X Nna + Ta X Na; 

Tna= the time to execute a memory nonaccess instruction; 
Nna= the number of memory nonaccess machine language instructions executed; 
Ta= the time to execute a memory access instruction; 
Na= the number of memory access machine language instructions executed; 

Voici le code que je vais compiler et exécuter pour voir si elle donnera quelques-unes des variables manquantes I besoin de résoudre ce problème.

+0

Pour moi, trouver la "vitesse absolue" signifie que vous l'exécutez et voyez combien de temps cela a pris. Qu'avais tu en tête? –

+0

@KevinAnderson Voici les étapes Déterminer le type d'instruction de chaque ligne de code, qu'il s'agisse d'un accès à la mémoire ou d'un accès autre que la mémoire. Ensuite, vous devez déterminer le nombre d'exécutions de chaque ligne. Ensuite, vous additionnez le nombre d'accès pour chaque Vous recevez les deux temps: 100 nanosecondes pour chaque instruction d'accès mémoire et 10 nanosecondes pour chaque accès non-mémoire. – dorakta

+0

Donc par "ligne de code" vouliez-vous dire le code Java ou les bytecodes compilés? –

Répondre

0

@dorakta si votre préoccupation sur la classification des opérations dans le bloc de code. Suivre pourrait être un point de départ.

Ligne 1: for (int = 0; i < 1000000; i ++)

variable i dans la boucle for, a besoin d'accéder à la mémoire et de repos opérations. Cette executs 1.000.000 fois

Vous avez:

1000000 times of 
2 - memory access (1 read and 1 assign) 
1 - compare 
1 - incr (depends. It could be -> 1 read and 1 add) 

Ligne 3: if (data [i] < 0)

données [i] si la déclaration est une référence de mémoire et un comparez l'opération. Cette executs 1.000.000 fois

Vous avez:

1000000 times of 
2 - memory access 
1 - compare 

Ligne 4: données [i] = données [i] * 2

Vous avez: 0 à 1000000 fois en fonction de la valeur de les données. Vous pouvez vouloir calculer le pire des cas.

Hence, 1000000 times. 
2 - memory access (1 read and 1 assign) 
1 multiply 

Espérons que ça aide!

+0

Merci beaucoup! la vitesse absolue totale serait de 610 secondes parce que T = Tna X Nna (10 X 1) + Ta X Na (100 x 6); – dorakta