[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