C 四个进程的执行速度比两个进程慢

C 四个进程的执行速度比两个进程慢,c,linux,parallel-processing,C,Linux,Parallel Processing,我想比较使用不同过程(1、2、4)的矩阵乘法 我将代码用于2进程,fork一次,让child处理父进程并执行1/2计算 if (cpid == 0) { /* Code executed by child */ for (int i = 0; i < dimension / 2; i++) { for (int j = 0; j < dimension; j++) { //matri

我想比较使用不同过程(1、2、4)的矩阵乘法

我将代码用于2进程,fork一次,让child处理父进程并执行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                    
              }
        }
  }
 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
                }
              }
      }      
  }

我想不出来。

我想说您是在双核上运行。
只有在每个进程都有内核的情况下,通过各个进程拆分工作负载才有帮助。
否则,处理器内核将花费时间切换流程上下文,而不是处理任务本身


您的问题也可能太小,使用并行处理的开销克服了它的优点。如果是这种情况,使用更大的矩阵运行4个进程最终将比1和2个进程版本性能更好。

根据代码板,它不编译;-)所有进程之间的共享内存有什么影响?您必须处理多少个内核?它是什么架构?我正在使用MacBookAir 2013和带有ubuntu 13.10的parllel桌面。我已经用4个内核设置了parall桌面虚拟机,但我不知道它是否会影响。我用g++编译了它,我用的是macbook air 2013和带有ubuntu 13.10的parllel桌面。我已经用4个内核设置了parall桌面虚拟机,但我不知道它是否会影响。嘿@Liang YuPan。出了什么问题?
1
elapsed 5147.936000 ms
2
elapsed 2821.225000 ms
4
elapsed 3129.096000 ms