メニュー

技術ブログ

Denso IT Lab.社員による技術情報の紹介

Denso IT Laboratory researcher's blog sites

数式

RSS

ページトップへ

Windows 8アプリをuniversalにして投稿する

 

Microsoftが全世界で開催している、//publish/というアプリコンテストに、最近公開したWindows 8.1用アプリ、Metro Traffic Simulatorをダメ元で応募してみました。アプリケーションは使われて初めて意味が出てくるわけで、少なくとも多少のアピールにはなろう、というのが狙いです。(ちょうど良いタイミングだったのですが、投稿済みのアプリを申請したので、そもそもレギュレーションに合致しないかもしれません。)

そのコンテストの締切に先駆けて、ハッカソンイベントが行われていたので、出向いてきました。アプリは投稿済みですので、publishしようがないため、このアプリをuniversal Windows Appsにして、Windows Phoneアプリを追加で投稿することにしました。これも、すでにほぼ開発済みでしたので、会場ではpublishすることに専念しました。(ずるいことをしています。。。)

このpublishなのですが、Windows Storeアプリをuniversalにするっていうのは、Visual Studio上での開発については、MSDNなどの文書やblogなどですでに解説記事も多く出ているものの、最後に投稿をする手順というのはあまり語られていないように思いました。実際に探してみたものの、すぐには見つかりませんでしたので、えいや、とやってみました。


今後Windows StoreアプリがWindows Phoneアプリに、Windows PhoneアプリがWindows Storeアプリにやってくる場面が多くなると思われます。

このエントリーをはてなブックマークに追加

C++ AMPの実力を試す

Microsoft が C++ AMPを大々的に発表したのは 2011年の//build/前くらいでしょうか?当時build開場のAMDブースで説明をされていたので、AMDと歩調を合わせた環境なのか、と思っていましたが、MicrosoftによるとCPU,GPUの適用範囲はDirectXのそれと同じで広く、またWindows 以外の環境にも広めたいと思っているようです。

現状手もとのプログラムはC#で開発していますが、どうしても大規模な数値演算はC#ではSIMD命令やGPGPUの恩恵をそのまま受けられません。OpenCLやDirect ComputeのC#ラッパーなどが存在するようですが、ラップされてもかなり特殊な環境であることには変わりありません。

C++ AMPの解説にC#から呼び出すというものがあり、比較的簡単に見えたので、Interop呼び出しをした場合に、どの程度のパフォーマンスが出るかをMatrix Multで試してみました。

C++ AMP (Developer Reference) 本を購入したのですが、そのサンプルがCodePlex にあります。この中に行列積のコードがあったのですが、これを実行すると、何と手元のマシンでも通常のシングルコアCPU処理と比べて100倍のスピードが出ているという結果になりました。でもこのコードよく見るとvectorを使ったり、いろいろフェアじゃない分部がありそうでしたので、プレーンなコードに治しましたら、だいたい以下のような感じになりました。

C# multi, C++ multi はもっとも外側のループをparallel forしたもの。AMP WARPはampコードをCPU SIMDプロセッサを使ってエミュレートしたもの。TiledというのはGPUの構成に合わせてタイルサイズを指定したものです。

image

Surface Pro 2(Intel Core i5 4300U) と ショップブランドマシン(AMD Kaveri A10-7850K)を使いました。2コア、4コアのCPUなので、parallel forの結果は妥当なものかと思います。GPUは、このクラスのGPUとしては十分な性能が出ているといえるでしょうか?行列サイズが十分大きいことが条件ですが、シングル実行の2~5倍程度、C#での実行と比較すると10倍近い性能がでるというのは、十分導入に値するといえるでしょう。

GPGPUの世界もぐっと身近になって、様々な言語への対応も望まれますね。そういえばbuild 2014ではC#のSIMD対応やコンパイラの話がホットだったなぁ。

このエントリーをはてなブックマークに追加

Windows 8.1対応Portable Class Libraryを Windows Phone 8.1 対応にしたときに起こったこと

PCL81

備忘録的に書いておきます。

Portable Class Library としてWindows 8.1 Store Applicationと.NET 4.5.1 を指定したライブラリを複数開発していましたが、Universal Windows Applicationの登場で、さらにWindows Phone 8.1をターゲットにしてみようと思ってやってみました。

元々Model、View Modelだけのライブラリでしたし、そもそもXAML関連のコードは全くポータブルにできませんでしたから、このPCLにはその手のコードは一切入っていません。ファイル入出力やスレッド関連、画面ポップアップなどをインターフェイスを用いてPCLからコールできるようにしていますが、View関連のライブラリそのものが読み込めませんのでおそらく最小限の対応で済むだろうと思っていました。

ただ、Windows Phone 8(.0)をターゲットにしたPCLに変換しようとしたときはそれなりにコンパイルエラーが出ていましたので、WP8.1でも同様のエラーは少数ながらあるだろうと予想しました。

実際出てきたエラーは、使っていないライブラリのusing… 行のみが残っていたものが2行ほどエラーになっただけで、それを消すだけで対応できました。デスクトップとの共用ポータブルクラスライブラリへのWindows Phone 8.1対応に関しては実質コスト0で対応できるようです。これは楽ですね。

このエントリーをはてなブックマークに追加