none
Question Visual basic 2010 RRS feed

  • Question

  • Bonjour,

    Est-ce que ce forum accepte les questions sur visual basic 2010 ?

    Si oui voila ma question:

    J'ai téléchargé VS2010 beta2 et j'essaye de faire un parallel for en vb mais je n'arrive pas à trouver la syntaxe
    voici mon code:

    Imports System.Threading.Tasks
    Module Module1
        Sub Main()
            Dim i, j As Integer
            Parallel.For(1, 10, i)
            For j = 1 To 10
                Console.WriteLine(i.ToString & "-" & j.ToString)
            Next
        End Sub
    End Module



    fred
    lundi 25 janvier 2010 13:16

Réponses

  • Bonjour,

    Je t'aurais bien écrit un exemple moi-même mais j'ai pas installé VS 2010.

    En parcourant la MSDN à partir du 2ème lien ci-dessus, tu trouves un exemple de multiplication de matrices :
    http://msdn.microsoft.com/en-us/library/dd460713(VS.100).aspx

    Je te conseille de lire l'article en entier, il te permettra de comparer comment cela se passe entre une boucle For normale et une boucle For parallèle.

    Voilà ce que ça donneen Parallèle, ici il définit sa fonction au vol avec une expression lambda :
    J'espère que ca t'aidera à comprendre la syntaxe.

                ' A basic matrix multiplication.
                ' Parallelize the outer loop to partition the source array by rows.
                Parallel.For(0, matARows, Function(i)
                                              For j As Integer = 0 To matBCols - 1
                                                  ' Use a temporary to improve parallel performance.
                                                  Dim temp As Double = 0
                                                  For k As Integer = 0 To matACols - 1
                                                      temp += matA(i, k) * matB(k, j)
                                                  Next
                                                  Return result(i, j) = temp
                                              Next
                                              ' Parallel.For
                                          End Function)


    En fait, qu'est-ce qu'il a fait par rapport à la version normale ?
    Il veut multiplier 2 matrices, et sur les 3 dimensions, il paralellise sur la 1ère dimension.
    Si tu regardes l'exemple sans paralellisation, il a 3 boucles for imbriquées.
    Ici il a une boucle For parallèle, dans laquelle il fait 2 boucles for imbriquées.

    Il a donc remplacé un :

    For i As Integer = 0 To matARows - 1
    '...
    Next



    Par un :

    Parallel.For(0, matARows, Function(i)
    '...
    End Function)



    Pour les expressions lambda et le Parallel Programming, tu as ici un article dans la MSDN, même si normalement tu n'en auras pas besoin :
    http://msdn.microsoft.com/en-us/library/dd460699(VS.100).aspx

    Cordialement,

    Thomas

     


     

    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr

    lundi 25 janvier 2010 15:07

Toutes les réponses

  • Bonjour,

    En VB, j'ai trouvé des exemples d'utilisation ici :
    http://msdn.microsoft.com/en-us/library/dd460717(VS.100).aspx
    http://msdn.microsoft.com/en-us/library/dd460693(VS.100).aspx

    Le 1er lien décrit comment utiliser le Parallel.For.
    Le 2nd lien, plus général, explique comment faire du Parallel Programming avec le framework 4.
    C'est là qu'on y trouve d'ailleurs le 1er lien.

    Cordialement,

    Thomas
    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr
    lundi 25 janvier 2010 13:27
  • En lisant la doc je n'arrive pas à créer un exemple simple
    Quelqu'un aurait-il réussi  à créer un exemple simple ?

    fred
    lundi 25 janvier 2010 14:54
  • Bonjour,

    Je t'aurais bien écrit un exemple moi-même mais j'ai pas installé VS 2010.

    En parcourant la MSDN à partir du 2ème lien ci-dessus, tu trouves un exemple de multiplication de matrices :
    http://msdn.microsoft.com/en-us/library/dd460713(VS.100).aspx

    Je te conseille de lire l'article en entier, il te permettra de comparer comment cela se passe entre une boucle For normale et une boucle For parallèle.

    Voilà ce que ça donneen Parallèle, ici il définit sa fonction au vol avec une expression lambda :
    J'espère que ca t'aidera à comprendre la syntaxe.

                ' A basic matrix multiplication.
                ' Parallelize the outer loop to partition the source array by rows.
                Parallel.For(0, matARows, Function(i)
                                              For j As Integer = 0 To matBCols - 1
                                                  ' Use a temporary to improve parallel performance.
                                                  Dim temp As Double = 0
                                                  For k As Integer = 0 To matACols - 1
                                                      temp += matA(i, k) * matB(k, j)
                                                  Next
                                                  Return result(i, j) = temp
                                              Next
                                              ' Parallel.For
                                          End Function)


    En fait, qu'est-ce qu'il a fait par rapport à la version normale ?
    Il veut multiplier 2 matrices, et sur les 3 dimensions, il paralellise sur la 1ère dimension.
    Si tu regardes l'exemple sans paralellisation, il a 3 boucles for imbriquées.
    Ici il a une boucle For parallèle, dans laquelle il fait 2 boucles for imbriquées.

    Il a donc remplacé un :

    For i As Integer = 0 To matARows - 1
    '...
    Next



    Par un :

    Parallel.For(0, matARows, Function(i)
    '...
    End Function)



    Pour les expressions lambda et le Parallel Programming, tu as ici un article dans la MSDN, même si normalement tu n'en auras pas besoin :
    http://msdn.microsoft.com/en-us/library/dd460699(VS.100).aspx

    Cordialement,

    Thomas

     


     

    Thomas Aimonetti - C# - Sharplog Engineering - http://www.sharplog.fr

    lundi 25 janvier 2010 15:07