1

要件があり、スレッドを使用してそれを満たすことができるかどうかわかりません。定義済みの 100*100 行列が 2 つあり、それらの乗算を実行したいと考えています。私が望むのは、単純な乗算ではなく、これを 3 つの別々のプログラムに分割したいということです。最初のプログラムは最初の 33 行の乗算を行い、2 番目のプログラムは 33 から 64 の行の乗算を行い、3 番目のプログラムは 64 から 100 の行の乗算を行います。これらのプログラムを並行して実行し、その結果 (行の乗算) を収集してから、これら 3 つの異なる結果を 1 つの行列に結合します。今、私はそのようなプログラムまたはクラスを3つ開発しましたが、それらを並行して実行する方法を見つけることができません。スレッドでは、どのスレッドが最初に実行され、どのスレッドが後で実行されるかを確認できないことを読みました。

私の問題にどのテクニックを使用できるか、誰か教えてください。

皆さんにとても感謝しています。

4

4 に答える 4

2

Javaには、この種のものが組み込まれています。ドキュメントはhttp://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Executors.htmlです。

各オブジェクトを作成し、それをスレッド プールにスローしてから、それらすべてを実行します。

ExecutorService service = Executors.newFixedThreadPool(3);
service.submit(matrixMult1);
service.submit(matrixMult2); // the objects that do the work
service.submit(matrixMult3);

service.shutdown();
service.awaitTermination(1, TimeUnit.HOURS);

これが基本的なアウトラインです。

于 2012-10-08T20:26:17.360 に答える
1

これは、大学でほとんどの並列Javaプロジェクトに使用している並列Javaライブラリです。

それは私の並列プログラミングの教授であるAlanKaminskyによって書かれました。彼は素晴らしいです(数人の学生もそれに貢献しています)。

ダウンロードページで注意すべき重要な点:使用法のセクション、ドキュメントのセクション、およびシステム要件(特に、Java5がJava6または7よりもパフォーマンスが向上する傾向がある部分)。

良い出発点edu.rit.pj.test.Test13は、行列演算を実行するです。

この実装にとって非常に重要なクラスはですedu.rit.pj.Comm。これは、スレッド間でのデータのほとんどの受け渡しを担当します。broadcast()このクラスのドキュメントを必ず読んでください。特に、とのセクションに注意してgather()ください。これは、最初にマトリックスをノードに配布し、最後に結果を収集して結合する方法です。

取り入れることはたくさんあります、私は知っています。後で例を書いてみます。

于 2012-10-08T18:36:45.047 に答える
1

この状況では、EJML ( http://code.google.com/p/effective-java-matrix-library/ ) や la4j ( http://la4j.org ) などの既存のライブラリを使用します。おそらく、ライブラリははるかに高速に結果を生成します。数学により適した別の言語に移行することもできますが、それはこの質問の範囲外だと思います。スレッドの使用に固執している場合、これらはすべて並行して実行されるため、最初に完了した人は重要ではなく、すべてが完了したことを確認してから再構築する必要があります。

それが役立つことを願っています

于 2012-10-08T18:26:22.187 に答える
0

100 x 100 が非常に大きいとは思いません。また、並行して実行しても大幅な速度向上は見られません。これは、特に OS がビジーな場合に、事前最適化の典型的な例になります。

第二に、なぜ車輪を再発明しようとしているのですか?
jblas http://mikiobraun.github.io/jblas/BLASは、Javaの最速のライブラリであると考えられています。
また、投稿しない場合、コードの何が問題なのかをどのように伝えることができますか?

とにかく、Javaコンカレンシー API を使用して他のタスクの出力に依存するタスクを完了するための回答を紹介します: Executing Dependent tasks in parallel in Java
Please check out.
これにより、説明した方法でこの問題を解決する別の例が得られますが、jblas を使用するよりもアプローチが遅くなると思います。

于 2014-09-12T09:02:24.077 に答える