プログラマから見るマルチスレッド処理マルチタスク処理違い

概要

このドキュメントは、
「マルチコアプログラミングの基礎」ホワイトペーパーシリーズ
の一部です


「マルチコアプログラミングの基礎」ホワイトペーパーシリーズ

このホワイトペーパーでは、アプリケーションでマルチタスク処理とマルチスレッド処理を活用することの重要性について説明しています。

内容

背景

マルチコアシステムは、2つ以上のコアが搭載されたシングルプロセッサCPUです。各コアには専用のマイクロプロセッサが内蔵されています。マルチコアマイクロプロセッサは、単一の物理パッケージでマルチプロセッシングを実行します。マルチコアシステムは、L2キャッシュやフロントサイドバスなど、マルチプロセッサシステムで重複することが多いコンピュータリソースを共有します。

マルチコアシステムの性能は、マルチプロセッサシステムに類似していますが、複数のプロセッサソケットなど複数のプロセッサをサポートするマザーボードが必要ないため、多くの場合、コストを大幅に節約できます。

マルチタスク処理

演算処理におけるマルチタスク処理とは、複数のタスク (プロセスとも呼ばれる) でCPUなど共通の処理リソースを共有する方式です。Windows XPなどのマルチタスク処理OSを使用することで、複数のアプリケーションを同時に実行することが可能となります。マルチタスク処理とは、各計算タスクをすばやく切り替えることで、複数の処理が別々のアプリケーションによって同時に行われているように見せるOSの機能のことを指します。

CPUのクロック速度が向上するとともに、アプリケーションを高速で実行できるようになっただけでなく、OSでアプリケーション間をすばやく切り替えられるようになりました。これにより、パフォーマンス全体が向上しました。コンピュータ上で多くの動作を同時に実行させることができ、個々のアプリケーションはより高速で実行できるようになっています。

シングルコア

シングルコアCPU搭載のコンピュータの場合、一度に1つのタスクしか実行できないため、CPUはそのタスクの命令を能動的に実行します。マルチタスク処理では、特定の時点で実行するタスクと、他の待機中のタスクを実行する順番をスケジュールすることで、この問題を解消します。

 

図1.シングルコアシステムは、1つのCPUでマルチタスクをスケジュール

 

マルチコア

マルチコアシステムの場合、マルチタスク処理OSは真の意味で複数のタスクを同時に実行することができます。異なるタスクに対して、複数の計算エンジンが独立して動作します。

たとえば、デュアルコアシステムでは、ワードプロセッサ、Eメール、ウェブブラウズ、ウイルス対策ソフトウェアなどの4つのアプリケーションが同時に異なるプロセッサコアにアクセスすることが可能です。Eメールをチェックしながら同時に文字を入力するなど、マルチタスクを行うことができるため、アプリケーション全体のパフォーマンスも向上します。

 

図2.デュアルコアシステムでは、マルチタスク処理OSで2つのタスクを同時に実行することが可能

 

このOSでは、異なるアプリケーション、つまりプロセスを別々のCPUコア間で分割することで、複数のアプリケーションをより効率的に実行できます。コンピュータで作業を分散させることができ、各コアでは以前の半分の量のアプリケーションの管理と切り替えのみが行われるため、全体的なスループットとパフォーマンスが向上します。事実上、アプリケーションは並列に実行されます。

 

マルチスレッド処理

マルチスレッド処理は、マルチタスク処理の論理をアプリケーションに適用したもので、1つのアプリケーション内の特定の処理をさらに個々のスレッドに分割します。各スレッドは並列に実行されます。OSは、異なるアプリケーション間だけでなく、アプリケーション内のスレッド間でも処理時間が分割されます。

たとえば、NI LabVIEWのマルチスレッドプログラムでは、アプリケーションを、ユーザインタフェース、データ収集、ネットワーク通信、ログの4つのスレッドに分割することができます。これらの各スレッドが独立して動作するように、優先順位を割り当てることができます。そのため、マルチスレッドアプリケーションでは、複数のタスクを他のアプリケーションと並列実行させることが可能です。

図3.デュアルコアシステムでは、マルチスレッド処理が可能

マルチスレッド処理を利用したアプリケーションには、以下のような多くのメリットがあります。

  • 効率面で優れたCPUの使用
  • システムの信頼性の向上
  • マルチプロセッサのコンピュータでのパフォーマンス向上

多くのアプリケーションでは、計測器などのリソースの同期呼び出しを行います。このような計測器の呼び出しには、多くの時間がかかることがあります。シングルスレッドアプリケーションの場合、同期呼び出しによって、処理が完了するまでアプリケーション内の他のタスクの実行が実質的に阻止されます。マルチスレッド処理によって、このような阻止を回避できます。

1つのスレッドで同期呼び出しが行われる間、この呼び出しに依存しないプログラムの他の部分は異なるスレッドで実行されます。アプリケーションの実行は、同期呼び出しが完了するまで停滞せずに進行します。このように、マルチスレッド処理アプリケーションでは、アプリケーションのスレッドの実行準備ができている場合にCPUがアイドル状態にならないため、CPUの効率を最大限に高めることができます。

LabVIEWマルチスレッド処理

LabVIEWは、各アプリケーションを自動的に複数の実行スレッドに分割します。複雑なスレッド管理のタスクは、LabVIEW実行システムに透過的に組み込まれています。

 

図4.LabVIEWは複数の実行スレッドを使用

LabVIEWマルチタスク処理

LabVIEWは、対応しているOSでプリエンプティブマルチスレッド処理を使用します。また、LabVIEWは協調型マルチスレッド処理も使用します。プリエンプティブマルチスレッド処理対応のOSおよびプロセッサではスレッド数が限られているため、場合によっては協調型マルチスレッド処理を使用することもあります。

実行システムでは、スレッドを使用して、VIのマルチタスク処理をプリエンプティブ方式で行います。ただし、使用できるスレッドの数は制限されます。並列性の高いアプリケーションでは、使用できるスレッドがビジー状態の場合、実行システムは協調型マルチタスク処理を使用します。また、OSはアプリケーションと他のタスク間でプリエンプティブマルチタスク処理を行います。

Was this information helpful?

Yes

No