[C con Clase] vectorizar matrices & Threads

Programante programante en gmail.com
Mar Feb 24 19:14:44 CET 2009


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.






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