Single or Parallel – for.loops test – Visual Studio 2010

ParallelWon  SingleAndParallel Single

 Una de las novedades más excitantes de Visual Studio 2010 y el Framework, sin duda es la incorporación de las librerías para el uso de la ejecución en paralelo “paralelismo” o TPL (Task Parallel Library), pudiendo por fin sacar provecho a los ya extendidos multiprocesadores y/o múltiples ‘cores’.

Parece sencillo pero… no esta tan claro.

Es evidente que el uso de un simple ‘Parallel.For’ como cualquier otro proceso a través del framework, requiere de un número de recursos para conformar o organizar, planear y finalmente realizar la ejecución, además podemos suponer que este paralelismo se apoya sobre ‘threading’, por lo que debemos entender su aplicación dentro de escenarios donde exista un uso intensivo en la ejecución de tareas especificas y que estas justifiquen el consumo inicial de recursos en términos de rendimiento.

Con dichas conjeturas, está claro que un simple ‘for next’ siempre ganara en velocidad a un ‘parallel.for’,  si su ejecución se limita a la iteración sobre una simple estructura o lista y bien entendiendo en funciones cuya ejecución se realiza en una sola pasada.

Sin embargo la situación sufre un cambio radical cuando nuestro bucle itera en llamadas a funciones que realizan tareas con cierta carga de proceso.

Sin ninguna otra pretensión me complace compartir con vosotros un punto de entrada para evaluar la conveniencia o no de usar el paralelismo en determinadas tareas. También es evidente que no se trata de una herramienta formal, simplemente pretende ser un punto de entrada para experimentar de forma sencilla y asequible la implementación de escenarios muy básicos.

Esperando vuestras valoraciones, espero que llame vuestra atención y os complazca.

Cuidaros Mucho!
Pep Lluis,

Para probar la aplicación, necesitareis tener instalada la versión beta de Visual Studio 2010 y crear un nuevo proyecto ‘Windows Form Application’ deberemos añadir y distribuir en su form1 las siete etiquetas (del Label1 al Label7) correspondientes a la visualización de los datos del proceso, dos ‘NumericUpDown’ para proporcionarle el numero de bucles e iteraciones, un ‘Progressbar’ para comparar tiempos de ejecución y listo … con copiar y pegar el código adjunto, podréis utilizar este “tester” para vuestra primera aplicación en paralelo J

No dudéis en contactar conmigo si necesitáis cualquier aclaración o si necesitáis que os envíe el prototipo para este proyecto.

 With no doubt  one of the most exciting features in Visual Studio 2010 and Framework 4 is parallel computing or TPL (Task Parallel Library), being able finally to take benefit of multiprocessors  and multi core systems. 

This seems clear and simple but… may be need consider some aspects before J

It is evident that the use of simple Parallel.For’ like any other process through framework, requires a minimum number of resources to conform, to organize, to plan and finally to make the execution, in addition we can suppose that this parallelism leans on `threading’, reason why must be applied within scenes where have an intensive use of processes execution or long tasks, at end only this may justify these initial consumption of resources in performance terms.

With these conjectures, it is clear that simple `for next’ always won in speed to `parallel.for’, if their execution are limited to iterate on a simple structure or list, as well understanding this functions inside single flow process and made one to one.

Nevertheless the situation undergoes a radical change when our iteration calls to functions that make tasks with certain load of process.

Without any other pretension it pleases to me to share with you an entry point to evaluate the convenience of using parallelism in certain tasks. Also it is evident that one is not a formal tool, simply tries to be an entry point to start with a reasonable simple form and the implementation of very basic scenes.

Waiting for your evaluation, I hope this short explanation pleases to you.

Take care!
Pep Lluis,

Ps: No doubt in contacting with me if you need any extra explanation or if you need that I sent this prototype to you.

 

In this sample readings do not seem respond to the real milliseconds, I recommend use `ElapsedTicks’ instead `Elapsed.TotalMilliseconds”, these correspond directly to ticks of chrono, eliminating any other interpretation.

Regards,

Imports System.Threading

‘ Simple Skeleton to test ‘parallel.for’
‘ Pep Lluis 14.07.2009

‘ Compare/test time execution of single over parallel task’s

‘ To run require Visual Studio 2010 Beta
‘ To catch Illegal Cross threat’s exceptions, correct appropriate code
‘ or set false, Checking cross thread calls.

Public Class SingleOrParallel
    Dim _timer As New System.Timers.Timer
    Private Sub SingleOrParallel_Load() Handles MyBase.Load
        AddHandler _timer.Elapsed, AddressOf Testing    ‘Run Test every elapsed time
        _timer.Interval = 1000                          ‘elapsed time to 1s
        _timer.Enabled = True                           ‘run timer
    End Sub

    Dim Elapsed1, Elapsed2 As Double                    ‘define elapsed memory’s
    Sub Testing()
        _timer.Enabled = False                          ‘Stop timer
        Me.Label5.Text = “Running Test”
        loops = Me.NumericUpDown1.Value                 ‘read number of loops
        SequentialFor()                                 ‘Call Sequential for
        ParallelFor()                                   ‘Call Parallel for
       
        ‘ Show results
        If Elapsed1 > Elapsed2 Then
            Label3.ForeColor = Drawing.Color.Red        ‘Parallel won
            Label4.ForeColor = Drawing.Color.Green
            ‘show execution time & differences between parallel & single
            Me.ProgressBar1.Value = (Elapsed2 * 100 / Elapsed1)
            Label5.Text = “fast “ + (100 – Int(Elapsed2 / Elapsed1 * 100)).ToString + “%”
            Label6.Text = Elapsed1.ToString             ‘Single time
            Label7.Text = Elapsed2.ToString             ‘Parallel time
        Else
            Label3.ForeColor = Drawing.Color.Green      ‘Single won
            Label4.ForeColor = Drawing.Color.Red
            Me.ProgressBar1.Value = (Elapsed1 * 100 / Elapsed2)
            Label5.Text = “fast “ + (100 – Int(Elapsed1 / Elapsed2 * 100)).ToString + “%”
            Label6.Text = Elapsed2.ToString             ‘Parallel time
            Label7.Text = Elapsed1.ToString             ‘Single time
        End If
        ‘ put result bottom progressbar value
        Label7.Left = (Me.ProgressBar1.Left +
                      ((ProgressBar1.Width / ProgressBar1.Maximum) * ProgressBar1.Value)) –
                      (Label7.Width / 2)
        _timer.Enabled = True                           ‘start timer to next test
    End Sub

 

    Dim loops As Integer
    Dim Chrono As New Stopwatch

    Sub SequentialFor()
        Chrono.Start()              ‘Start watch
        ‘ Conventional for next
        For n = 0 To loops
            SomeTask()
        Next
        ‘ remember Elapsed time
        Elapsed1 = Chrono.Elapsed.TotalMilliseconds
        Chrono.Stop()               ‘Watch stop
        Chrono.Reset()              ‘reset!
    End Sub

    Sub ParallelFor()
        Chrono.Start()              ‘Start wath
        ‘ parallel for
        Parallel.For(0, loops, Sub(n)
                                   SomeTask()
                               End Sub)
        ‘ remember Elapsed time
        Elapsed2 = Chrono.Elapsed.TotalMilliseconds
        Chrono.Stop()               ‘Watch stop
        Chrono.Reset()              ‘reset!
    End Sub

   
    ‘Simulated task
    Sub SomeTask()
        ‘Your task here
        Thread.SpinWait(NumericUpDown2.Value)
    End Sub

End Class 

De Vacaciones :-)

Si es vuestro caso os deseo unos felices dias de descanso. En caso contrario paciencia pues finalmente todo llega.

Estare respondiendo a vuestras solucitudes en tanto finalicen los dias donde internet es algo inacesible para los que no disponemos de 3G, el WiFi es inexistente y se desconoce la implementacion de los conectores RJ45 馃檪

Cuidaros mucho y hasta la vuelta!
Salud,
Pep Lluis,

VB Hablame!

Aprovechando la inquietud de algunos de vosotros en tanto a ‘TextSpeech’ y con la intencion de romper el hielo, os dejo un ejemplo muy simple de como hacer hablar a la Srta. Anna con tan solo una linea, usando el ‘System.Speech’.


Saludos,
Espero Vuestros comentarios…
Pep Lluis,


PD. Como siempre el proyecto ejemplo en ‘Attachments’


 

WebServices para FW 3.5 En Vista, Sin WebConfig

Hablando de los archivos ‘.asmx’ colocados en el ‘wwwroot’ en ausencia de ‘web.config’ cuando intentamos llamar a servicios web hechos para framework 3.x sin tener configurada explicitamente la version a usar… obtenemos un “ERROR DE COMPILACION” porque por defecto nos esta tomando la :


Versi贸n de Microsoft .NET Framework:2.0.50727.1318; Versi贸n ASP.NET:2.0.50727.1318


Una de las formas de instruir que version del compilador debe usar el sistema al invocar estos servicios, es indicando la version que deseamos utilizar, adecuando la siguiente entrada del ‘web.config’ :


en el apartado :
  <system.codedom>
    <compilers>


con los valores…
        <providerOption name=”CompilerVersion” value=”v3.5″ />
o
        <providerOption name=”CompilerVersion” value=”v2.0″ />


Seg煤n convenga.
Saludos,
Pep Lluis,


 


 

SQL Server 2005 en Longhorn Server o Vista.

Imprescindible revisar las notas del equipo de documentacion de SQL, respecto a la instalacion de SQL Server 2005 en las nuevas versiones de SO…. si estais con Longhorn Server, debeis poner especial antencion en instalar el HTTP redireccion antes de iniciar la instalacion del SQL, para evitar el mensage "Incorrect IIS Configuration"

Tambien es util si estais intentando instalar el Visual Studio 2005, pues al finalizar su instalacion en el log de errores tendreis un "setup failed on component SQL Server 2005 express edition".

http://www.microsoft.com/sql/howtobuy/windowsvistasupport.mspx

Saludos,
Pep,

 

Nuevos Foros de MSDN

Con la sana intenci贸n de darlos a conocer y promover su uso, os participo la creaci贸n de estos nuevos foros. Realmente no substituyen a ninguno de los clasicos por lo que son complementarios a los grupos de noticias.

 


Lo interesante es darle vida para que la contribucion de los MVP’s vaya creciendo. O sea que 隆toca crearse el “habito”!

 

Saludos,

Pep Lluis.

 

MSDN Magazine July 2006 disponible!

MSDN Magazine June 2006Ya se encuentra disponible para su descarga la edici贸n de Julio 2006 de la excelente revista MSDN Magazine.

MSDN Magazine July 2006

Entre los art铆culos que podemos encontrar:

Atlas At Last: ASP.NET Atlas Powers The AJAX-Style Sites You’ve Been Waiting For por Matt Gibbs.

Extreme ASP.NET: Asynchronous Web Parts por Fritz Onion
.

Data Points: Reporting Controls in SQL Server 2005 Reporting Services por John Papa.




    Entre otros igual de interesantes.

    Puedes descargar la revista desde aqu铆 (archivo: MSDNMagazine2006_07.chm (1,719 KB))
    Puedes descargar el c贸digo fuente desde
    aqu铆 (archivo: MSDNMag2006_07.exe (2,570 KB))

    2006 Developer Day


    No te pierdas el pr贸ximo 31 de mayo la nueva edici贸n del Microsoft Developer Day, puedes obtener mayor informacion en


    http://go.microsoft.com/?linkid=4888188


    El Microsoft Developer Day, Un cl谩sico entre la comunidad de desarrolladores. Como en otras ocasiones, ser谩 un evento t茅cnico donde aprovecharemos para descubrir las ventajas de seguridad de Windows Vista y la plataforma Microsoft para desarrolladores.


    Lugar de celebraci贸n: Kinepolis, Pozuelo de Alarc贸n


    Fecha: 31 de mayo de mayo 2006 (d铆a completo)

    MZTools

    Seccion .NET, Revista profesional SoloProgramadores, Numero de Mayo.


    Tendremos la oportunidad de leer una interesante entrevista virtual que pude realizar a Carlos Quintero, que como ya sabeis es el creador de las MZTools.


    Espero que os guste y por supuesto vuestros comentarios.


    Pep,


    El sitio web del popular complemento (add-in) MZ-Tools
    (
    http://www.mztools.com) del MVP Carlos Quintero para los entornos VB6, VB5,
    VBA, VS.NET 2002/2003 y VS 2005 ha sido traducido al espa帽ol junto con los
    programas de instalaci贸n de las distintas versiones del producto, de manera
    que el ingl茅s ya no sea una barrera para los desarrolladores que no est谩n
    c贸modos con ese idioma. Aunque la interfaz de usuario de dicho producto
    estaba traducida al espa帽ol desde sus or铆genes, el sitio web estaba s贸lo en
    ingl茅s.

    MZ-Tools es una familia de complementos, algunos de ellos gratuitos, para
    los distintos entornos de desarrollo (IDEs) de Microsoft que mejora la
    productividad a帽adiendo m谩s de 40 funcionalidades mediante una barra de
    botones y distintos men煤s, permitiendo escribir, buscar c贸digo o dise帽ar
    formularios m谩s deprisa, documentar las aplicaciones, etc.

    M谩s informaci贸n en
    http://www.mztools.com

    Empezamos

    Bienvenidos al Blog de Pep Lluis!


    El principal objetivo de este sitio no es otro que recopilar con mucha ilusion, las respuestas mas interesantes, fruto de las preguntas realizadas en los grupos de noticias.


    Mi unico deseo es poder mantener un Blog, Util, Estable, Ameno y como no a disposicion de todos los que como yo,  libramos nuesta diaria e intermitable carrera en pro del aprendizaje de estas nuestras tecnologias de la informacion.


    Pep Lluis,