[C con Clase] vectorizar matrices & Threads

Alejandro Vázquez Otero alnavegante en gmail.com
Mar Feb 24 19:29:17 CET 2009


En primer lugar muchas gracias por responder tan pronto, Programante.
La solucion que propones es funcional, pero pierdes la vectorizacion.
Me explico, una matriz declarada de esta forma:*
*

float matriz[10][10];


solo tiene un canal de entrada/salida. Por lo que cada hilo tiene
que acceder por el mismo canal a la matriz. Esto es, generamos un cuello 
de botella
cuando los dos hilos acceden a la misma matriz en la RAM.
Mi intencion es vectorizarla, para que cada hilo acceda de forma 
independiente a
vectores distintos, evitando los cuellos de botella.
Y ademas, al vector que haga de frontera deberan poder acceder los dos 
hilos (en momentos
distintos, eso si), por lo que necesariamente tiene que tratarse de 
vectores.

Un saludo,

    Alejandro




Programante wrote:
> Alejandro Vázquez Otero escribió:
>   
>> Hola a todos -y gracias por su tiempo-,
>> una cuestion seguramente muy sencilla para alguno de ustedes;
>>
>> supongamos que tengo una matriz:
>>
>> float matriz[10][10];
>>
>> y para realizar operaciones con sus elementos dispongo de un bucle
>> como el siguiente:
>>
>> for (j=0; j<10; j++)  for (i=0; i<10; i++)  {matriz[j][i]=operaciones;}
>>
>> pero ahora quiero vectorizarla con el fin de emplear varios threads al
>> mismo tiempo
>> para recorrerla. Para ello sustituyo la matriz por los siguientes
>> vectores:
>>
>> float matriz1[10] ,matriz2[10], ...,matriz10[10];
>>     
> No, no, no.
>
>   
>> y ahora viene el problema. Quiero recorrer solo los primeros 5 vectores
>> para lo cual necesito un  bucle ''for" como el anterior que recorra
>> todos los
>> elementos de los primeros 5 vectores:
>>
>> Esta claro como recorrer los elementos de un vector:
>>
>> for (i=0; i<10; i++)  {matriz1[i]=operaciones;}
>> ?Pero como hago para que el bucle for, al terminar con matriz1 pase a
>> matriz2, y asi
>> sucesivamente hasta matriz5?   ?Como puedo codificar esto?
>>     
>
> float matriz[10][10];
>
> int main() {
> ...
> LanzarHilo( OperarMatriz, 0 ); /* Este hilo hace las 5 primeras columnas*/
> OperarMatriz(5); /* Y el hilo principal las otras 5 */
> ...
> }
>
> int OperarMatriz(int DesdeDonde) {
>     for (j=0; j<5; j++)  for (i=0; i<10; i++)  {
> matriz[DesdeDonde+j][i]=operaciones; }
> }
>
>
>
> Eso sí, operaciones no debería referenciar a datos que modifique otro
> hilo. Podría leer los datos antiguos, los nuevos o ninguno de ellos.
>
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
>   





Más información sobre la lista de distribución Cconclase