2010-10-16 9 views
1

J'ai une machine CPU 8 cœurs avec 8 Go de mémoire. Logiquement, le code suivant peut être fait en parallèle, mais puisque la boucle expose plus qu'assez de possibilités pour le parallélisme puisque j'ai beaucoup moins de cœurs disponibles que la taille de la boucle. Deuxièmement, chaque expression de délégué alloue de la mémoire pour contenir les variables libres. Est-il recommandé d'utiliser parallèle pour dans ce cas?Utilisation de la parallélisation pour des boucles relativement grandes

va également séparer les 2 parallèles pour en 2 tâche améliorer la performance dans ce cas ??

 private static void DoWork() 
    { 

     int end1 = 100; // minimum of 100 values; 
     int end2 = 100; // minimum of 100 values; 


     Task a = Task.Factory.StartNew(
      delegate 
      { 
       Parallel.For(0, end1, delegate(int i) 
       { 
        // independent work      
       }); 
      } 
     ); 

     Task b = Task.Factory.StartNew(
      delegate 
      { 
       Parallel.For(0, end2, delegate(int i) 
       { 
        // independent work       
       }); 
      } 
     ); 

     a.Wait(); 
     b.Wait();   
    } 
+2

cela dépend de la granularité de « travail » –

Répondre

1

également se séparant le 2 parralel pour 2 dans son travail d'améliorer les performances dans ce cas ??

Pas sensiblement, et vous pourriez facilement nuire à la performance.

Le TPL est spécialement conçu pour fournir l'équilibrage de charge, laissez-le faire son travail.

Les principaux points qui sont ici votre préoccupation:

  • le « travail » devrait vraiment être indépendante
  • le « travail » devrait être non négligeable, à savoir informatiquement intense et beaucoup plus que le simple ajout d'un quelques chiffres
  • le « travail » devrait éviter d'E/S (autant que possible)
1
  • Laisser la charge d'équilibrage au cadre en appelant "Partitioner.Create".
  • Essayez de créer un objet ParallelOptions et transmettez-le à Parallel.For. Essayez avec différents MaxDegreeOfParallelism et accordez votre code basé sur les résultats, ce nombre peut être plus que le non. des cœurs dans votre système. Cela a fonctionné pour moi.
Questions connexes