連載
» 2012年04月10日 13時17分 UPDATE

ココが変わったWindows Embedded Compact 7(1):WEC7で強化された機能とCE6.0との比較 (1/3)

「Windows Embedded Compact 7」は、従来のWindows Embedded CE 6.0と何が、どのように違うのか。あらためて強化された代表的な機能と、Windows Embedded CE 6.0との比較に基づいた違いについて詳しく解説する。

[杉本拓也(株式会社富士通ソフトウェアテクノロジーズ),@IT MONOist]

 以前お届けした特集記事「最新! Windows Embedded Compact 7の概要」では、Windows Embedded Compact 7のCommunity Technology Preview(以下、CTP)版を基に、新しく追加された機能や開発環境にフォーカスして、その概要を紹介しました。

 その後、2011年3月にWindows Embedded Compact 7の製品版がリリースされ(関連記事)、少し時間がたってしまいましたが……、あらためて本稿では「最新! Windows Embedded Compact 7の概要」で紹介し切れなかった新機能の詳細と、前バージョンであるWindows Embedded CE 6.0との比較に基づいた違いを見ていきたいと思います。

Windows Embedded Compact 7で強化された機能とは?

 Windows Embedded CE 6.0と比較し、Windows Embedded Compact 7ではどのような機能面での強化がなされているのでしょうか。主なものを以降で順番に紹介していきます。

新しいSKU(Stock Keeping Unit)

 SKU(Stock Keeping Unit)は、搭載するOSの機能によってOSライセンスの価格が異なります。開発者は提供する機能に応じて必要なOSコンポーネントを選択し、SKUを決める必要があります(表1)。

SKU名 概要・用途
C7P Windows Embedded Compact 7で可能な全てのコンポーネントを含む
C7K ネットワークプロジェクター向け機能
C7G コンシューマデバイス向け機能
C7NR PND向け機能
C7E
表1 「Windows Embedded Compact 7」のSKU(※2012年3月16日現在。詳細については販売代理店へお問い合わせください)

 各SKUに含まれるOSコンポーネントについては、以下のWebサイトで確認できます。

参考リンク:
Operating System Components

コンパイラの強化による演算処理の高速化

 Windows Embedded Compact 7におけるコンパイラの強化は、開発者の利便性に大きな変化をもたらしました。新しいコンパイラでは、Vector Floating Point(VFP)およびNEON、Symmetric Multiprocessing(SMP)へのサポートがなされました。また、これまでのWindows Embedded CE 6.0 R3では、コンパイルされた結果がARMv4コア向けの命令セットであったのに対し、Windows Embedded Compact 7ではARMv7命令セットでのコンパイルが可能となっています。


 つまり、Windows Embedded CE 6.0上で動作させていたコードを、Windows Embedded Compact 7でコンパイルし直すだけで、CPUの命令セットを効率的に利用できるようになります。そして、これまで単純にCPUクロックに頼っていたアプリケーションの性能を、飛躍的に向上させることとなります。

実験:Windows Embedded CE 6.0とWindows Embedded Compact 7で演算処理がどれくらい高速化されたのか?

 実際に同じデバイスを用い、まったく同じ演算処理をWindows Embedded Compact 7とWindows Embedded CE 6.0上で実装し、その処理時間を比較してみたいと思います。

ターゲットデバイスは、ディジ インターナショナル社の「ConnectCore for i.MX51 JumpStart Kits」を利用します。このキットに付属する評価ボードには、ディジ インターナショナル社の「ConnectCore i.MX51」が搭載されています。
ConnectCore i.MX51には、ARM Cortex-A8コアとLCD、タッチパネル、SDカードスロット、無線/有線LAN、シリアルポート、USBポートなど、よく利用されるペリフェラルが一通り実装されています。
また、ソフトウェアは、Windows Embedded Compact 7とWindows Embedded CE 6.0のBSPが用意されており、キットに付属している評価ボードを利用して、OSの評価ができるようになっています。


参考:ディジ インターナショナル社「ConnectCore for i.MX51 JumpStart Kits」



 Windows Embedded Compact 7とWindows Embedded CE 6.0、それぞれのOSイメージを作成し、サブプロジェクトとしてアプリケーションを追加します。

 今回は、アプリケーションに以下のような演算処理を実装しました。なお、測定はQueryPerformanceCounterを利用しています。QueryPerformanceCounterは、ハードウェアタイマーのカウント値を取得するAPIで高い精度が求められる計測などに用いられます。

LARGE_INTEGER freq, startcount, endcount;
double result = 0;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&startcount);
//測定用のコード。乱数発生と浮動小数点演算
for(int i = 0; i < 10000; i++)
{
        a=rand();
        b=rand();
        c=rand();
        d=rand();
        e = a / b;
        f = c / d;
        g = e / f;
}
QueryPerformanceCounter(&endcount);
result = (double)(endcount.QuadPart - startcount.QuadPart) / freq.QuadPart * 1000000;

 測定結果は、以下の通りです。

測定した結果 Windows Embedded CE 6.0:約223μsec / Windows Embedded Compact 7:約3μsec 
※この結果は、3回計測した平均値となります

 今回の実験から、Windows Embedded Compact 7の処理がいかに高速かが分かると思います。命令セットの適正化、VFPおよびNEONの効果が出ているといってよいでしょう。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.