Amdahl 定律可能会在预测真实问题的并行加速时造成误导。花费在程序的顺序部分的时间有时取决于问题大小。也就是说,通过按比例缩放问题大小,您可以获得更多加速机会。以下示例说明了这一点。
/* * initialize the arrays */ for (i=0; i < n; i++) { for (j=0; j < n; j++) { a[i][j] = 0.0; b[i][j] = ... c[i][j] = ... } } /* * matrix multiply */ for (i=0; i < n; i++) { for(j=0; j < n; j++) { for (k=0; k < n; k++) { a[i][j] = b[i][k]*c[k][j]; } } } |
假定理想的开销为零,并假定只有第二个循环嵌套并行执行。不难发现,对于较小的问题大小(即 n 的值较小),程序的顺序部分和并行部分所用的时间彼此相差并不大。然而,随着 n 值的增大,花费在程序并行部分的时间比花费在顺序部分的时间增长得更快。对于此问题,随问题大小的增大而增加处理器数很有益。