AsParallel - Sabias que existe? porque no lo usamos!

Muchos desarrolladores continúan si utilizar los “pragmas” que aprovechan y explotan el rendimiento de nuestros equipos con procesadores de varios núcleos.

Dejando de pensar en ‘single’ con tan solo un ‘AsParallel’ nuestros bucles pueden lucir mucho mas agiles.

 

Da un vistazo al siguiente código, te animo a experimentar y perder el miedo a usarlo… et tiempo… si lo cronometras… nos dará la razón.
En este ejemplo podras cronometrar el tiempo empleado en ejecutar tres 'pings' en blucle clasico y el siguiente con AsParallel... veras la diferencia!

    ' Sacar partido a la ejecucion paralela, cuando disponemos de mas de un nucleo
    '
    Sub Main()
        Console.WriteLine("Number of processors : " + Environment.ProcessorCount.ToString)
        Dim ips = {"192.168.1.1""192.168.1.3""192.168.1.5"}
        Dim start As DateTime = Now
        ' test de ejecucion para for each clasico
        Dim pings = From ip In ips
                    Select New Ping().Send(ip)
        For Each ping In pings
            Console.WriteLine("{0} : {1}", ping.Status, ping.Address)
        Next
        Console.WriteLine(Now.Subtract(start))
        ' test de ejecucion para for each AsParallel
        Dim start2 As DateTime = Now
        Dim pings2 = From ip In ips.AsParallel()
                     Select New Ping().Send(ip)
        For Each ping In pings2
            Console.WriteLine("{0} : {1}", ping.Status, ping.Address)
        Next
        Console.WriteLine(Now.Subtract(start2))
        Console.ReadLine()
    End Sub

 

Saludos,
PepLluis,

Eso si, después de conversar con un amable lector, ADVERTIROS… que como todo debe hacerse un buen uso con criterio y conocimiento de causa, aplicándolo en funciones donde se justifique :  Pero sin dejar de transmitiros que también es contraproducente dejar de usar las ventajas de utilizar grandes facilidades por el miedo que nos produce experimentar con ellas… así que Ánimos… AsParallel! (Gracias HB)

Published Fri, Mar 23 2012 9:50 by peplluis
Filed under:

Comments

# re: AsParallel - Sabias que existe? porque no lo usamos!

Friday, March 23, 2012 3:32 AM by HB

Ojo, que esto no siempre es recomendable usarlo, hay que tener en cuenta muchos detalles, qué operaciones se hacen, el entorno donde se ejecuta, etc.

Aquí viene bien en paralelizar porque la propia acción no requiere de ninguna sincronización entre hilos ni ningún cambio de contexto entre hilos significativo, y por el tipo de trabajo que requiere aquí la comunicación entre equipos.

Otra cosa a tener en cuenta es que Environment.ProcessorCount nunca es de fiar para este tipo de trabajos, un proceso no tiene por qué poder hacer uso de todos ellos, ni todos tienen por qué ser reales.

# re: AsParallel - Sabias que existe? porque no lo usamos!

Friday, March 23, 2012 3:35 AM by HB

Se me olvidaba otra cosa, para comprobar el rendimiento de un método es mucho mejor usar StopWatch que DateTime.

# re: AsParallel - Sabias que existe? porque no lo usamos!

Friday, March 23, 2012 5:53 AM by peplluis

Gracias HB por el aporte. La puntualizacion es buena.

En cuanto a usar 'StopWatch' es obvio, aunque para el alcanze de este post es suficiente con segundos.

Aqui tienes un post antiguo sobre paralelismo...

msmvps.com/.../single-or-parallel-explore-new-performances-for-loops.aspx

Aqui si tienes 'StopWatch'.

Saludos,

PepLluis,

Leave a Comment

(required) 
(required) 
(optional)
(required) 
If you can't read this number refresh your screen
Enter the numbers above: