none
Concurrency runtime : better CPU utilisation with Intel Core 2 than with AMD Opteron RRS feed

  • Discussion générale

  • Hello everybody,
    I'm new to CRT, and that's also my first post here.

    I made a parallel_for loop, 20 iterations, around 1 hour per iteration. It work well, but :
    - with a core 2 duo PC : 100% CPU utilization (Win7 premium ed. 64 bit SP1, VS2010 64bit)
    - with AMD Opteron 6176 (12 cores) : 67% CPU utilization for around 1 hour, then 92% maximum utilization before progressively offloading (Win7 standard 64 bit SP1, VS2010 64 bit).

    So, with Core 2 duo, the CRT seems to better use the available cores than with an AMD 12 cores setup. 
    I thought that the 12 cores would be used at 100%, as the work load is enough. Why does CPU utilization don't go beyond 92% ?
    Am I missing something ?

    Thanks in advance,
    Alain

     

    mercredi 31 août 2011 20:34

Toutes les réponses

  • parallel_for de la librairie PPL n'utilise pas un algorithme statique pour répartir la charge sur chaque processeur.

    Créer 12 tâches sur un processeur 12 coeurs, et leur affecter chacun 1/12e du travail est la manière qui semble à priori la plus logique d'utiliser le parallelisme, mais en réalité ce n'est pas le cas.

    Dans la réalité, les tâches d'un processus qui s'exécutent en parallèle ne consomment pas toutes la même charge (ne sont pas identiques). Il faut aussi tenir compte de la charge de la machine, des autres processus qui s'exécutent, il faut que l'algorithme qui distribue la charge puisse fonctionner même si la machine est chargée, ou si elle utilise l'hyperthreading. De plus, on n'attend pas le même comportement sur un serveur multi-coeur (beaucoup de processus s'exécutent simultanément en tâche de fond sans bloquer la machine ni accaparer tout le CPU) ou sur un poste de travail 2 ou 4 coeurs.

    Il faut aussi que l'algorithme de répartition de charge puisse fonctionner avec des boucles parallel_for dont certaines sont éventuellement imbriquées, ou dont le parallélisme est complexe.

    Un modèle simple de répartition des charges devient facilement invalide si le parallelisme se complique. Et il ne supporte pas non plus la montée en charge.

    Il existe plusieurs algorithmes pour gérer la répartition des charges sur les processeurs. Cela peut même être très complexe. OpenMP en utilise plusieurs, au choix, dont une répartition statique (12 coeurs = 12 thread). parallel_for de PPL utilise le "vol de travail" (work stealing algorithm) http://msdn.microsoft.com/en-us/library/dd998048.aspx#winapi

    Le but est que le traitement soit effectué le plus rapidement dans le plus de cas d'exécutions possibles.

     

    jeudi 1 septembre 2011 00:03
  • Merci Pierre.
    I agree completely with you. I suppose that what you say about scheduling is valid for 2 core CPU and 12 cores CPU. As I do not use my computers as servers, only for HPC, how explain the different CPU utilization ?

    Does the CRT changes some schduling parameters as the number of cores inceases ? Or does Win7 standard has some services that could be a bigger load than Win7 premium  ? I already shut some services on Win7 standard (opteron setup) : no effect on CPU loading.

    Alain

    jeudi 1 septembre 2011 06:13
  • Bonjour, Alain,

    Merci d’avoir contacté les forums MSDN France. La langue utilisée sur ces forums est la langue française, donc s’il vous plaît repostez votre question en française, comme on vous demande dans l’étiquette sur les forums MSDN France.

    Merci pour votre compréhension et collaboration.

    Bonne journée,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    jeudi 1 septembre 2011 06:14