異なるプロセス(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
私はそれを理解することはできません。