Question

On m'a demandé récemment produit le MIPS (millions d'instructions par seconde) pour un algorithme que nous avons développé. L'algorithme est exposé par un ensemble de fonctions de style C. Nous avons exercer le code sur un Dell Axim pour comparer les performances en entrée différente.

Cette question est venue de notre fournisseur de matériel, mais je suis surtout un développeur de logiciels HL donc je ne suis pas sûr de savoir comment répondre à la demande. Peut-être quelqu'un avec un fond HW / SW similaire peut aider ...

  1. Je ne pense pas Puisque notre algorithme est pas en temps réel, nous devons quantifier comme MIPS. Est-il possible de citer simplement le nombre total d'instructions de montage?

  2. Si 1 est vrai, comment voulez-vous le faire (par exemple. Comment mesurer le nombre d'instructions de montage) soit en général ou spécifiquement pour ARM / XScale?

  3. Peut être effectuée sur 2 un dispositif de WM ou par l'intermédiaire de l'émulateur de périphérique fourni dans VS2005?

  4. Peut-être 3 automatisé?

Merci beaucoup pour votre aide. Charles


Merci pour votre aide. Je pense que S. Lott a mis le doigt. Et comme le suivi, j'ai maintenant plus de questions.

5 Toute suggestion sur la façon de s'y prendre pour mesurer MIPS? J'ai entendu quelqu'un vous suggérons de lancer l'algorithme et en le comparant contre référence Dhrystone / Whetstone pour calculer MIS.

6 Puisque l'algorithme n'a pas besoin d'être exécuté en temps réel, est MIPS vraiment une mesure utile? (Par exemple factoriel (N).) Quelles sont les autres façons de quantifier les exigences de traitement? (Je l'ai déjà mesuré les performances d'exécution, mais il n'a pas été une réponse satisfaisante.)

7 Enfin, je suppose MIPS est une estimation brute et serait dep. le compilateur, les paramètres d'optimisation, etc.?

Était-ce utile?

La solution

Je parie que votre fournisseur de matériel demande combien de MIPS vous avez besoin.

Comme dans « Avez-vous besoin d'un processeur MIPS 1000 ou un processeur MIPS 2000? »

Ce qui est traduite par la direction dans « Combien de MIPS? »

Hardware offre MIPS. Software consomme MIPS.

Vous avez deux degrés de liberté.

  • inhérente offre MIPS de processeur.

  • Le nombre de secondes au cours de laquelle vous consommez que beaucoup de MIPS.

Si le processeur n'a pas assez MIPS, votre algorithme sera « lent ».

si le processeur a suffisamment MIPS, votre algorithme sera « rapide ».

Je mets « rapide » et « lent » entre guillemets parce que vous devez avoir une exigence de performance pour déterminer « assez rapidement pour répondre aux exigences de performance » ou « trop lent pour répondre aux exigences de performance. »

Sur un processeur MIPS 2000, vous pourriez prendre un 2 secondes acceptable. Mais sur un processeur MIPS 1000 ce à un 4 explose inacceptable secondes.


Combien de MIPS avez-vous besoin?

  1. Obtenez les MIPS officiels pour votre processeur. Voir http://en.wikipedia.org/wiki/Instructions_per_second

  2. Exécuter votre algorithme sur certaines données.

  3. Mesurer le temps d'exécution exacte. En moyenne un tas d'échantillons pour réduire l'incertitude.

  4. Rapport

    . 3 750 secondes sur un processeur MIPS est - bien - 3 secondes à 750 MIPS. MIPS est un taux. Le temps est le temps. La distance est le produit du taux temps *. 3 secondes à 750 MIPS est 750 * 3 millions d'instructions.

Rappelez-vous Rate (dans les instructions par seconde) * Temps (en secondes) vous donne des instructions.

Ne dites pas qu'il est 3 * 750 MIPS. Il n'est pas; il est 2250 millions d'instructions.

Autres conseils

Quelques notes:

  1. MIPS est souvent utilisé comme une mesure de la « capacité » générale pour les processeurs, en particulier dans le domaine en temps réel / embarqué doux où vous ne voulez vous assurer que vous ne pas surcharger un processeur avec le travail. Notez que c'est des instructions par seconde, comme le temps est très important!

  2. MIPS utilisés dans ce mode est tout à fait non scientifique.

  3. MIPS utilisés dans ce mode est encore souvent la meilleure approximation, il est pour le dimensionnement d'un système et de déterminer la vitesse du processeur. Il pourrait bien être hors de 25%, mais jamais l'esprit ...

  4. Counting MIPS nécessite un processeur qui est proche de ce que vous utilisez. Le jeu d'instructions droite est évidemment cruciale pour capturer le flux d'instructions réelle du compilateur réel utilisé.

Vous ne pouvez en aucune façon approximative cela sur un PC. Vous devez faire ressortir l'un des quelques outils pour faire de ce droit:

  1. Utilisez un simulateur jeu d'instructions pour la archicture cible tels que Qemu, propres outils ARM, Synopsys, CoWare, Virtutech ou VAST. Ceux-ci sont rapides mais peuvent compter assez bien les instructions, et soutiendront le jeu d'instructions à droite. Sauf utilisation intensive d'instructions coûteuses comme division entière (et pas plaire à virgule flottante), ces chiffres ont tendance à être utile à proximité.

  2. Trouver une horloge cycle simulateur précis pour votre processeur cible (ou quelque chose de proche), qui donnera assez bonne estimation des effets de pipelines etc. Encore une fois, obtenir du bras ou de carbone SoCDesigner.

  3. Obtenir un conseil de développement pour la famille de processeur que vous ciblez, ou un bras près de lui concevoir, et le profil de l'application il. Vous n'utilisez pas un ARM9 à profil pour un ARM11, mais un ARM11 peut-être une bonne approximation pour un ARM Cortex-A8 / A9, par exemple.

MIPS est généralement utilisé pour mesurer la capacité d'un processeur.

Les algorithmes prennent habituellement soit:

  1. un certain laps de temps (lors de l'exécution d'un certain processeur)
  2. un certain nombre d'instructions (en fonction de l'architecture)

La description d'un algorithme en termes d'instructions par seconde semble comme une mesure étrange, mais bien sûr, je ne sais pas ce que votre algorithme fait.

Pour trouver une mesure significative, je vous suggère de mettre en place un test qui permet de mesurer le temps moyen pris pour votre algorithme pour terminer. Nombre d'instructions de montage serait une mesure raisonnable, mais il peut être difficile de les compter! Votre meilleur pari est quelque chose comme ça (pseudo-code):

const num_trials = 1000000
start_time = timer()
for (i = 1 to num_trials)
{
    runAlgorithm(randomData)
}
time_taken = timer() - start_time
average_time = time_taken / num_trials

MIPS sont une mesure de la vitesse du processeur, pas la performance algorithme. Je ne peux que supposer que le quelque part le long de la ligne, quelqu'un est un peu confus. Que cherchent-ils à savoir? Le seul scénario probable que je peux penser est qu'ils essaient de vous aider à déterminer la vitesse d'un processeur dont ils ont besoin pour vous donner d'exécuter votre programme de manière satisfaisante.

Comme vous pouvez mesurer un algorithme en nombre d'instructions (qui ne va doute dépendre des données d'entrée, donc ce n'est pas trivial), vous devez alors une mesure du temps afin d'obtenir MIPS - par exemple , dire « Je dois l'appeler 1000 fois par seconde ». Si votre algorithme est de 1000 instructions pour ce cas particulier, vous vous retrouverez avec:

1000 instructions / (1/1000) seconds = 1000000 instructions per second = 1 MIPS.

Je pense toujours que c'est une façon d'essayer vraiment bizarre de faire les choses, vous voudrez peut-être demander des éclaircissements. Quant à vos questions spécifiques, je vais laisser ça à quelqu'un plus familier avec Visual Studio.

Souvenez-vous également que les différents compilateurs et options du compilateur faire une énorme différence. Le même code source peut fonctionner à plusieurs vitesses différentes. Ainsi, au lieu d'acheter le processeur 2mips vous pourriez être en mesure d'utiliser le processeur 1 / 2mips et utiliser une option de compilateur. Ou dépenser de l'argent sur un meilleur compilateur et utiliser le processeur moins cher.

L'analyse comparative est erronée au mieux. Comme passe-temps, je l'habitude de compiler le même Dhrystone (et Whetstone) code sur différents compilateurs de différents fournisseurs pour le même matériel et les chiffres ont été dans tous les sens, les ordres de grandeur. code source même même processeur, Dhrystone na pas dire une chose, pas utile comme base de référence. Ce qui importe dans l'analyse comparative est comment rapide votre course algorithme, il vaut mieux être aussi rapide ou plus rapide que nécessaire. En fonction de la proximité de la ligne d'arrivée vous permettent de beaucoup de slop. Très tôt le veulent probablement courir 5 ou 10 ou 100 fois plus rapide que vous devez de sorte que d'ici la fin du projet, vous êtes au moins un peu plus rapide que vous devez être.

Je suis d'accord avec ce que je pense S. Lott dit, cela est tout le monde parle de vente et de marketing et de gestion. Étant celui que la direction a mis entre le marteau et l'enclume alors ce que vous devez faire est de les amener à acheter le processeur le plus rapide et les meilleurs outils qu'ils sont prêts à dépenser sur la base des camemberts colorés et graphiques que vous allez générer de l'air mince comme justification. Si près de la fin de la route, il ne marche pas tout à fait répondre à la performance, vous pourriez revenir à stackoverflow, mais en même temps la gestion sera obligé d'acheter un autre toolchain à presque tous les processeurs de prix ou de swaps et respin le conseil d'administration. D'ici là, vous devez savoir à quelle distance de la cible que vous êtes, nous avons besoin de 1,0 et nous sommes à 1,25 si nous achetons le processeur deux fois plus rapide que celui que nous avons acheté nous devrions le faire.

Si oui ou non vous pouvez automatiser ce genre de choses ou de simuler les dépend des outils, parfois oui, parfois non. Je ne suis pas familier avec les outils dont vous parlez donc je ne peux pas parler directement.

Cette réponse ne vise pas à répondre directement à la question, mais dans un contexte plus autour de la raison pour laquelle cette question se demande.

MIPS pour un algorithme ne concerne que les algorithmes qui doivent répondre à un événement dans le délai requis.

Par exemple, considérons un contrôleur conçu pour détecter la vitesse du vent et déplacer l'actionneur dans une seconde lorsque la vitesse du vent traverse plus de 25 miles / heure. Disons qu'il faut 1000 instructions pour calculer et comparer la vitesse du vent par rapport au seuil. L'exigence MIPS pour cet algorithme est de 1 Kilo instructions par seconde (kips). Si le contrôleur est basé sur 1 processeur MIPS, on peut facilement dire qu'il ya plus de jus dans le contrôleur pour ajouter d'autres fonctions.

Quelles autres fonctions pourraient être ajoutées sur le contrôleur? Cela dépend des MIPS de la fonction / algorithme à ajouter. Si une autre fonction qui a besoin de 100.000 instructions à effectuer dans une seconde (à savoir 100 kips), nous pouvons encore accueillir cette nouvelle fonction et ont encore une certaine marge pour d'autres fonctions à ajouter.

Pour une première estimation une référence sur le PC peut être utile.

Cependant, avant de vous engager à une fréquence de dispositif spécifique et l'horloge, vous devriez obtenir une carte de développeur (ou un PDA?) Pour l'architecture cible ARM et référence là.

Il y a beaucoup de facteurs qui influent sur la vitesse sur les machines d'aujourd'hui (de mise en cache, les pipelines, les jeux d'instructions différentes, ...) afin que vos points de repère sur un PC peuvent être loin w.r.t. ARM.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top