2

たとえば、クアッドコアコンピューターを使用することの利点は、全体的に増加していると思います。しかし、通常の日常的なコンピューティングのどの段階でこれが起こっているのか、私は疑問に思っています。

行列乗算 (並列コンピューティングの "Hello World") を行う C コードを記述した場合、システムのコンパイラは 4 つのコアすべてに対してこれを最適化する方法を自動的に認識しますか? または、4 つのコアすべてを利用するには、プログラムで明示的に複数のスレッドを作成する必要がありますか?

基本的に私が知りたいのは、プログラムが自動的に並列化される量と、スケジューラーが異なるコアに送信する複数のスレッドを作成することでプログラマーが最適化できる量です。

4

4 に答える 4

2

純粋なCで作成する場合は、自分で複数のスレッドを作成する必要があります。または、OpenMP(行列の乗算に非常に適しています。OpenMPを使用してループ内の作業を複数のスレッドに分割するコードを作成できます)を使用して、スレッドコードを生成します。

ただし、負荷分散はユーザーが行う必要があります。

異なるコアで実行できるようにするには、プログラムに複数のスレッドが必要です。

于 2012-05-27T04:55:43.653 に答える
1

知っている言語でプログラムを作成すると、並行して実行されることはほとんどありません。

このような言語で並列処理を行うには、組み込みの言語機能(「フォーク」または「並列処理」)またはスレッド化を使用する外部ライブラリのいずれかに頼る必要があります。

関数型言語の連中は、主な価値の1つは副作用がないことであると主張しているため、実際には関数型プログラム全体を並行して実行できます。Haskellの連中が、あなたが望む場所に明示的な並列処理プリミティブを提供し続ける(そして私が知る限り、あなたが使用することを主張する)のは驚くべきことです。

于 2012-05-27T04:55:45.773 に答える
1

システムは、コア間で作業を分散する方法を知りません。ワークロードを分割するプログラムを作成するのはあなた次第です。これは、やるべきことがたくさんある場合にのみ価値があります。これは、スレッドの大きな目的の1つです。

于 2012-05-27T04:56:53.060 に答える
1

フレームワークと言語統合機能の数が増えると、宣言型並列コンピューティングが容易になります。ただし、それでもコードにいくつかの変更を加える必要があります。変更の量は、コードの性質と、コードとフレームワークの間に適切な適合性があるかどうかに応じて、小さい(数行)または大きい(完全な書き換え)場合があります。

スレッドを管理する必要のない並列化の方法があります。これらは、タスク並列処理、データ並列処理、アクター、エージェントなどと呼ばれることがよくあります。

于 2012-05-27T05:04:00.487 に答える