Que signifient les Termes "lié CPU" et "lié e/s"?

Que signifient les termes "CPU" et "I/O bound"?

214
la source

9 ответов

c'est assez intuitif:

un programme est lié au CPU s'il allait plus vite si le CPU était plus rapide, c'est-à-dire qu'il passe la majorité de son temps simplement en utilisant le CPU (faire des calculs). Un programme qui calcule de nouveaux chiffres de π sera typiquement CPU-bound, c'est juste des nombres crunching.

un programme est lié à l'entrée/sortie s'il était gfaster si le sous-système d'entrée/sortie était plus rapide. Quel système d'E/S précis est destiné peut varier; Je l'associe généralement avec le disque, mais bien sûr, la mise en réseau ou la communication en général est également courante. Un programme qui regarde à travers un énorme fichier pour certaines données pourrait devenir I/O lié, puisque le goulot d'étranglement est alors la lecture des données à partir du disque (en fait, cet exemple est peut-être un peu démodé ces jours-ci avec des centaines de MB/s venant de SSDs).

317
répondu unwind 2018-06-29 10:43:46
la source

CPU lié la vitesse à laquelle le processus progresse est limitée par la vitesse du CPU. Une tâche qui effectue des calculs sur un petit ensemble de nombres, par exemple en multipliant de petites matrices, est susceptible d'être liée à CPU.

lié à l'entrée/sortie la vitesse à laquelle un processus progresse est limitée par la vitesse du sous-système D'entrée/sortie. Une tâche qui traite des données à partir du disque, par exemple, compter le nombre de lignes dans une fichier est susceptible d'être I/O bound.

lié à la mémoire le rythme auquel un processus progresse est limité par la quantité de mémoire disponible et la vitesse de cet accès à la mémoire. Une tâche qui traite de grandes quantités de données en mémoire, par exemple en multipliant de grandes matrices, est susceptible d'être liée à la mémoire.

lié au Cache le rythme auquel la progression d'un processus est limitée par la quantité et la vitesse de: le cache disponible. Une tâche qui traite simplement plus de données que de correspondances dans le cache sera liée au cache.

I / O Bound serait plus lent que Memory Bound serait plus lent que Cache Bound serait plus lent que CPU Bound.

la solution pour être I/O lié n'est pas nécessairement d'obtenir plus de mémoire. Dans certaines situations, l'algorithme d'accès pourrait être conçu autour des limites d'e/s, de mémoire ou de Cache. Voir .

177
répondu Sanjaya R 2009-10-17 16:53:49
la source

lié au CPU signifie que le programme est bloqué par le CPU, ou l'unité centrale de traitement, tandis que lié à l'E/S signifie que le programme est bloqué par l'E/S, ou l'entrée/sortie, comme la lecture ou l'écriture sur disque, réseau, etc.

en général, lors de l'optimisation de programmes informatiques, on essaie de chercher le goulot d'étranglement et de l'éliminer. Savoir que votre programme est lié au CPU aide, de sorte qu'on n'optimise pas inutilement autre chose.

[Et par le "goulot d'étranglement", je veux dire la chose qui rend votre programme d'y aller plus lentement qu'elle aurait du.]

24
répondu Chris W. Rea 2009-10-17 16:54:45
la source

multi-threading est un cas où la distinction des questions comme expliqué dans les exemples ci-dessous.

RAM I/O bound example: Vector Sum

pensez à un programme qui additionne toutes les valeurs d'un vecteur unique:

#define SIZE 1000000
unsigned int is[SIZE];
unsigned int sum = 0;
size_t i = 0;
for (i = 0; i < SIZE; i++)
    /* Each one of those requires a RAM access! */
    sum += is[i]

Parallélisation qu'en découpant le tableau de manière égale pour chacun de vos cœurs est d'une utilité limitée sur la commune moderne de bureau. C++ benchmark à: https://github.com/cirosantilli/algorithm-cheat/blob/ea16f6bba12e7dcc32c0cbbbcdc74bcc2fd2d05b/src/cpp/interactive/sum_array_parallel.cpp

testé sur GCC 5.2.1, Ubuntu 15.10 avec un 4 core Intel i5-3210M, Lenovo T430. Exemple de résultats typiques (variable depuis multi-threaded):

Time        N Threads   Comment
---------   ----------  --------
0.045962    none
0.0487619   1           Worse than 0 threads because of startup overhead.
0.0329526   2
0.0302511   3
0.0232993   4           Best time. Only about 2x as fast.
0.0281021   5           Worse than 4 threads because we don't have
                        that many cores, which generate overhead. 

le calcul n'était pas 4x plus rapide comme prévu avec 4 threads!

La raison, c'est tout les processeurs partagent un seul bus mémoire reliant à la mémoire vive:

CPU 1 --\     Bus   +-----+
CPU 2 ---\__________| RAM |
CPU 3 ---/          +-----+
CPU 4 --/

ainsi le bus mémoire devient rapidement le goulot d'étranglement, pas le CPU.

cela se produit parce que l'ajout de deux nombres prend un simple cycle CPU, Mémoire lit prendre environ 100 cycles CPU dans le matériel 2016.

donc le travail CPU fait par octet de données d'entrée est trop petit, et nous appelons cet ar-lié processus.

la seule façon d'accélérer davantage ce calcul serait d'accélérer les accès à la mémoire individuelle avec du nouveau matériel de mémoire, par exemple mémoire multicanaux .

La mise à niveau

vers une horloge CPU plus rapide, par exemple, ne serait pas très utile.

autres exemples

  • la multiplication matricielle est liée au CPU sur RAM et GPUs. L'entrée contient:

    2 * N**2
    

    nombres, mais:

    N ** 3
    

    multiplications sont fait, et c'est assez pour la parallélisation en vaut la peine pour la pratique grand N.

    C'est pourquoi les bibliothèques aiment:

    existent.

    L'utilisation du Cache

    fait une grande différence dans la vitesse d'implémentation. Voir par exemple ce exemple de comparaison didactique GPU .

  • les GPU ont un goulot D'étranglement IO dans le transfert de données vers le CPU.

    ils sont conçus de sorte que le rendu de sortie (un rectangle de pixels) peut être sortie directement à la mémoire vidéo, à évitez le voyage aller-retour CPU.

  • la mise en réseau est l'exemple prototypique lié aux IO.

    Même lorsque nous envoyer un octet de données, il faut encore beaucoup de temps pour atteindre leur destination.

    paralléliser de petites requêtes réseau comme les requêtes HTTP peut offrir d'énormes gains de performance.

    si le réseau est déjà à pleine capacité (par exemple le téléchargement d'un torrent), la parallélisation peut encore augmenter améliorer la latence (par exemple, vous pouvez charger une page web "en même temps").

  • Un mannequin C++ CPU, opération qui prend un nombre et croque beaucoup:

Comment savoir si vous êtes lié par CPU ou IO

Non-RAM io lié comme disque, réseau: ps aux , puis theck si CPU% / 100 < n threads . Si oui, vous êtes lié (E) à IO, par exemple le blocage de read n'attend que des données et le planificateur saute ce processus. Ensuite, utilisez d'autres outils comme sudo iotop pour décider quel IO est le problème exactement.

RAM-io bound: difficile à dire, comme le temps D'attente RAM il est inclus dans les mesures CPU% . Peut-être le meilleur que vous pouvez faire est d'estimer les défauts de cache.

voir aussi:

22
la source

une autre façon d'exprimer la même idée:

  • si l'accélération du CPU n'accélère pas votre programme, il peut être I/O lié.

  • si accélérer l'entrée/sortie (par exemple en utilisant un disque plus rapide) n'aide pas, votre programme peut être lié au CPU.

(j'ai utilisé "peut-être" parce que vous devez tenir compte d'autres ressources. La mémoire est une exemple.)

15
répondu gimel 2009-10-17 16:54:13
la source

Lorsque votre programme est en attente pour I/O (ie. un disque lire / écrire ou réseau lire / écrire etc), le CPU est libre de faire d'autres tâches même si votre programme est arrêté. La vitesse de votre programme dépendra principalement de la vitesse à laquelle IO peut se produire, et si vous voulez l'accélérer, vous aurez besoin d'accélérer l'entrée/sortie.

si votre programme exécute beaucoup d'instructions de programme et n'attend pas l'Entrée/Sortie, alors il est dit être lié au CPU. L'accélération de la CPU fera tourner le programme plus rapidement.

dans les deux cas, la clé pour accélérer le programme pourrait ne pas être d'accélérer le matériel, mais d'optimiser le programme pour réduire la quantité D'IO ou CPU dont il a besoin, ou de le faire faire en E/S pendant qu'il fait aussi des trucs intensifs CPU.

8
répondu Paul Tomblin 2009-10-17 16:54:22
la source

lié à une entrée/sortie fait référence à une condition dans laquelle le temps nécessaire pour effectuer un calcul est déterminé principalement par le temps passé à attendre que les opérations d'entrée / sortie soient terminées.

c'est le contraire d'une tâche liée au CPU. Cette situation se produit lorsque le rythme auquel les données sont demandées est plus lent que le rythme auquel elles sont consommées ou, en d'autres termes, lorsque plus de temps est consacré à la demande de données qu'à leur traitement.

4
répondu FellyTone84 2013-02-20 13:34:09
la source

IO lié processus: passer plus de temps à faire des IO de calculs, ont beaucoup de courts sursauts CPU. Processus liés au CPU: passer plus de temps à faire des calculs, peu de très longues rafales de CPU

3
répondu dua 2014-05-02 10:09:11
la source

procédé lié par l'e/s:- si la plus grande partie de la durée de vie d'un procédé est dépensée en e/s, alors le procédé est un procédé lié par l'e/s.exemple: - calculatrice, Internet explorer

processus lié au cpu: - si la plus grande partie de la vie du processus est passée dans le cpu,alors c'est le processus lié au cpu.

0
répondu K.Abhishek 2012-04-12 10:54:35
la source

Autres questions sur optimization terminology