
連載|組込みシステムにおけるマルチコア
第1回 基礎編 ―並列処理が必要になってきた背景
現代の組込みシステムは、複雑化・高性能化の一途をたどっています。AI、IoT、クラウドといった技術の進展により、処理すべきデータ量は爆発的に増加し、従来の「1つの命令を順番に処理する」方式では対応が難しくなっています。そこで鍵となるのが「並列処理」。
本シリーズでは、CPUやシステム設計における並列処理の考え方から実装の工夫までを、全4回にわたって解説します。第1回は、その基礎となる「直列処理」と「並列処理」の違いを整理します。

この連載の記事一覧
連載|組込みシステムにおけるマルチコア
- 第1回 基礎編 ―並列処理が必要になってきた背景
- 第2回 ハードウェア編 ―マルチCPUとマルチコア
- 第3回 並列化の限界とソフトウェアによる対策
- 第4回 並列化の実践と設計ポイント ―マルチコア活用
1. 直列化されたプロセス
現在、社会の至るところに遍在するCPUデバイス(HPC、サーバーデバイス、デスクトップデバイス、モバイルデバイスやマイコンを組み込んだ機器など)で使われているCPUの大半は、いまだに1940年代に作られた「ノイマン型コンピュータ」と呼ばれるものです。
このCPUでは、“タスクAを実行してからタスクBを実行する”というように、命令を順番に実行する「直列化されたプロセス」で処理が行われます。
直列化されたプロセスでは、共通の伝送路であるCPUバスを介してプログラムコードを逐次実行し、データメモリ、周辺ペリフェラルにアクセスしますが、このバスの共有がシステム性能のボトルネックになることがありました。
その後、半導体製造プロセス技術の発展とともに、古典的な発想であるノイマン型コンピュータはより高速なクロックで実行できるようになり、ノイマン型のバスボトルネックに対応するために、以下の工夫や拡張が加えられるようになりました。
- 命令キャッシュ・データキャッシュによるバス使用率の低減
- 命令バスとデータバスの分離(ハーバートアーキテクチャ)によるバスの輻輳改善
- バス・マトリックストポロジー構成によるアクセス輻輳回避
- 分岐予測と投機的な実行
- SIMD(Single Instruction Multiple Data)命令(単一命令で複数のデータを処理する命令)のサポート
- スーパースカラーアーキテクチャによる命令レベルの並列化
2. プロセスの並列化
2.1 疑似並列化
仕事(タスク)は、プログラム実行機能である1つの中央処理装置(CPU)によって、複数の処理を順番に1つずつ逐次処理されます。人に例えるなら、料理中に電話がかかってきた場合、その料理という仕事(タスク)が終わってから電話を受けることになります。その電話がどんなに緊急であっても、前に他のタスクがあればこれに即座に対応することができません。
マルチタスク動作をサポートするOSは、複数の逐次処理(タスク)単位で、CPUに個々に処理を割り当てて効率的かつ迅速に実行します。上述の料理と電話の例であれば、「料理を中断」「かかってきた電話に対応」「料理を再開」という実行環境を提供してくれます。
このOS機能により、CPUは休むことなく常に意味ある仕事(タスク)を実行し、重要度や緊急度に合わせて仕事(タスク)を切り替えることが可能になります。
実際は複数のタスクがCPUを時分割で使用するのですが、並列に動作しているように見えます。この見かけ上の並列性から、これを「疑似並列実行」と呼びます。
2.2 真の並列化
シングルCPU・マルチタスク実行環境は、真の並列実行環境ではありません。
この実行環境では、「料理をしながら同時に電話を受ける」のような同時並列動作はできません。
真の並列実行には、MIMD(Multiple Instuction Multiple Data strem)の実行マシンが必要になります。
MIMD実行とは、レストランでイメージすると、複数のスタッフが別々の仕事を同時に分担して行うといったところでしょうか。
並列処理では、複数のタスクを同時に実行できるため、処理速度を大幅に向上させることができます。ただし、並列処理を正しく活かすためには、「疑似並列実行」と「真の並列実行」の違いを理解することが重要です。
この連載の記事一覧
連載|組込みシステムにおけるマルチコア
- 第1回 基礎編 ―並列処理が必要になってきた背景
- 第2回 ハードウェア編 ―マルチCPUとマルチコア
- 第3回 並列化の限界とソフトウェアによる対策
- 第4回 並列化の実践と設計ポイント ―マルチコア活用
ここまで、直列化プロセスの仕組みとそのボトルネックについて見てきました。
それでは、実際に処理を高速化するためにどのように並列化が行われているのでしょうか?
第2回は、プロセスの並列化やマルチCPU/マルチコアといった具体的な並列化手法を解説します。