C 四个进程的执行速度比两个进程慢
我想比较使用不同过程(1、2、4)的矩阵乘法 我将代码用于2进程,fork一次,让child处理父进程并执行1/2计算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
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