Escriba un programa paralelo similar al explicado en GRID::Machine::perlparintro que realice el producto de dos matrices.
Pueden serle de utilidad los módulos Test::LectroTest::Generator y PDL.
El módulo Test::LectroTest::Generator facilita la escritura de generadores aleatorios:
  DB<1> use Test::LectroTest::Generator qw(:common Gen)
  DB<2> $mg = List( List( Int(sized=>0), length => 3 ), length => 3)
  DB<3> $a = $mg->generate
  DB<4> x $a
0  ARRAY(0x84e4484)
   0  ARRAY(0x84e42ec)
      0  18346
      1  '-11920'
      2  '-12209'
   1  ARRAY(0x84e46b8)
      0  '-4086'
      1  25348
      2  28426
   2  ARRAY(0x84e4694)
      0  '-21350'
      1  7670
      2  '-27287'
El módulo PDL
facilita un gran número
de librerías de soporte al científico. 
En particular para las operaciones mas
usuales con matrices:
DB<5> use PDL DB<6> $a = pdl $a # Ahora $a es una matriz PDL DB<7> $b = inv $a # $b es la inversa de $a DB<8> x $b # PDL esta implementado en C 0 PDL=SCALAR(0x8367960) -> 139669992 DB<9> print $b # La conversión a cadena está sobrecargada [ [ 6.3390263e-05 2.919038e-05 2.0461769e-06] [ 5.0059363e-05 5.3047336e-05 3.2863591e-05] [-3.5527057e-05 -7.9283745e-06 -2.9010963e-05] ] DB<10> print $a x $b # El operador x es el producto de matrices [ [ 1 1.1514905e-16 1.163891e-16] [ 2.1000996e-16 1 -7.6653094e-17] [-1.0554708e-16 -5.3071696e-17 1] ]Puede usar el módulo PDL para escribir el programa que hace el producto de matrices en Perl o bien reescribirlo en C. Tenga presente evitar los buffers intermedios, esto es, hacer flushout de todas las salidas para que no se produzcan retrasos en las comunicaciones (usando, por ejemplo la función fflush en C y el método autoflush de los objetos IO::Handle en Perl).
La idea para paralelizar el
producto 
 de dos matrices 
es que la matrix 
 se replica en los distintos procesadores
mientras que la matriz 
 se distribuye en submatrices de 
tamaño 
 siendo 
 el número
de procesadores. 
Casiano Rodríguez León
