2011-01-06 5 views
1

Ma question est spécifique à l'iPhone, à l'iPod et à l'iPad, car je suppose que l'architecture fait une grande différence. J'espère qu'il y aura soit une spécification quelque part (pour les différentes puces peut-être), soit une façon fiable de mesurer T pour chaque instruction spécifique. Je sais que je peux utiliser n'importe quel nombre d'outils pour mesurer le temps processeur utilisé, la mémoire utilisée, etc. Je veux quantifier à un niveau inférieur. Donc, je suis capable de comprendre combien de fois je passe par la partie principale de l'algorithme. Par exemple, je itère n * (n-1) fois dans une implémentation naïve, et entre n (meilleur cas) et n + n * (n-1) (pire des cas) dans une autre. Je peux aussi faire un décompte raisonnable du nombre total d'instructions (+ - =% * /, et des instructions logiques), et je peux comparer ces chiffres, mais cela suppose que le poids de chaque opération est le même. Aussi, je n'ai aucune idée de comment pondérer la valeur temps réelle d'une instruction logique (si, sinon, pour, alors) vs un opérateur mathématique ... est "si" autant travail que "+" chaque fois que je utilise le? J'aimerais savoir où trouver cette information. Donc, par souci de clarté, mon but est de découvrir combien de temps processeur je demande au CPU (ou GPU ou tout U) afin que je puisse concevoir un algorithme optimal autour de la durée du processeur. Quelqu'un peut-il me donner une idée de l'endroit où commencer pour le matériel iOS?Comment trouver la valeur temporelle de l'opération pour optimiser la conception d'un nouvel algorithme?

Modifier: This link to ClockServices.c et SIMD stuff dans le portail des développeurs pourrait être un bon début pour les personnes intéressées par cela. Encore quelques tasses de café ce soir et je pourrais y passer;)

+0

La plupart de ce que je veux évaluer est juste C. Je serais heureux avec ça. Cependant, il serait bon de connaître le coût de l'itération à travers un NSArray; mais cela semble être complexe et variable. Je ne sais pas combien je peux espérer découvrir ... Je vais me contenter des opérations de base de C à coup sûr;) – Rab

+0

Ouais j'ai pensé à cela (le million de tests), mais c'est un bon commentaire. J'ai envisagé de faire des tests comme vous le dites, mais j'ai deux craintes sur les résultats. Le premier est que mon test sera naïf d'une certaine manière, et je ferai beaucoup de travail pour obtenir des informations qui ne tiennent pas lorsque le compilateur décide de faire quelque chose de différent. Deuxièmement, je n'ai que quelques appareils, et certains ont des puces différentes.Donc, mon plus cher espoir est peut-être quelqu'un a des graphiques avec des estimations proches de la valeur temporelle des opérations C pour un processeur particulier. – Rab

+0

Vous avez un petit rire du commentaire NSArray. J'espère que mon NSArray ne bluescreen sur moi ou quelque chose;) – Rab

Répondre

2

Sur une plate-forme moderne, le temps processeur n'est pas le seul facteur limitant. Souvent, l'accès à la mémoire est.

encore, temps processeur:
Votre approche de base à une estimation de la charge du processeur est OK, bien, et il est raisonnable: faire une estimation approximative du coût en fonction de votre connaissance des plates-formes typiques.

In this article, le tableau 1 montre les temps pour les opérations primitives typiques dans .NET. Bien que votre plateforme puisse varier, le temps relatif est généralement très similaire. Peut-être que vous pouvez trouver - ou même faire - un pour iStuff.

(je ne l'ai pas rencontré un si profond pour d'autres plates-formes, à l'exception processeur/manuels de jeu d'instructions, mais ils traiter avec des instructions de montage)

localité mémoire :
A défaut de cache peut vous coûter des centaines des cycles, un accès au disque mille fois plus. Ainsi, le contrôle de vos modèles d'accès à la mémoire (c'est-à-dire la réduction de l'ensemble de travail, la restructuration et l'accès aux données de manière conviviale en cache) est une partie importante de l'évaluation d'un algorithme.

+0

Merci. Ceci est une information vraiment utile. Aussi, je suis heureux de savoir que mon approche de base n'est pas trop loin. – Rab

0

xCode dispose d'instruments pour mesurer les performances de chaque fonction/opération, vous pouvez simplement les utiliser.

+0

Je les utilise. Mais le nombre de tests que je devrais faire pour informer un nouveau design d'algorithme pourrait être très important. Exponentiellement, quadratiquement, logarithmiquement grand. C'est pourquoi je voudrais trouver des directives (au moins) quant à la complexité de calcul des diverses opérations. En d'autres termes, je suis heureux de lire le manuel, mais je ne veux pas écrire le manuel pour un ensemble de langage + compilateur + architecture. – Rab

Questions connexes