0

異なるプロセス(1、2、4)を使用して行列乗算を比較したい

2プロセスのコードを使用し、1回フォークし、子を親にして1/2計算を行います

  if (cpid == 0) {            /* Code executed by child */
      for (int i = 0; i < dimension / 2; i++)
      {
        for (int j = 0; j < dimension; j++)
        {
          //matrix multiplication
        }
      }
      exit(EXIT_SUCCESS);
  } else {                    /* Code executed by parent */
        for (int i = dimension / 2; i < dimension; i++)
        {
              for (int j = 0; j < dimension; j++)
              {
          //matrix multiplication                    
              }
        }
  }

4 プロセスのコードは、1 回フォークし、次に子と親を再度フォークし、4 プロセスを使用して 1/4 計算を行います。

 cpid = fork();
  if (cpid == 0)
  {
      cpid = fork();
      if (cpid == 0)
      {
              for (int i = 0; i < dimension / 2; i++)
              {
                for (int j = 0; j < dimension / 2; j++)
                {
                  //matrix multiplication
                }
              }
        exit(EXIT_SUCCESS);
      }
      else{
              for (int i = 0; i < dimension / 2; i++)
              {
                for (int j = dimension / 2; j < dimension; j++)
                {
                  //matrix multiplication
                }
              }
        exit(EXIT_SUCCESS);
      }
  }
  else{
      cpid = fork();
      if (cpid == 0)
      {
              for (int i = dimension / 2; i < dimension; i++)
              {
                for (int j = 0; j < dimension / 2; j++)
                {
                  //matrix multiplication
                }
              }
        exit(EXIT_SUCCESS);
      }
      else{
              for (int i = dimension / 2; i < dimension; i++)
              {
                for (int j = dimension / 2; j < dimension; j++)
                {
                  //matrix multiplication
                }
              }
      }      
  }

完全なコードは次のとおりです。http://codepad.org/MmjRiBIN

驚いたことに、速度は 2 > 4 > 1 です。

1
elapsed 5147.936000 ms
2
elapsed 2821.225000 ms
4
elapsed 3129.096000 ms

私はそれを理解することはできません。

4

1 に答える 1