既存のソフトウェア資産をマルチコア環境で生かす

RPC技術を利用した関数並列型
マルチコア・プログラミング
マルチコアCPUの性能を引き出すためには，マルチコア対応OSの導入に加えて，アプリケーション側のタスク分割などの対応が必要となる．本稿で提案されているAsynchronous Remote Procedure Call
（ARPC）
ベースのプログラミング・モデルでは，OSやメイン関数はメインのプロセッサで，そこから呼び出される関数はサブプロセッサで動作させるという方法を採る．
これにより，既存のソフトウェアをマルチコアに対応させている．

（編集部）

須賀 敦浩， 鈴木 貴久
プロセッサには，サーバ系で使われるものから機器に組みが製品の機能や性能を決めていました．ソフトウェアは，込まれるものまで，さまざまな種類があります．筆者らは，機能を実現するための制御などの補助的な役割を担っていプロセッサをさまざまな角度から研究しており，組み込み向ました．ハードウェアとしての LSI は，機能および性能がけの VLIW アーキテクチャのメディア・プロセッサ，およカタログ・スペックから分かるので，設計の初期段階で機， 2）
びそのマルチコア版を開発しました（1）（．最近では機器能や性能を議論できたのです．

メーカの開発者が使いやすいプロセッサのアーキテクチャ

ところが，最近では組み込みプロセッサの性能が向上しについて，プログラミング言語からハードウェアまで幅広たりマルチコアが使用できるようになり，システム製品にく取り組んでいます．

おいて，ソフトウェアが機能および性能を決める重要な要

マルチコア・プロセッサを使いこなすためには，ハード因になりつつあります．製品の機能や性能について，ハーウェアだけでなくソフトウェアからのアプローチも必要でドウェアだけでは決定できず，ソフトウェアを改造するのす．本稿では，組み込みシステムの現状について概観したか，従来のものと互換にするのかなどの方針を第一に考えあと，筆者らの会社の研究部門と半導体事業部門が一体とる必要があります．

なって開発している，関数並列型マルチコア・プログラミ

このような状況下で製品を開発するためには，「ソフトウェア資産の継承」，「適切な価格と機能の実現」，「短期間ングについて解説します．

での製品開発」という課題を解決する必要があります．ソ1

フトウェア資産の継承というのは，製品開発を進める上組み込みシステムの現状で，最も重要な問題です．ソフトウェア資産の継承についソフトウェア資産の継承性

かつて組み込みシステムの製品開発では，ハードウェアる必要がなく，なおかつコア数に応じた性能向上が可能で機能分散スケーラブルなマルチコア技術が重要であると考えます．

AMP
ソフトウェア資産の継承性あり CPU DSP
各コアには静的割り付け
割り 込み
プログラムの並列化必須
各コアには動的割り付け
負荷分散
シングル・コアSMPCPU
CPU CPUCPU

シングルCPUCPU

並列プログラミング化

関数ては，コア数が変化しても既存のソフトウェアに手を加えキャッシュ
スレッド

タスク

2

マルチコアと並列プログラミング

まず，マルチコア・プロセッサと並列プログラミングについて説明します．
図 1 では，シングル・コア上のソフトウェアを原点とし，横軸にマルチコア適用度，縦軸にソフトウェア資産の継承性をとっています．ここで言うマルチコア適用度とは，マAMP: Asymmetric Multiple Processor
SMP: Symmetric Multiple Processor

マルチコア適用度

ルチコアの性能をどれだけ引き出せているかの指標です．

図 1 並列プログラミングとマルチコア適用度

146 KEYWORD ―― マルチコア，マルチプロセッサ，RPC（Remote Procedure Call），ARPC

Dec. 2007

RPC技術を利用した関数並列型
マルチコア・プログラミング● SMP と AMP の 2 種類があるていた場合でも，タスクを実行する際の優先度を，暗黙のマルチコアの技術として，コアのアーキテクチャやコア優先度で使用している記述から明示的に指定する記述に変からアクセスするリソースが対称的に配置される SMP

更する必要があります．その結果，デッドロックが起きる（Symmetric Multiple Processor）型と，SMP の制約を受け可能性もあります．

ない非対称な AMP（Asymmetric Multiple Processor）型があります．
AMP 型では，それぞれのコアが得意とするソフトウェ

3

関数並列型
マルチコア・プログラミング

アを実行します．各コアにこれまで開発したソフトウェア（例えば画像処理ソフトウェアや音声処理用ソフトウェア筆者らは，組み込みマルチコア・システムを考えた場合になど）をそのまま搭載できるので，ソフトウェア資産の継最も簡単にソフトウェアを記述できる手法について考えまし承性を保てます．しかし，各コアへの割り付けはプログラた．その結果，動的負荷分散機能を搭載した AMP 型プロマが静的に行うので，コアの数を変更する場合にはプログセッサ・プラットホームが組み込みマルチコア・システム向ラムの変更が必要です．つまり，ソフトウェアはプロセッけの並列プログラミングとして最も適切であるという結論にサの種類，およびコアの数などの物理制約に依存したもの達しました．これは，クライアント-サーバ間でよく使われとなります．

（3）ている遠隔手続き呼び出し（RPC，下掲のコラム 1 を参照）

一方の SMP 型は，実行するスレッドがどのプロセッサ・の技術をチップ内のコア間に適用するものです．

コアで実行するのかを OS などが動的に割り付けます．そコア間の通信を実現するプログラミング手法としては，の反面，プログラムの並列化が必須となります．C 言語主

Asynchronous Remote Procedure Call（ARPC）ベースの流の組み込みシステム・ソフトウェアにおいて，プログラプログラミング手法を用います．このプログラミング手法

ムが広域変数やポインタを多用している場合，並列化に時では，シングル・コア上のソフトウェア資産を少ない労力間がかかります．広域変数やポインタを使ったプログラムで並列プログラム化することが可能です．

を解析してマルチコアで動作できるような機能を搭載した● ARPC を用いたプログラミングコンパイラは，なかなか商用化されません．また，既にプログラムがタスクを用いてシングル・コア向けに分割されそれでは，ARPC を用いたマルチコア・プログラミン
グ・モデルについて説明しましょう．

コラム 1 RPC とはRPC（Remote Procedure Call）は通常の関数呼び出しと同した IDL ファイルを作成します．

じ形式で異なるマシン間で通信するための技術です．もともこの IDL ファイルを IDL コンパイラにかけると，ネットワーとは分散コンピューティングの分野においてネットワークでクを介してこの関数を呼び出すためのコードが生成されます．

接続された異なるマシン間の通信に利用されてきました．

煩雑なネットワーク・コードも IDL コンパイラが生成してく

RPC を利用するとコンピュータ間の通信プログラムが簡単に作成できるため，古くから UNIX などでは NIS（Networkれるので，これを利用するとコンピュータ間で通信を行うプログラムを簡単に開発できます．

Information System ；複数マシン間におけるユーザの一括管理

RPC には，別のマシンに関数を呼び出した後，関数の実などで利用される）や NFS（Network File System ；複数マシ行が完了するまで待ち続ける同期型と，別のマシンに関数をン間におけるファイル共有に利用される）などで使われてきま呼び出した後も現在の処理を継続する非同期型（ARPC ：した．

Asynchronous RPC）の 2 種類があります．今回はこの ARPCRPC を利用したプログラミングでは，ILD コンパイラを技術を利用してマルチコアのコア間通信を実現しました．

利 用 し て 開 発 を 行 い ま す ． IDL と は Interface Definition

この場合，IDL コンパイラがネットワーク・コードの代わLanguage（インターフェース定義言語）の略です．開発者がりにコア間通信の処理を生成することで，煩雑なコア間通信

RPC で呼び出す関数を作成すると，その関数のインターの処理を隠ぺいすることが可能となります．

フェース情報として，関数名や引き数の型などの情報を記述

Dec. 2007

147