2016-11-29 3 views
2

は、次のような1と0の[10×10]行列持って言う:単一のマトリックス上で作業している場合、スレッド間でワークロードを公平に分割するための良い方法は何ですか?

0 0 0 1 0 1 0 0 0 1 
0 1 0 0 0 1 1 1 0 1 
1 0 0 1 0 1 0 1 0 1 
1 1 1 0 0 0 0 0 1 1 
1 0 1 1 0 1 0 1 1 0 
1 1 0 0 0 0 0 0 0 0 
1 1 0 1 1 1 1 1 1 0 
1 0 0 1 1 0 1 0 1 0 
0 1 0 0 0 0 1 0 0 0 
1 0 0 0 1 1 1 0 0 1 

を、あなたが同じ行列を操作するためのワーカースレッドの「X」のインスタンスを起動し、確認することの良い方法で何ですワークロードが各スレッド間でかなり分かれているため、各ワーカースレッドは、より多くの同程度のスペースを確保して作業します。

当初、私は私達が3つのインスタンスを起動した場合、それは次のようになりますように、列ごとに、それを分割することをお勧めだろうと思った:

wT[1]  wT[2]  wT[3] 
0 1 0 | 0 0 1 | 1 1 0 1 
1 0 0 | 1 0 1 | 0 1 0 1 
1 1 1 | 0 0 0 | 0 0 1 1 
1 0 1 | 1 0 1 | 0 1 1 0 
1 1 0 | 0 0 0 | 0 0 0 0 
1 1 0 | 1 1 1 | 1 1 1 0 
1 0 0 | 1 1 0 | 1 0 1 0 
0 1 0 | 0 0 0 | 1 0 0 0 
1 0 0 | 0 1 1 | 1 0 0 1 

ように、私のクラスメートのいくつかは、剰余を使うことを提案各行は、それ以上行が残らなくなるまでスレッドに渡されます。

あなたはどう思いますか?

+0

この例は、マルチスレッドの利点を得るには小さすぎます。 – EOF

+0

最初に均等に分割するのが最も簡単ですが、最も効果的なのは、最初に分割して、各スレッドに多かれ少なかれ追加するかどうかを決定することです。 – Jerry

+0

@EOFこれは単なる単純な例です。現実には、ConwayのGame of Lifeを800x600ボードでコーディングしようとしています。助言がありますか? – user100000

答えて

-3

実行ジョブに対して1つずつ待機および通知機能を使用できます。

+0

セマフォとバリアを使って各スレッドを待つことを意味するならば、その部分は私には明らかです。作業負荷を分割する効率的な方法がほしいだけです。 – user100000

関連する問題