シングルスレッドプログラムで複数のコアを使用できますか?


12

タイトルはそれをすべて言っています:単一のCPUコアを使用して複数のCPUコアを使用するように設計された古いプログラムを取得する方法はありますか?


13
いいえ、できません。
モアブ

5
それだけが簡単だった場合..
ブレンダンロング

1
プロセッサを「エミュレート」するプログラム(vmなど)がありますが、マルチコアCPUを使用し、スレッドあたりの処理能力がはるかに高いシングルコアCPUをエミュレートするとどうなりますか?それは可能ですか?
schizoid04

順序が重要なので、だれが複数のスレッド間の同期を管理します。
ユーザー36582

回答:


16

残念ながら、単一のCPU用に作成されたレガシープログラムが複数のCPUコアを使用することを強制することはできません。複数のCPUコアを使用するには、複数のスレッドが必要です。これらのスレッドは、競合状態やその他の問題が発生しないようにしながら、互いに通信する必要があります。古いアプリケーションは、アプリケーションの性質上、並列化が許可されている場合にのみ書き換えられない限り、CPUコア以上を使用することはできません。


19
また、いくつかのアプリケーションは、複数のコアを考慮して書き換えることができないことに注意する価値があります。ほとんどの場合、プロセスがどの程度並列化可能かによって異なります。非並列化プロセスの簡単な例は、人間の生殖です。1人の女性が9か月で1人の子供を作ることができます。9人の女性が9か月で9人の子供を作ることができますが、9人の女性を使用して1か月で1人の子供を製造することはできません。
-AndrejaKo

1
原則として、プログラムを作成して別のプログラムを分析し、並列化を試みることができます。とはいえ、この問題の非常に限られた「簡単な」バージョンでさえ、博士号を生み出しています。最後の数世代の学位論文と進歩は遅かった。完全な問題は、AIが完全に完了している可能性があります。
dmckee ---元モデレーター子猫

皆さん、ありがとうございました。特に製造業について話すときは、女性と出産の例と一緒に苦労しました。D-
クリス

プログラムに、後で互いに使用される独立した数学演算の束がある場合はどうなりますか?多分、2番目のスレッドがプログラムを解析できます。うーん、何を言っているのかわかりません。スレッドがアセンブリを解析できる場合..「ここで高価な操作を行い、次に最初の高価な操作が触れないように2回目の高価な操作を行います」メインスレッドに戻ります。独立した高価な操作を識別するために、プログラム全体を事前に解析する必要があると思います。
CausingUnderflowsEverywhere

13

あなたの目標は何ですか?パフォーマンスが向上しましたか?悲しいことに、1つのコアのみを使用するように設計されたアプリケーションは、それ以上使用しません。これが、「マルチスレッド」アプリケーションの話です。


2

単一のコアを使用するために設計されたプログラムで複数のプロセッサを活用するための少なくとも3つの手法があります。これらの手法の中で最も簡単なのは、複数のコアを使用するか、少なくとも部分的にアプリケーションコードと並行して実行できるライブラリとシステムコードを使用することです。ガベージコレクションは、並列化できる機能の例であり、アプリケーションの実行と並行して実行できる場合があります。自動メモリ管理がなくても、メモリアロケータはメモリのセクションを使用可能としてマークするだけでは済まないため、メモリの割り当て解除関数に並列処理の可能性があります。

2番目の手法はバイナリ変換です。これは「アプリケーションの書き換え」と見なされる場合がありますが、ソフトウェアによって、ソースコードにアクセスすることなく行われます。スレッドレベルの並列処理の生成は、バイナリ変換を使用するほとんどの研究開発の主な目標ではなかったようです(多くの場合、異なるISAでのレガシーコードの実行、ISA拡張機能の活用、特定のマイクロアーキテクチャの最適化、および動的情報を使用した高度な提供品質プロファイルに基づく最適化)、しかしその可能性は明らかです。

3番目の手法は投機的マルチスレッドです。現在、ハードウェア管理の投機的マルチスレッドをサポートしているプロセッサ(私が知っている)はありません。ただし、ハードウェアトランザクションメモリの導入により、HTMを使用してメモリ使用の競合を検出できるため、ランタイムシステムにそのような実装を実装する方が多少実用的です。ソフトウェア管理の投機的マルチスレッドには通常、バイナリ変換が含まれますが、投機的な性質は別の手法を検討することを正当化します。

これらの手法の実用性は、既存のシステムに関連するコスト(スレッド間および生成スレッドの通信コストを含む)、利用可能な制限された並列性、および投資利益率の制限(有益な重要なアプリケーション)によって制限されます並列化は書き直される可能性が高いため、多くのアプリケーションはそのような手法の恩恵をほとんど受けません(特に、電力/熱の制限により、単一のコアを複数のコアよりも高い周波数で実行できるため)。開発コストは非常に高くなります。しかし、これらの手法存在し、理論的には、単一のコアを使用するように設計されたアプリケーションで複数のコアを使用することが可能です。


0

いいえ、できません。プログラムは、複数のコアを使用するように明示的に記述されています。複数のコアでジョブを実行することは簡単ではありません。すべてのスレッドの同期が必要です。ボールを投げる、キャッチする、ボールを磨く、掃除する、ボールに十分な空気があるかどうかをチェックするなどです。ここで、各キャラクターが互いに独立してスレッドで実行されていると想像してください。誰かが投げられないときにボールをキャッチしようとします。または、誰かがボールがプレーされているときにボールを磨こうとします。または、2人のキャラクターが同時にボールをキャッチして投げようとします。クラッシュする方法はたくさんあります。そのため、プログラマは、複数のコアを活用できるように、シングルコアアプリケーションを慎重に再設計する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.