私の目標は、あるタスクを達成するpthreadsを使ってマルチスレッドアプリケーションを作成することです。タスクとpthreads自体が正しく機能しているので、数百行のコードを画面に表示せず、この重要なビットだけを表示します。コードをテストする必要がある場合は謝罪し、これは困難になります。2次元配列のループ境界をスレッドごとに分割する方法
私は残念ながら私はこの図で行うことを意図していて、スレッドによってブロック単位で仕事をするために2次元配列を分割する方法を見つけ出すことはできません。テストの際
for(int i=(t_id%x)*(height/x); i<(t_id%x + 1)*(height/x); i++){
for(int j=(t_id%x)*(length/x); j<(t_id%x + 1)*(length/x); j++){
//some work is done
}
}
//t_id -> thread id
//x -> 2^x = number of threads, so in this ex, x=4
//i -> y axis, j -> x-axis
//height -> bound on y-axis of array
//length -> bound on x-axis of array
をし、この解決策は、すべてのスレッドが対角線に沿って配置されるという欠点を有することは明らかである。私はこれを回避するソリューションを構築する方法を考え出すことはできません。私はこの問題を解決する方法について何か提案していただければ幸いです。
から始まる私は[作業パーティション](HTTPSを使用したい
W/M * (J + 1)
にH/N * (I + 1)
とW/M * J
範囲のデータを扱うことになる行のセルを扱うスレッドより://blogs.oracle.com/d/entry/partitioning_work_over_multiple_threads)を参考にしてください。私はこれを使ってrow_start、row_end、col_start、col_end変数を作成します。最後のセクションでも境界条件が処理されます! その後、forループを反復処理するときは、row_startからrow_endまで1つずつ増やして、内部ループは同じ列を繰り返します。 – KosherBacon