[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