忍者ブログ

Memeplexes

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

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

Cloo

しかしP/InvokeでOpenCLのラッパーを書いて…というのは面倒なので、今回はOpenCLNetという物を使おうと思います。
これならC#から簡単にOpenCLが使えるようです。

と先日書いたのですが、どうやらClooというのもあるようです。
これもOpenCLのラッパーです。
こちらの解説もしてみます。
基本コピペで進みます。


プラットフォーム

こちらと一緒にご覧ください。
OpenCLでGPUを使ったプログラムを書くには、まずプラットフォームが必要です。
プラットフォームとは、GPUのメーカーが用意したOpenCLに対応した環境です。
NVIDIA CUDAやAMD Accelerated Parallel Processingですね。

(※これらはインストールしておかなければならないようです。
実は私は今使っているノートパソコンにはインストールしていませんでした。
以下のプログラム、実行しようとして失敗しました。
何も表示されなかったのです。
…と思っていたらAMD Accelerated Parallel Processingをインストールしても失敗しました。
どうやらAMD Catalyst Driversもインストールしなければいけないようですね)

さて、インストールが完了し準備が整ったらいよいよC#でプログラミングです。
まずはきちんとプラットフォームがインストールされているかを調べましょう。

using Cloo;

class Program
{
    static void Main()
    {
        foreach (ComputePlatform platform in ComputePlatform.Platforms)
        {
            System.Console.WriteLine(platform.Name);
        }
    }

}

このプログラムを実行すると、私の環境では次のような結果になりました:

AMD Accelerated Parallel Processing

これは、私の環境にAMD Accelerated Parallel Processingがインストールされていることを意味します。
以前のと比べるとかなり簡単ですね。

ついでなのでプロパティを全部列挙してみましょう。

using Cloo;

class Program
{
    static void Main()
    {
        foreach (ComputePlatform platform in ComputePlatform.Platforms)
        {
            foreach (var property in typeof(ComputePlatform).GetProperties())
            {
                System.Console.WriteLine(
                    "{0} : {1}",
                    property.Name,
                    property.GetValue(platform)
                    );
            }
        }
    }
}

結果は私の環境ではこうなりました:

Handle : Cloo.Bindings.CLPlatformHandle
Devices : System.Collections.ObjectModel.ReadOnlyCollection`1[Cloo.ComputeDevice
]
Extensions : System.Collections.ObjectModel.ReadOnlyCollection`1[System.String]
Name : AMD Accelerated Parallel Processing
Platforms : System.Collections.ObjectModel.ReadOnlyCollection`1[Cloo.ComputePlat
form]
Profile : FULL_PROFILE
Vendor : Advanced Micro Devices, Inc.
Version : OpenCL 1.2 AMD-APP (1124.2)

拍手[1回]

PR