53Vol.

並列＆高速処理のためのマイコン・プログラミング
ロボットもキビキビ動く！ARMや並列プロセッサXMOSを例にしてインターフェース編集部 ●編

マルチコア時代
に備える!

第1章

第1章

並列処理の基本となるマルチタスク・プログラミングの基礎「同時に動く」ことによる効率化と設計の難しさ

並列処理の基本となるマルチタスク・プログラミングの基礎
五十嵐 仁
複数のタスクが同時に動作するマルチタスク OS は，複数の作業を同時に処理したり，リアルタイム性の要求される処理が容易に行えるなどのメリットがある．そのため，組み込み向け OS といえばマルチタスク OS といえるほど普及している．しかし，マルチタスク OS はシングル・タスク OS よりさまざまな要素を考慮しなければならない．資源の排他制御，優先順位，タスクの分割――これらの事項を把握して適切に設計する必要がある．そこ
で本章では，並列コンピューティングの基本であるマルチタスク・プログラミングについて学んでいく．

組み込みシステムの世界においても，マルチコア・プロ

で CD の音楽を聴きながら，Web サイトを閲覧して，ワー

セッサ対応の波が押し寄せてきています．その中でも，負プロ・ソフトウェアでレポートを書くことができます（図荷分散型の SMP（Symmetric Multi-processing ；対称型マ1.1）．このたとえでは，音楽再生ソフトウェアと Web ブ

ルチプロセッシング）に注目が集まり，SMP に対応した

ラウザ，ワープロ・ソフトウェアを同時に実行させている

CPU や OS が続々と登場しています．

ので，マルチタスク環境を利用して実現していることにな

しかし，単純にシングル・コア環境で開発してきたソフ

ります．

トウェアを SMP 環境で動作させれば，性能が上がるわけ

近年の OS では，パソコン用だけでなく，組み込み用のではありません．それどころか，正常に動作しない可能性

OS でもマルチタスクが標準となっています．複数の処理すらあるのです（コラム 1.1 を参照）．

を同時に行いたいという要求が高まっているためです．

マルチコア・プロセッサ環境では，複数の処理が完全に

それでは次に，マルチタスク・プログラミングがどのよ

並列に実行されます．そのため，ソフトウェアを正常に動うな原理で複数の処理を同時に実行しているかについて説作させるには，適切な排他・同期制御を行う必要がありま明します．

す．とは言っても，マルチコア対応のために，新しい特別● マルチタスクを実現する方法な技術が必要になるわけではありません．基本となるのは「マルチタスク・プログラミング」です．
そこで，本章ではマルチタスク・プログラミングの基礎

一番簡単にマルチタスクを実現する方法は，「タスクの数だけプロセッサを用意する」ことです．マルチタスクを実現したいコンピュータ・システムに，同時に実行するタについて説明していきます．

1.1

マルチタスク・プログラミングとは

かつてのパソコン向け OS はシングル・タスクでした．
同時に一つの処理しか行えず，複数の処理を行いたい場合
は，一つの処理が終了したあとで，次の処理に取り掛かるしかありませんでした．
これに対してマルチタスクとは，1 台のコンピュータ・システム（処理装置）で，同時に複数の処理（タスク）を並行して実行する機能のことです．例えば，1 台のパソコン

図 1.1 パソコンの環境では，マルチタスク・プログラミングは当たり前

9

9

第2章

第2章

組み込み OS で使われるマルチタスク技術の歴史

マルチタスクからマルチコアへの対応まで

組み込みOSで使われるマルチタスク技術の歴史
藤倉 俊幸
組み込み機器を動かす社会のインフラである組み込み OS．昔から存在するように錯覚するが，実はマイコンが普及した 1980 年代以降に登場したため，わずか 30 年の歴史しかない．はじめはモニタ・プログラム的な小さい OS が使われていたが，現在では Linux のような大規模な OS まで組み込み OS として使われている．
ここでは，組み込み OS
本章では，組み込み
OS を支えるマルチタスク関連技術を中心に，各を支えるマルチタスク関連技術を中心に，各OSOSの技術を見ていく．
の技術について見ていく．（編集部）

能，あるいは自慢の自社技術に固執した OS は，1990 年代

2.1

組み込み OS の誕生はマイクロプロセッサとともに後半には消えていった．OS の歴史は，技術だけでは語れない．
1990 年代に入ると組み込み製品も多様化し，それに対電気で動く最初のコンピュータが作られたのは 1940 年

応して新しいタイプの組み込み OS が利用されるように代である．1960 年代から 1970 年代になるとエアコンのなった．また，組み込み OS はどれも同じように成熟して効いた部屋に鎮座するコンピュータを限られた人が操作

OS そのものの差がなくなり，OS 本体よりも利用できるミするようになった．そして，米国 Intel 社の 8080 や米国

ドルウェアや開発環境の方が重要視されるようになった．

Motorola 社の 6800 などのマイクロプロセッサが 1974 年にアプリケーションの幅が広がって他社製品と通信する必登場して，組み込みシステムの歴史が始まった．このと要性が出てくると，特定のプロトコルを実装した共通のミ

き，同時に組み込み OS の歴史も始まった．

ドルウェアを利用した方が効率が良いのである．

1980 年代に入ると，組み込み OS の種類も増えてマルチ

また，オープン・ソース化やフリーの OS の出現により，

タスク環境を提供するための技術基盤が確立された．リア

従来のロイヤリティ・ベースのビジネス・モデルは成立しルタイム OS（RTOS）と組み込み OS がほぼ同義語の時代

なくなり，OS ベンダの数は減少していった．ビジネスとでもある．

しての OS も，この時代に終わったのかもしれない．1980

この時期の OS は，ほとんどアセンブラで書かれており

年代に確立されたマルチタスクやリアルタイム同期の技術

非常に性能が良かった．しかし，1980 年代後半からはは，アプリケーション中心に再構成されて利用された．

CPU の種類が増えて，各 OS は新しい CPU に早く対応す● OS はコンポーネントの一つになった

ることが市場から求められるようになり，移植性が重要視

2000 年代は多様化がさらに進み，肥大化した情報系組

され，C 言語による書き換えが行われた．この結果，カー

み込み機器向けのものや先祖返りのようなフットプリント

ネル内の割り込み禁止区間が増えて，基本的な性能は落ちの小さな制御用のものなどに分化が進んだ．また，OS はた．しかし一方では，プライオリティ・シーリングなどのすでにプラットホームを構成するコンポーネントの一つで複雑なアルゴリズムを実装できるようになった．

あり，マルチコア環境ではこれらの分化した複数の OS を

● 技術以外の要素が組み込み OS の命運を分けた

組み合わせて使用することも行われるようになった．

自社開発のコンパイラを使用している OS ベンダもあっ1980 年代に OS とともに登場した，タスクあるいはス

たが，移植性の点では GCC のようなオープンなコンパイラ

レッドという概念は，オブジェクト指向の考え方によってを利用した方が有利であった．このときの対応により，そモデル化されたアーキテクチャに取り込まれるようになっの後の各 OS の運命が決まったような気がする．基本的性

た．さらに，Android ではタスクはアクティブ化したアク

23

23

第3章

第3章

マルチコア，マルチプロセッサのハードウェア

キャッシュ管理の基本からハイパースレッドまで

マルチコア，マルチプロセッサのハードウェア中森 章
マルチプロセッサを実現するためには，単純にプロセッサを複数搭載すればよいというわけではない．複数プロセッ
サをバスに接続するだけでは，バスの奪い合いになり，思ったように性能が上がらない．また，共有メモリの排他制御なども問題になる．これらはプロセッサのハードウェアを工夫することで解決することが可能だ．ここでは，マルチコ
ア，マルチプロセッサから，ハイパースレッドまで，ハードウェア面の工夫について解説する．

CPU コアの開発では，製造プロセスを微細化する必要が3.1

性能向上にはマルチコア化が必然あり，トランジスタのスレッショルド電圧を低く抑えた結果，リーク電力（スタティック電力）が巨大になって使いものにならなくなるという事情があります．また，当然，動昨今，半導体メーカがマイクロプロセッサやマイクロコ

作周波数が上がれば，動作電力（ダイナミック電力）も周

ントローラを作るために使用する CPU コアの種類が，各波数に比例して上昇していくので，その影響も受けます．

企業ごとに淘汰されてきた感があります．また，ARM 社

これと同じような傾向は，組み込み制御の世界にも起きや MIPS Technologies 社といった CPU コアを提供する IPています．CPU コアを現実的な消費電力（2W 〜 3W 程度）

ベンダから CPU コアを買ってきて，そのまま組み込むとで動作させるには，動作周波数を 400MHz 〜 600MHz 程いうケースも増えてきました．

度に制限せざるを得ません．そこで，それ以上の性能向上

しかし，1980 年代には，各半導体メーカが CPU のさまを狙うにはマルチコア化が必然となってきます．

ざまなアーキテクチャを開発し，それを業界標準とするべとはいえ，CPU コアを二つ持ったからといって，2 倍のく躍起になっていました．そのような時代においても，性能が得られるとは限りません．各 CPU 間がお互いに協CPU 単体の性能向上はいつか限界に達すると予測されて調して動作する仕組みを作り込むことが必要です．それにおり，最終的には「マルチプロセッサが主流になっていくも増して，OS の手助けが必須となります．

のは必然」と考えられていました．

本章では，マルチコアのハードウェアに求められる最低
ふかん

冗談として，一つのプロセッサ内にマルチプロセッサ・限の基幹技術を俯瞰していきたいと思います．なお，マルシステムを構築する「1 チップ・マルチプロセッサ」という

チコアといっても，その実体はマルチプロセッサ・システ

言葉が話題になったものです．つまり，「マルチプロセッ

ムを 1 チップに集積しただけで，基幹技術はマルチプロ

サなのに一つのプロセッサ？」というのが言葉遊びのよう

セッサと同じです．以降では，典型的なマルチプロセッサに矛盾する感覚で興味深かったのです．

の基礎知識を紹介していきます．

しかし，この冗談が今や現実味を帯びてきました．一つのチップに集積する場合は，「マルチプロセッサ」という単

3.2

マルチプロセッサの構成

語はやはり違和感があるのか，「マルチコア」，「メニイ・コア」という言葉が使われています．マルチコアへの方向● マルチプロセッサの目的は全体的な処理時間の短縮

性を決定的にしたのは Intel 社ですが，最初は性能向上のマルチプロセッサとは，プロセッサが複数存在するシス手段というよりも，性能を維持しつつ消費電力を下げる手

テムのことです．ここで，各プロセッサにどのように処理段として提案されました．動作周波数が数 GHz を超えるさせるかによって，論点は微妙に異なります．

35

35

第4章

第4章

マルチプロセッサでプログラムを作成するためのアセンブリ命令

プロセッサ間の同期をソフトウェアで実現する方法

マルチプロセッサでプログラムを作成するためのアセンブリ命令
中森 章
マルチプロセッサ・システムを構築する際には，資源の排他制御をどのような手法で実現するのかが問題となる．近代的なプロセッサでは，排他制御を 1 命令で実現できるアセンブリ命令が用意されている．本章では，
これらのアセンブリ命令について解説する．

本章では，マルチプロセッサ間で同期を取るために用意話が横にそれましたが，ソフトウェア的には，排他制御されたアセンブリ言語の命令について解説します．また，のために，各共有資源に対して，1 対 1 に対応するロック命令だけにとどまらず，その使い方を知ることにより，資変数を用意します．つまり，ハード・ディスクには変数源の排他制御を実現する方法などについても解説します．

A，ディスプレイには変数 B，プリンタには変数 C といった具合です．ここで，ロック変数が 0 の場合はそれに対応

4.1

マルチプロセッサ・システム
における排他制御する資源が未使用，0 でない場合はそれに対する資源が使用中であることを示すものとします．
プロセスは早い者勝ちで，0 以外の値をロック変数に書

マルチプロセッサ・システムを構築する上では，いかにき込むことで，その資源を使用する権利を得ます．例えして排他制御を行うかが重要になります．純粋にソフト

ば，プリンタを使用したい場合，変数 C が 0 なら誰も使用

ウェアだけで排他制御を行うことも可能ですが，ハードしていないので使用可能，0 以外なら使用中なので待つ（まウェアによる支援があると，高速な排他制御（1 クロックたはあきらめる）といった処理になります．

〜数クロックで実行）が可能です．そして，現在のマルチ

初期の Linux では，共有資源ごとにロック変数を持つのプロセッサ，マルチコア CPU のほとんどがハードウェア

ではなく，ただ一つのロック変数で排他制御を実現してい的な排他制御機構を持ち，そのためのアセンブリ命令を備たそうです．つまり，ロック変数にアクセスできたプロセ

えています．

スは，すべての共有資源にアクセスできるようになるので● 同期のためのソフトウェア処理

す．こういう単純な制御でも，システム的には破たんしな

マルチプロセッサ・システムにおいては，共有バスがメい程度の実行性能が得られる（昔は得られていた？）のでイン・メモリ（共有メモリ）にアクセスする唯一のアクセス

しょうね．

手段です．メモリの排他制御は，バスの使用権を獲得した● テスト・アンド・セットによる排他制御

プロセッサがメモリ・アクセスを独占し，ほかを閉め出せ

排他制御を実現する最も単純な処理が，「テスト・アンばよいのです．この処理は，不可分（アトミック）なスワッ

ド・セット」です．これは，ロック変数を読み込み，そのプ命令（データ交換命令）があれば簡単に実現できます．

値が 0 ならそこに 1（または 0 以外の値）を書き込みます．

不可分とは，あるプロセスがメモリにアクセスしている間

ロック変数が 0 でなければ，書き込みは行いません．通常，に，ほかのプロセッサからのメモリ・アクセスがないことを

ロック変数の前の値がリードの結果として返されるので，いいます．あるいは，ほかのプロセスがアクセスしようとしそれが 0 ならロックが成功したことを示します．0 でなけてもそれが禁止されている状態をいいます．実際には，（バ

ればロックは失敗したことになります（つまり，ほかのプス）ロックという端子を活性化して外部回路に通知し，ハーロセスが使用中であることを意味する）．

ドウェア的にほかのプロセッサのアクセスを禁止します．

図 4.1 に，テスト・アンド・セットを利用した相互排除

49

49

第5章

第5章

マルチコア環境におけるタスク動作の検証方法

モデル検査ツールを利用してタスク設計を検証する

マルチコア環境におけるタスク動作の検証方法
藤倉 俊幸
マルチタスク OS で動作するタスクは，割り込みなどの外的要因によってタスクの実行順序が変化し，それがバグの要因となることがある．タスクの実行順序を把握するためには，実行順序を全て洗い出し，ステー
ト・マシンとして記述するという方法がある．従来は手動でこの作業を行っていたが，モデル検査ツール LTSAを使用することにより，ステート・マシンを自動出力できる．本章では，形式検証を使ったマルチプロセッサ環境で動作するタスクの検証について解説する．

モデル検査ツールを使用したタスク設計の検証について

どです．

は，参考文献（5.1）の 第 22 章以降で説明したことがありま

モデルと検査でモデル検査になるわけですが，要求や設す．本章では，その内容を簡単に解説し，マルチプロセッ

計を対象とする場合には，要求分析を行う人や設計を行う

サ環境やマルチコア環境にどのように適用させるのかなど

人が全ての可能な動きを把握できることには重要な意味がについて，モデル検査にあまりなじみのない人でも分かるあります．つまり，検査なしでも有効な使い道があります．

ように説明します．

考えていることの全体を把握できることが重要なのです．
そこで，ここでは検査にはあまり立ち入らずに，まず

5.1

モデル検査とは「モデルとはどんなものか」，「全ての可能な動きとは何か」について詳しく説明します．

● 数学的な手法をソフトウェア開発に取り入れる
形式手法（Formal Method）と呼ばれる手法があります．
形式手法は，「数学を積極的に使ってソフトウェアを開発
していこう！」という心意気に対して付けられた名前です．
手法と言うよりは，アプローチあるいは手法群と言った方が良いかもしれません．歴史は古く，コンピュータが使われ始めた頃から研究されていました．研究はされていまし● LTSA を使ってボールを取り出す問題を解く
非常に簡単なサンプルで考えてみましょう．高校などで習う順列組み合わせ問題です．
つぼの中に A というボールが 3 個と B というボー
ルが 2 個入っているとする．ここから 3 個のボールを取り出すときの取り方は何通りあるか？

たが，「難しすぎる」，「実際に使うにはコストが掛かりす

これは，順列組み合わせ問題の公式に当てはめれば，7ぎる」などの理由から，ずっと日の目を見ない存在でした．

通りであることが分かります．しかし，具体的にどのよう

しかし，この形式手法と呼ばれる一群の手法の中に，「モな取り出し方が可能なのかは，公式を見ても分かりませ

デル検査」と呼ばれる分野があり，最近になって開発現場

ん．これをモデル検査ツールである LTSA（Labelledで利用され始めています．

Transition System Analyser）を使って解くと，具体的なモデル検査では，検査対象になる要求仕様や設計仕様，

7 通りの動作パターンを作り出すことができます．

実際のコードなどから，動きや操作に関する情報を抽出し

図 5.1 に，実際に LTSA のモデルと生成した動作パターてモデルを作ります．このモデルは，全ての可能な動きのンを示します．動作パターンは，実際はつぼから A か B をパターンを生成します．全ての可能な動きのパターンが生取り出す順で示すべきですが，ここではその取り出し順を成できたら，次に，一つ一つの動きを検査します．例え生成するステート・マシンで示します．モデルと言っていば，イベントの順番や特定のイベントが発生しているかな

るのは，通常このステート・マシンのことです．A= …，

57

57

第6章

第6章

100CPU を用いた大規模マルチプロセッシング・システムの構築

QNXを用いた分散環境の構築

100CPUを用いた大規模マルチ
プロセッシング・システムの構築
岡澤 幸一
8CPU 程度のマルチプロセッサであれば，従来のマルチタスク技術の延長でシステムを構築できた．しかし，それより大規模な，例えば 100CPU などのシステムになると，通常の構成とは異なるアプローチが必要になる．
本章では，マイクロカーネル・アーキテクチャを採用した OS「QNX」を例に，分散環境とは何かについて解説する．また，大規模分散環境の構築事例も紹介する．

CPU のクロック速度の向上が限界に達しつつあるにもが「並列」であるといえます．一方，ソフトウェアやシステかかわらず，ユーザからは高性能化や低消費電力化の要求

ムの立場から，「実際のソフトウェア・コードを分散させが高まっています．それに対する処方せんとして，ハードる方法や，その結果できあがるシステム」に対して「分散」

ウェア・ベンダにより提供されている技術がマルチコアでシステムと名付けられます．

あると筆者は考えます．
マルチコア化したシステムに対して，従来のアプリケー
ションがそのまま動作することが要求されます．また，マつまり「並列」化したハードウェア・システム環境で，「分散」化したシステムを実現すること，これが本章のテー
マになります．

ルチコアにより動作する CPU コンテキストが複数あるため，同期制御や排他制御という問題が浮上してきます．マ

6.2

ハードウェアの視点 ――「並列」

ルチコア化とは，ソフトウェアの課題と言っても過言ではありません．

ソフトウェアの観点から疑似「並列」を実現する OS につ本章では，マルチコアを始めとした分散システムの分類

いて考えてみる必要がありますが，ここではまず，実際にについて解説します．ハードウェア・システムは，それぞ並列性を実現するためのハードウェア・システムの技法かれの CPU が独立したメモリと I/O 資源を持ち，高速通信

ら見ていきます．

路で接続された並列プロセッサを用いた構成とします．

CPU を複数使い，要求される処理を分割してシステム

ターゲットとなるプロセッサの数は，数十個〜数百個を想として構築する手法は，要求される処理の分割のタイプに定しています．

よって分類されます．

● 専用サブプロセッサ（ジョブ実行型）

6.1

並列と分散

専用サブプロセッサは，データ処理の視点が中心となる
アーキテクチャといえます．画像処理や信号処理などを行

そもそも「並列」と「分散」という用語は同じでしょうか．
普段は何とはなしに使っているかもしれません．まず，背メイン・プロセッサ

共有メモリ

専用サブプロセッサ

景などを整理してみます．
（a）ハードウェア構成

簡単に，二つの言葉が含まれている用語を挙げてみます．
「並列」コンピュータ，「並列」処理，超「並列」，…

画像取り込み画像処理要求「分散」ファイル・システム，「分散」システム，…

処理結果表示

画像処理結果これらの例から言うと，走行するハードウェア側から，「複数の環境で同時に走行すること」に対して語られる言葉

画像処理（b）ソフトウェア構成

図 6.1 専用サブプロセッサの構成

71

71

第7章

第7章

組み込みマルチコアにおける SMP と AMP の比較タスクの CPU コアへの割り当ての研究

組み込みマルチコアにおけるSMP と AMP の比較
柴下 哲
マルチコア環境には，すべての CPU に公平に処理（タスク）を割り当てる SMP 方式と，特定の CPU に特定の処理を割り当てる AMP 方式がある．一般的に，パソコンでは SMP が採用されることが多いが，組み込み機器
では AMP 方式が多い．本章では AMP 方式を採用した時の動作をツールを用いて解析する．

2010 年から 2 年以内の次期製品に搭載予定の CPU の数を7.1

組み込みマルチコアの現状

表しています．特徴的なのは，シングル・コアの製品が30.1% と半減していることです．マルチプロセッサの比率

高機能化と低消費電力化，および世界中を視野に入れたはほとんど変わらないので，減少した 30％は，マルチコ

グローバルな製品展開に対応する必要性が年々高まっていアとマルチコアを含む複数の CPU チップへ移動していまます．最初の二つの要求はハードウェアでも対応可能です

す．そのためマルチコアを使う予定が合計で約 40％となっが，最後の要求を満たすためには，それぞれの国や地域ごているのです．

とに異なる要望に応える必要があるため，ソフトウェアに

このように，マルチコアの使用が組み込み製品でもポよる対応が必須です．これらを満たす解として，かなり前

ピュラになってきており，本章ではその問題点と注意点をからマルチコア化が提唱されてきており，実際にさまざま事例を基に説明します．

な分野で使われるようになりました．
マルチコアに関する興味深いデータとして，米国 VDC
Research 社の調査結果があります．図 7.1 は，2010 年にお

7.2

既にマルチスレッド化しているので OK なのか？

ける製品に搭載されている CPU の数を表していますが，
シングル・コアのケースが 63.6% と大半を占めています．

シングル・コアでも，組み込み Linux や VxWorks のよう

ここで，マルチプロセッサとは複数の CPU チップを，マなリッチな RTOS を使っている場合は，既にプログラムを

ルチコアとは 1 チップに複数のコアを搭載しているというマルチスレッド化しているケースも多いことでしょう．そことです．図を見れば分かるように，マルチコアを使用しの場合，OS がマルチコアに対応すれば，それほど大した作ている比率は 9.6% とまだ少数派です．これに対し図 7.2 は，業をしなくても十分速くなると思っている方もいますが，マルチコア＆
マルチプロセッサ
5.4％
マルチコア
9.6％
シングル・コア63.6％

わからない，
もしくは未決定8.5％
マルチコア＆
マルチプロセッサ
19.4％

シングル・コア30.1％

マルチプロセッサ
21.4％

マルチコア
21.4％

図 7.1

図 7.2 2010 年 か ら 2 年 以 内 の 次 期 製 品 に 搭 載 が 予 定 さ れ て い る
CPU の数2010 年時点の製品に搭載されている CPU の数

出展：VDC Research s 2010 Embedded Engineering Survey

マルチプロセッサ
20.6％

81

81

第8章

第8章

トランスピュータの流れを汲む並列プロセッサ XMOS の概要

RTOSなしに並列処理が可能で，しかも検証もできる

トランスピュータの流れを汲む
並列プロセッサXMOSの概要
小山尾 登
現在，並列動作をするプログラムを書くためにはマルチタスク OS を使い，既存の C 言語がそのまま使われている．1990 年ごろに注目を集めたトランスピュータは，プログラミング言語に Occam を使用することで言語レベルから並列動作をサポートするだけでなく，動作を数学的に検証することが可能であった．そのトランス
ピュータが形を変え，XMOS として入手できるようになった．本章では，この XMOS について解説する．

環境などが高価であったのも普及しなかった理由かもしれ8.1

トランスピュータの復活

ない．
それが XMOS（1）という名前で復活した．シングル・コア

昔々，Inmos 社のトランスピュータ（Transputer）というの XS1-L1 プロセッサは $7.5，コンパイラなどを含めた開発

プロセッサがあった．トランスピュータは Occam という言

環境は無償である．ちなみに，XMOS は会社の名前であり，語でプログラミングされた．Occam には，モデル検査で有XS1-xx はプロセッサの名前，XC-n はボードの名前になって名になった CSP（Communication Sequential Processes）といる．例外は，XS1-G という弁当箱型の開発キットである．

いう数学的背景があり，形式手法の走りでもあった．

XMOS を使用すれば，FPGA 並みの処理をソフトウェ

当時，「bit」という雑誌があり，トランスピュータの紹アで実現できる．さらに，RTOS なしで並列処理も実現で介記事が掲載されていた．もちろん Interface 誌にも関連

きる．割り込みハンドラという概念もなく，イベント・ド

記事が紹介されていた．1990 年ごろのことである．斬新なリブンで直接ソフトウェアが動く…などといきなり言われコンセプトを持ち超並列マシンなどと呼ばれることもあってもイメージできないぐらいに，今でも斬新さは衰えてい（8）たが，いつの間にか姿を消してしまった ．Inmos 社は英ない．

国の会社だったが，英国の政権交代の際に政策が変わって

また，10ns 〜 20ns のオーダでアプリケーション・ソフ

売却されてしまったという噂も流れた．また，当時は開発トウェアが外部イベントを認識できるので，十数μs オー
ダのコンテキスト・スイッチや割り込み遅延がいつ起こる

t 写真 8.1
XMOS を搭載した XC-1 評価
ボードの外観
ボタンD
ボタンC
スピーカ
ボタンB
ボタンA

s 図 8.1
XC-1 評価ボードに搭載されている
部品とデバイス

Prototyping area
0.1"スルー・ホール

16-way 0.1"
IDCヘッダ

クロック
LED

ボタン
LED

89

89

第9章

第9章

並列プロセッサ XMOS の検証環境 PAT

RTOSなしに並列処理が可能で，しかも検証もできる

並列プロセッサXMOSの検証環境PAT
小山尾 登
第 8 章では，トランスピュータの流れを汲む並列プロセッサ XMOS の概要について解説した．XMOS の特徴の一つに，プログラミング言語 XC の言語仕様が検証に使うモデルと近いので，検証が容易であることが挙げられる．そこで本章では，XC に近い検証環境として PAT を取り上げ，検証を行ってみる．

きない．すなわち，並列処理の設計をどうすれば行えるか

9.1

XMOS の検証環境を検討するという問題である．
これは，XMOS に限らず RTOS 下のタスク間の関係や

第 8 章では，XMOS の特徴について説明した．その中のRTOS を使用しない場合の割り込みハンドラと main 関数

一つは，検証モデルとソース・コードが非常に近い関係にとの関係にも当てはまる．

あり，モデルをほぼそのまま実行できることだと述べた．

● 設計したら，まず検証したい

その例として，定番の「哲学者の食事」問題をプログラミン

設計したら，すぐにソース・コードにするのではなく，グして対応する LTSA（Labelled Transition Analyser）モ

まず検証することが並列性の高いアプリケーションを作る

デルと比較してみた．

場合には必要である（図 9.1）．それは，デッドロックやラ

しかし，LTSA と XMOS のプログラミング言語である

イブロックは，ソース・コードになってしまった設計をいXC との間には，まだギャップがある．それは，変数の扱

くら見ていてもわからないからである．すなわち，設計環

いとチャネルによる通信である．そこで，もう少し XC に

境と検証環境は，表裏一体の関係になければならない．

（1）を近い検証環境として PAT（Process Analysis ToolKit）

開発環境は IDE（Integrated Development Environment）

使ってみようと思う．元祖トランスピュータ系の検証ツー

あるいは統合開発環境を指し，開発全体をサポートするよルとして FDR2（2）があるが，アカデミックな用途以外は有うな印象を受けるが，実体は編集・コンパイル・デバッグ

償である．その点，PAT は今のところフリーである．

の狭いサイクルを効率良く回すツール・セットであり，た

それから，XMOS の特徴を活かす設計方法についても説明が必要だと思う．現在の組み込みソフトウェアのほとんどは，共有変数に強く依存した構造になっているが，こいそうな名前が付いている割には小さいことしかやっていない．
現状の IDE は，統合実装支援環境と呼ぶのが正しいだろの考え方を改めないと XMOS の特徴を活かした設計はで設計のための理論
理論

検証のための
ツール

プログラム
記述

実行環境

Occam

Transputer

JCSP（Java）
C++CSPJavaVM
Windows
Linux…

XC

XMOS

並行システムを表現して解析するための理論
FDR2
CSP

設計・検証

実装

理論に基づく並行システムの設計と検証（モデル検査）検証結果がそのまま動く実装環境

図 9.1 開発の流れ

PAT
LTSA

図 9.2 設計・検証環境の組み合わせ99

99

第 10 章

第 10 章PUPPY 倒立振子を並列プロセッサ XMOS で実現する

SH-2版をXMOSへ移植する

PUPPY倒立振子を並列プロセッサXMOSで実現する
小山尾 登，CSP研究会
CSP（Communicating Sequential Processes）によるプログラミングが可能な並列プロセッサ XMOS で倒立振子を実現する．
SH-2 とリアルタイム OS（RTOS）を用いて実現した既存の倒立振子を XMOS の並列に動作するハードウェ
ア・スレッドへ移植する．

● オリジナルの PUPPY

10.1

ET ロボコン 2009 で使用された MathWorks（2）によるも倒立振子 PUPPYのは RTOS とサーボ・モータを使ったもので，道具立てが大げさな割に倒立制御モジュールはブラック・ボックスに● XMOS で倒立振子を実現する
2009 年に開催された ET ロボコン注 1 の題材は，倒立振子
注2なっている．XMOS の特徴は，ハードに近い FPGA で行のような市販の倒うような制御も C 言語に近い XC 言語で記述できる点にあ

注4
で立振子もある．Embedded Technology 2009（ET2009）

る．同じ倒立ロボットでも，ET ロボコンは ON/OFF 制御

は，XMOS ブースで北斗電子の倒立振子ロボット PUPPYのモデリングを楽しむようなイベントであり，コンセプトだった．PUPPYや Beauto Balancer

注3

注5

がデモン

が異なる．そのため，倒立振子の制御は単純な ON/OFF

ストレーション（注 5 のリンク先に動画あり）を行っていた．

制御ではなく，制御工学技術者と組み込みソフトウェア技の CPU を XMOS に載せ替えてファルクウェア

倒立振子を実現するには，単なるライン・トレースとは術者の境界領域が混ざったようなところがある．

違って制御工学やリアルタイム制御の知識が必要になる．

PUPPY は，RTOS なしの DC モータ制御である．

本章では，ET2009 でデモンストレーションしていたもの

Beauto Balancer は PUPPY と同じような製品だが，H8 にとは別に，CSP 研究会に参加している北海道職業能力開発

最適化されていて CPU だけを XMOS に変更するのが大変

大学校の中原 博史氏が開発した XMOS 版 PUPPY をベー
ロータリ・
エンコーダ

スにして，XMOS プログラミングの特徴を説明する．

DIPスイッチ LED

本章で紹介するソフトウェアは，中原氏が北斗電子の厚意により H8 プロセッサ用の PUPPY プログラムを利用してA相
B相開発したものである．H8 プロセッサ用と XMOS プログラ
ムとの対応がわかりやすいように，基本的な関数名をそのまま使用している．また，PUPPY については CPU を H8 から SH-2 に変更した解説記事（1）がある．公開されている SH-2
版のソース・コードを XMOS 版のリファレンスとする．
注 1 ： http://www.etrobo.jp/ETROBO2009/
注 2 ： http://www.hokutodenshi.co.jp/7/PUPPY.htm
注 3 ：http://www.vstone.co.jp/top/products/robot/beauto/
bindex.html
注 4 ： http://www.jasa.or.jp/et/
注 5 ： http://fulcware.jp/

XCスレッドCount
Status

外部イベント
入力スレッドgyro
acrobat

ジャイロAD

通常の
スレッド

目標電流
（10ms）

Current（200μs）

チャネル 外部イベント
前進

電流AD
Control
Current（200μs）

後進
PWM

PWM
（5μs）

入出力スレッド
セレクト入力チャネル

図 10.1 XMOS 版 PUPPY アーキテクチャ

107

107

第 11 章

第 11 章XMOS によるフル・カラー LED Cube 実験

並列処理プロセッサ XMOS による並列処理の実例

XMOS による
フル・カラー LED Cube 実験
小山尾 登
本章では，並列処理プロセッサ XMOS で LED Cube を制御する実験を行ってみる．通常の CPU では，このような実時間・並列処理はマルチタスク OS などで実現する．これに対して XMOS は，プロセッサ自身が並列処理機能を持ち，ハードウェア並列処理が可能である．最近の XMOS は，タイミング・アナライザやレポート機能が充実しているので，これらについても見ていこう．

筆者が所属する CSP 研究会注 1 の第 6 回で，北海道職業能である（1）．

力開発大学校の中原 博史氏からフル・カラー LED Cube

ここでは，XMOS の中からシングル・コアの XS-L1（3）（写真 11.1）を XMOS で制御する発表があった．本章では，というチップを使用する．これは，8 スレッドまで同時にこの発表を元に，フル・カラー LED Cube のドライバ製

利用できる．XMOS のプログラムには割り込みハンドラ

作を検討してみる．また，その過程で XMOS の並列性とという概念は存在せず，スレッドが直接イベント・ドリブ

高速性を利用した制御方法およびハードウェア制約をソフンで動作するという特徴がある．あるいは逆に，「並列動トウェアでカバーする方法について説明する．

作する Wait 可能な割り込みハンドラだけでできている」といってもよいかもしれない．

11.1

C 言語を並列化拡張した XC と呼ばれる言語によってプXMOS とフル・カラー LED Cube

ログラミングを行う．無償の統合開発環境が提供されていてダウンロードすれば，ソフトウェア開発も可能になる（4）．

● XMOS は並列処理をソフトウェアで記述できる● フル・カラー LED Cube と JTAG アダプタXMOS は，リアルタイム OS（RTOS）なしに FPGA 並み

使用するハードウェアは，北海道職業能力開発大学校との時間領域の並列処理をソフトウェアで記述できるチップ

北斗電子が開発した XMOS 学習キット（XMOS 汎用ボー
ドと学習ボードから構成される）を使用している．学習◀写真 11.1
フル・カラー LED Cube
赤，緑，青の 3 原色 LED（フル・カ
ラー LED）を 4 × 4 × 4 の立体格子状に配置・接続する．

▶写真 11.2
XMOS 汎用ボード（上）と XTAG2（下）注 1：形式手法を含めた CSP（Communicating Sequential Processes）モデル
を普及させるために設立された研究会．
http://www.csp-consortium.org/index.html

115

115

このPDFは，CQ出版社発売の「並列 &の 部 本です．
内容・購
内容
購
法

速処理のためのマイコン・プログラミング」

法などにつきましては以下のホームページをご覧下さい．
http://shop.cqpub.co.jp/hanbai/books/49/49811.htm
http://www.cqpub.co.jp/order.htm