Question

Je me demandais qui Integer ou types Float sont les plus rapides ..
Je suis octet pense est plus rapide que entier parce qu'il a une plus petite gamme.
Certaines personnes me dit .. que entier dans certains cas, est plus rapide qu'un octet.

deuxième question:
Le GPU est sur le chemin de la domination du monde ..
donc je me suis demandé: Est-ce qu'un double « plus rapide » qu'un entier .. à cause de la FPU
Alors, où sont les experts? :)

Était-ce utile?

La solution

Vous devez penser à plus que les cycles d'horloge pour effectuer l'arithmétique. On pourrait dire que l'ajout de deux ints prend ce grand nombre de cycles, en ajoutant deux doubles prend ce grand nombre de cycles, etc., mais qui peuvent ne pas être pertinents. Si toutes vos données dans le cache correspond en même temps, puis synchronisation des opérations individuelles est logique. Mais sinon, le temps supplémentaire nécessaire en raison d'un manque de cache domine la différence dans les opérations individuelles. Parfois, travailler avec des types de données plus petits est plus rapide car il fait la différence entre avoir à tirer quelque chose du cache ou non, ou d'avoir à aller sur le disque ou non.

Ces jours ordinateurs passent la plupart de leur temps les données se déplacer, ne pas faire de l'arithmétique, même dans les applications de calculs numériques. Et le rapport de la première à la seconde augmente. Vous ne pouvez pas comparer simplement, par exemple, le temps nécessaire pour multiplier les courts par rapport à double. Vous trouverez peut-être que, étant donné deux versions de votre programme, une version fonctionne plus vite sur un petit problème et l'autre version est plus rapide sur un programme plus vaste, à cause de l'efficacité relative des types de mémoire.

Autres conseils

  

i été octet pense est plus rapide que entier parce qu'il a une plus petite gamme.

Quelque chose que j'ai connu: l'aide d'un short m'a donné un coup de performance alors que l'utilisation d'un int était très bien. En effet, généralement des shorts n'existent pas sur l'architecture. Ils sont des types de commodité. Le processeur fonctionne en fait avec son mot de taille. Dans mon cas, la taille de mot était celle d'un int. Ainsi, lorsque l'accès à un court, il fallait emballer la valeur dans un premier int, travailler avec elle puis déballer et me obtenir le résultat dans un court. Tout cela a donné lieu à une baisse de performance. Donc, plus courte est pas nécessairement mieux.

Il dépend d'aucune de databits dans l'architecture. Le processeur à virgule flottante traitera float et double identique lorsque vous faites des calculs. Ils sont tous deux évalués avec une précision de 80 bits et auront donc la même quantité de temps. Chargement et sauvegarde les valeurs dans les registres FPU pourrait faire une différence. Double prend deux fois l'espace dans la mémoire vive et peut donc être plus lent en raison de défauts de cache. Si vous avez Noticeable de grands tableaux que vous avez tendance à indexer au hasard.

Au niveau du processeur, il n'y a pas d'octets, seuls les mots, qui sont 32bit ou 64bit de nos jours. unités arithmétiques sont généralement câblés à traiter les numéros de taille mot (ou plus, dans le cas de la virgule flottante).

Il n'y a donc aucun avantage de vitesse en utilisant des types plus petits qu'un mot en ce qui concerne les opérations arithmétiques, et il peut y avoir une pénalité de vitesse parce que vous devez faire un travail supplémentaire afin de simuler les types que le CPU ne possède pas nativement, par exemple l'écriture d'un seul octet à la mémoire vous oblige à lire d'abord le mot fait partie de, le modifier et le réécrire. Pour éviter cela, la plupart des compilateurs réellement utiliser un mot plein de mémoire pour toutes les variables plus petites, donc même une variable booléenne prend 32 ou 64 bits.

Cependant, si vous avez une grande quantité de données, comme un grand tableau, puis en utilisant des types plus petits habituellement obtenir de meilleures performances car vous aurez moins de défauts de cache.

La longueur d'octet de types numériques dépend de la langue et parfois aussi la plate-forme que vous utilisez. Par exemple, en Java et à la fois l'utilisation int float 4 octets, de sorte que le temps de traitement doit être égale. Cela me surprendrait bien que les types plus obtenir plus rapidement traitées. S'il existe des preuves de ce que je voudrais lire à ce sujet.

A propos de ce qui est plus rapide, entier ou octet, tant qu'ils correspondent à la fois dans le registre, ils fonctionnent de la même, ou du moins sans différence mesurable.

A propos entier vs.double: Peut être GPU ne plus rapide arithmétique avec double puis cpu régulière, mais je doute qu'il fait arithmétique à double plus rapide alors entier, puisque l'arithmétique entière est juste enregistre Arithmétique

.

Le plus grand optimisation passe d'utiliser des calculs scalaires en boucle, d'utiliser des calculs vectoriels. Ensuite, tirer parti du GPU ou CPU SSE de.

Eh bien, aussi longtemps que vous ne faites pas l'optimisation des vecteurs, vous pouvez utiliser des entiers aussi grands que vos registres (32/64 bits) sans aucune perte de performance réelle.

nombres à virgule flottante sont un peu différentes: Alors que les processeurs sont optimisés en double, les GPU travaillent habituellement avec des flotteurs

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