忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

C#でOpenCL入門 (OpenCLNet版) プラットフォーム

OpenCLNet

以前、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

拍手[0回]

PR