[C con Clase] vectorizar matrices & Threads

Programante programante en gmail.com
Mar Feb 24 20:20:38 CET 2009


Alejandro Vázquez Otero escribió:
> 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.
¿Perdón?? Me parece que estás mezclando conceptos.
El código generado puede ser perfectamente el mismo haciendo float
matriz[10][10];
que con
float matriz0[10];
float matriz1[10];
float matriz2[10];
float matriz3[10];
float matriz4[10];
float matriz5[10];
float matriz6[10];
float matriz7[10];
float matriz8[10];
float matriz9[10];

Si no te gustaba la operación matriz[DesdeDonde+j] puedes usar punteros.
Usé ese método por ser más claro.

LanzarHilo( OperarMatriz, matriz ); /* Este hilo hace las 5 primeras columnas*/
OperarMatriz(matriz + 5); /* Y el hilo principal las otras 5 */
...
}

int OperarMatriz(float** mimatriz) {
    for (j=0; j<5; j++)  for (i=0; i<10; i++)  { mimatriz[j][i]=operaciones; }
}



> 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.
El problema es que no puedes asegurar que sean momentos distintos.
Tienes que añadir algún mecanismo de sincronización (semáforos,
secciones críticas...).





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