ATOM Processor Considerations
ネットブック・プラットフォームへ移植する場合、開発者は利用可能なリソースが大きく進歩していること、特にインテル® Atom™ プロセッサーの実力に気付くでしょう。そして、ほとんどの開発者は、"これらすべてを活用するにはどうしたら良いか?” と考えることでしょう。ここでは、この新しいプロセッサーのパフォーマンスを活用するために考慮すべきいくつかの重要な側面について説明します。
600MHz ぐらいの ARM*/RISC プロセッサーが組込まれた携帯電話と比べると、インテル® Atom™ プロセッサーはクロック速度が速いだけでなく、一次処理能力や低消費電力など、ユーザーに喜ばれる多くの機能を備えています。よく知られているインテル® Pentium® プロセッサーに多数のモデルがあるように、インテル® Atom™ プロセッサーにも多数のモデルがあります。
ネットブック・プラットフォームに搭載されているインテル® Atom™ プロセッサーのモデルは複数あり、アプリケーションを移植する場合にはこのことを考慮することが最も重要になります。移植したアプリケーションがパフォーマンスの低下を招くことなく、インテル® Atom™ プロセッサーを最大限活用できるかどうかは、ここにかかっています。
CPU 情報の収集
最初に、対象となるインテル® Atom™ プロセッサーについて知っておく必要があります。つまり、インテル® Atom™ プロセッサーのどのモデルが対象で、その動作速度はどれぐらいかを知っておくことが重要です。これらの情報は、いくつかの方法で取得することができます。例えば、Windows* では次のいずれかの方法があります。
- プラットフォーム SDK の _cpuid メソッドを使用する
- WMI (Windows Management Instrumentation) を使用する
- レジストリーから取得する
Visual Studio* 2008 で _cpuid メソッドを使用してプロセッサーのファミリー、モデル、ステップを取得する簡単なサンプルコードを以下に示します。
#include <stdio.h>
#include "cpuid.h"
void main(void)
{
_p_info info;
_cpuid(&info);
printf("v_name:\t\t%s\n", info.v_name);
printf("model:\t\t%s\n", info.model_name);
printf("family:\t\t%d\n", info.family);
printf("stepping:\t%d\n", info.stepping);
}
_cpuid()
_cpuid メソッドの詳細: http://msdn.microsoft.com/en-us/library/hskdteyh%28VS.80%29.aspx (英語)
サンプルコード: http://download.microsoft.com/download/B/A/D/BADA8219-9761-498D-85B4-4565C28F4DB8/crt/cpuid.zip.exe
WMI を使用する場合は、以下に示す .NET (C#) で WMI を使用するサンプルコードを参考にしてください。
using System.Management;
public void DisplayCPUDetails()
{
ManagementClass mgmt = new ManagementClass("Win32_Processor");
ManagementObjectCollection objCol = mgmt.GetInstances();
// Loop through all processors
foreach (ManagementObject obj in objCol)
{
Response.WriteLine("ID",obj.Properties["ProcessorId"].Value.ToString());
Response.WriteLine ("DeviceID",obj.Properties["DeviceID"].Value.ToString());
Response.WriteLine ("Socket", obj.Properties["SocketDesignation"].Value.ToString());
Response.WriteLine ("Manufacturer", obj.Properties["Manufacturer"].Value.ToString());
// Clean up
obj.Dispose();
}
}
WMI の詳細: http://msdn.microsoft.com/en-us/library/aa394373%28VS.85%29.aspx (英語)
注: Intel AppUp℠ 開発プログラムのターゲット・プラットフォームは "インテル® Atom™ プロセッサーを搭載したネットブック" ですが、アプリケーションの実行対象からほかのプロセッサーを除外するのは望ましくありません。デバッグやユーザー認証テストなど、インテル® Atom™ プロセッサー以外で Intel AppUp™ ソフトウェア開発キットを使用したアプリケーションを実行する可能性は多数あるからです。技術的な懸念事項がある場合は、ユーザーにアプリケーションがインテル® Atom™ プロセッサー向けであり、それ以外のプロセッサーでは期待どおりに動作しない可能性があることを通知できます。
インテル® Atom™ プロセッサーのラインアップ
インテル® Atom™ プロセッサーには 800 MHz から 2.13 GHz までの多数のモデルがあります。モデルの一覧は、インテルの Web サイトを参照してください。移植の際に重要になるのは、ネットブックに搭載されているインテル® Atom™ プロセッサーのモデルによってそのパフォーマンスが大きく異なるということです。プロセッサーを多用するアプリケーションの場合、Intel AppUp℠ ストアのメタデータで免責事項や推奨システム要件を追加することを検討してみてください。事前に通知することで、ユーザーに不満や無駄な期待を抱かせないようにすることができます。
インテル® Atom™ プロセッサーの一覧: http://ark.intel.com/ProductCollection.aspx?familyID=29035 (英語)
適応動作
アプリケーションでプロセッサーを認識することで、CPU 情報に応じて動作を変更したり、ユーザー・エクスペリエンスを向上するための可能性が開けます。遅い CPU を搭載したネットブックで実行する場合、アプリケーションの動作はどのように変更するべきでしょうか?あるいは、速い CPU (またはマルチスレッド、より高品質なエンコーディングに対応した CPU など) の場合はどうしたら良いでしょうか?
インテル® Atom™ プロセッサーを搭載したネットブックに、ハイエンドのデスクトップ・ワークステーションと同等のパフォーマンスを期待することは無理です。ユーザー・エクスペリエンスには、インテル® Atom™ プロセッサーのそれぞれのモデルの処理能力が反映されるので注意する必要があります。逆に、優れた処理能力は、それを十分に活用するべきです。
例えば、メディア変換アプリケーションでは、 エンコーダーに多数のパラメーターがあり、それぞれのパラメーターは出力と CPU 負荷に影響します。XYZ パラメーターを有効にすると、インテル® Atom™ プロセッサーの 123 モデルでアプリケーションの処理時間が 5 倍になることが分かった場合、事前に対応することでユーザー・エクスペリエンスを大幅に向上できます。
動的機能
ユーザーのためにアプリケーションが最高のパフォーマンスを発揮できるようにしたいと思うのは当然のことでしょう。優れたユーザー・エクスペリエンスを提供することで、ユーザーの満足度が上がります。特定の機能で CPU がボトルネックになる場合はどうしたら良いでしょうか?
CPU 要件によってアプリケーションの利用を制限し、潜在的な顧客ベースを狭めるのではなく、代わりに利用可能な CPU リソースに応じてアプリケーションの機能を制限することができます。アプリケーション全体の使用には影響を与えることなく、問題となる機能を制限または除外します。
この方法の一例として、アプリケーションでユーザーが機能を実行する周波数を選択できるようにすることがあげられます。そして、速度の遅いインテル® Atom™ プロセッサー・モデルでは、現実的な設定だけを選択できるように制限します。
GPU へのサイクルの振り分け
インテル® Atom™ プロセッサーは効率良く強力ですが、そのリソースには限度があることを忘れてはなりません。ほとんどのモバイル・プラットフォームと同様に、ネットブックでは単一プロセスで、一度に 1 つのアプリケーションに制限されます。また、ほかのラップトップと同様に常にリソースを共有しなければなりません。
最適化コードの記述方法について書かれた文書は多くありますが、顧客満足度につながるという点でコードの最適化は大切です。ネットブック・プラットフォームにアプリケーションを移植する場合は、できるだけ多くの CPU 作業を GPU に振り分けることが重要です。GPU はサポートしている操作を効率良く処理することができるので、GPU を活用することで貴重な CPU 処理能力を解放することができます。GPU に作業を振り分けることで、スムーズなユーザー・エクスペリエンスを実現し、アプリケーションによる "リソースの独占" を回避できます。
GPU についての関連情報: http://appdeveloper.intel.com/en-us/blog/2010/01/20/optimize-your-game-intel-integrated-graphics-adapters
注: 多くの場合、アプリケーションでは、アニメーションやドラッグアンドドロップ機能に標準のフォーム・イベント・モデル (MouseDown、LostFocus など) を使用します。しかし、フォーム上でコントロールを移動する場合には注意が必要です。this.Invalidate() の呼び出しを多用すると、CPU パフォーマンスの問題を引き起こします。DirectX*、OpenGL*、または WPF* とそのビルトイン・アニメーション機能を利用すると、この問題を軽減できます。