Gracias por responder, Programante. Pero la última parte no entiendo muy bien lo que expones. <br>Voy a intentar ser un poco más claro. Lo que estoy haciendo es "integrar" ecuaciones diferenciales no lineales. Para ello tengo dos matrices principales: <br>
<br>   float u[dimy][dimx] y v[dimy][dimx]   //la declaracion no la hago exactamente asi, sino empleando malloc() y algunas cosillas mas... pero da lo mismo.<br><br>u y v son las variables de las dos ecuaciones diferenciales que hay que discretizar. Digamos que el esquema del programa sería algo asi:<br>
<br><br>////////////////////////////////////////////////////////////////////////////////////////////////<br> float u[1000][1000] y v[1000][1000]   //y otras muchas matrices y variables...<br><br><br>unsigned  WINAPI uno(LPVOID param) <br>
    {<br>    for( j1=1; j1<(1000/2); j1++ )<br>        {<br>        for( i1=1; i1<1000-1; i1++ )<br>   <br>            {<br>            unew[j1][i1]=funcion de  u[j1][i1] y v[j1][i1]    u[j1+1][i1-1] y v[j1-1][i1+1]   //y otras cosas...<br>
            unew[j1][i1]=funcion de  u[j1][i1] y v[j1][i1]    u[j1+1][i1-1] y v[j1-1][i1+1]   //y otras cosas..<br>            }<br>        }<br><br>unsigned  WINAPI dos(LPVOID param) <br>    {<br>    for( j2=(1000/2); j2<1000; j2++ )<br>
        {<br>        for( i2=1; i2<1000-1; i2++ )  <br>            {<br>            unew[j2][i2]=....idem que en el anterior hilo<br>            vnew[j2][i2]=....<br>            }<br>        }<br>    }<br>        <br>    }<br>
main()<br>    {<br>        HANDLE threadArray[numThreads];<br>        threadArray[0] = (HANDLE) _beginthreadex(NULL, 0, uno,(LPVOID) 1U, 0, &threadID);<br>        threadArray[1] = (HANDLE) _beginthreadex(NULL, 0, dos,(LPVOID) 2U, 0, &threadID);<br>
    }<br>*****************************************************************************************************<br><br><br>este programa en teoría ejecuta dos hilos de forma que el primero recorre las 500 primeras filas, y el segundo las siguientes 500 de forma que los dos proceso se ejecutan en paralelo (aunque acceden al mismo array en memoria donde se encuentran las matrices... no se si esto tendrá algo que ver con el retraso...).<br>
<br>si en lugar de lo anterior hago la integración en único proceso (sin crear hilos, esto es, dentro del main() directamente) va entre el doble y el triple más rápido o incluso más.<br><br>    for( j1=1; j1<1000-1; j1++ )<br>
        {<br>        for( i1=1; i1<1000-1; i1++ )<br>   <br>            {<br>            unew[j1][i1]=funcion de  u[j1][i1] y v[j1][i1]    u[j1+1][i1-1] y v[j1-1][i1+1]   //y otras cosas...<br>            unew[j1][i1]=funcion de  u[j1][i1] y v[j1][i1]    u[j1+1][i1-1] y v[j1-1][i1+1]   //y otras cosas..<br>
            }<br>        }<br><br><br><br>bueno, si necesitais que sea más detallado la próxima vez enviaré un código funcional. Gracias y espero vuestra respuesta.<br><br><br><div class="gmail_quote">El día 26 de junio de 2008 21:14, Programante <<a href="mailto:programante@gmail.com">programante@gmail.com</a>> escribió:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Raúl, dice que lo está ejecutando en un QuadCore, así que tiene varios<br>
procesadores y sí debería mejorar (introducir hilos genera sobrecarga,<br>
pero debería superarla el diseño paralelo).<br>
Alnavegante, ¿cuál es el código exacto que usas? Tanto el código que<br>
crea los hilos como el que ejecutas dentro (vale un ejemplo, si da ese<br>
resultado).<br>
Sólo se me ocurre que estés creando los hilos mal y se esté ejecutando<br>
en realidad en paralelo (por ejemplo si tuvieras un mutex dentro de f) o<br>
que por algún motivo estés dinamitando el mecanismo de caché entre los<br>
dos hilos.<br>
Por otro lado, ten en cuenta que *no estás obteniendo el mismo<br>
resultado* en la versión paralela que en la secuencial. Estás asignando<br>
f() del siguiente (sin procesar) con el anterior (procesado), pero al<br>
dividirlo en dos, para dimy/2 se calcula f() del siguiente (sin<br>
procesar) con el anterior (sin procesar... posiblemente).<br>
<div><div></div><div class="Wj3C7c"><br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div><br>