[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
プログラミング、3DCGとその他いろいろについて
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
以前、C#でOpenCLを使った記事を書いたのですが、Deep Learningの重さに耐えかね、復習することにしました。
OpenCLはGPUというグラフィックス表示用のハードウェアを普通の計算に利用しようというものです。
結構速くなるようです。
そして最近人工知能の世界で流行りのDeep Learning、これが重くて重くて仕方がありません。
この2つを組み合わせない手はないでしょう。
しかしP/InvokeでOpenCLのラッパーを書いて…というのは面倒なので、今回はOpenCLNetという物を使おうと思います。
これならC#から簡単にOpenCLが使えるようです。
こちらと一緒にご覧ください。
OpenCLでGPUを使ったプログラムを書くには、まずプラットフォームが必要です。
プラットフォームとは、GPUのメーカーが用意したOpenCLに対応した環境です。
NVIDIA CUDAやAMD Accelerated Parallel Processingですね。
(※これらはインストールしておかなければならないようです。
実は私は今使っているノートパソコンにはインストールしていませんでした。
以下のプログラム、実行しようとして失敗しました。
何も表示されなかったのです。
…と思っていたらAMD Accelerated Parallel Processingをインストールしても失敗しました。
どうやらAMD Catalyst Driversもインストールしなければいけないようですね)
さて、インストールが完了し準備が整ったらいよいよC#でプログラミングです。
まずはきちんとプラットフォームがインストールされているかを調べましょう。
using OpenCLNet; class Program { static void Main() { foreach (var platform in OpenCL.GetPlatforms()) { System.Console.WriteLine(platform.Name); } } }
このプログラムを実行すると、私の環境では次のような結果になりました:
AMD Accelerated Parallel Processing
これは、私の環境にAMD Accelerated Parallel Processingがインストールされていることを意味します。
以前のと比べるとかなり簡単ですね。
ついでなのでプロパティを全部列挙してみましょう。
using OpenCLNet; class Program { static void Main() { foreach (var platform in OpenCL.GetPlatforms()) { foreach (var property in typeof(Platform).GetProperties()) { System.Console.WriteLine("{0} : {1}", property.Name, property.GetValue(platform)); } } } }
結果は私の環境ではこうなりました:
PlatformID : 138917988 Profile : FULL_PROFILE Version : OpenCL 1.2 AMD-APP (1124.2) Name : AMD Accelerated Parallel Processing Vendor : Advanced Micro Devices, Inc. Extensions : cl_khr_icd cl_amd_event_callback cl_amd_offline_devices cl_khr_d3d1 0_sharing cl_khr_d3d11_sharing OpenCLMajorVersion : 1 OpenCLMinorVersion : 2