0

一般的な Matrix の実装があり、並列処理と逐次処理で '*' および '+' 演算子を使用するオプションを作成します。

並列計算の例: m1 と m2 の行列があり、m3 = m1 * m2 があるとします。異なるスレッドで m3 行 i' を計算します。プラス:

シリアル計算は、m3[0,0]、m3[0,1] などを計算するだけです。

大きなマトリックスと小さなマトリックスを使用して各操作の時間を測定したところ、小さなマトリックスではシリアル処理が並列処理よりも高速であることがわかりましたが、並列処理は大きなマトリックスでより優れたパフォーマンスを示しました。

The results:
+----------------------------+--------------------------------+------------+
|             Big            |              Small             |            |
+----------------------------+--------------------------------+------------+
|      *      |       +      |       *       |        +       |            |
+-------------+--------------+---------------+----------------+------------+
| 0.697798sec | 0.0407585sec | 8.7408e-05sec | 0.000109052sec | Parallel   |
+-------------+--------------+---------------+----------------+------------+
| 11.9984sec  | 0.0235058sec | 6.68e-07sec   | 7.76e-07sec    |  Serial    |
+-------------+--------------+---------------+----------------+------------+

誰かが理由を説明してもらえますか?

どうもありがとう!

4

2 に答える 2

0

たとえば、サイズが 10*10 の行列を例にとると、小さな行列では、シリアル処理が適しています。プログラムを小さな断片に分割して、さらに処理するためにシリアルまたは単一のプロセッサに持ち込む必要がないからです。この同じ 10*10 行列が並列処理によって操作されると、小さな断片に分割され、個々のプロセッサのそれぞれに供給されます (これらすべてが行列を分割し、それぞれに処理することに注意してください)。並列プロセッサの処理には時間がかかるため、行列が小さいと並列処理のパフォーマンスが低下します。

たとえば、サイズが 100*100 の行列などの大きな行列がシリアル プロセッサに渡された場合、プロセッサはこの単一のプログラムを処理できず、すべての割り込み、その他すべての大量のプロセスを処理する必要があるため、待機します。この場合、時間は増加します。しかし、同じ 100*1000 行列が並列処理に渡されると、適度に小さな断片に分割され、複数のプロセッサによって操作される可能性があります。たとえば、CPUに2つのコア/プロセッサが含まれている場合、1つをこのマトリックス専用にし、もう1つを他のすべての割り込み処理と他のプログラム専用にすることができるため、時間の経過とともに待機時間が大幅に短縮されます

于 2016-09-19T19:50:28.993 に答える