忍者ブログ

Memeplexes

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

C#でOpenCL入門 (OpenCLNet版) OpenCL Cのコンパイルエラー補足

コンパイルエラーを見つける

こちらも合わせてお読みください。

前回のプログラムは、GPU側で動くプログラムのソースコードが原因でコンパイルエラーが起きた場合、それを知ることはできませんでした。
今回はそのコンパイルエラーを補足する方法を解説します。


OpenCLBuildException例外

OpenCL Cのコードをビルドしてコンパイルエラーが起きると、例外が投げられます。
OpenCLBuildExceptionです。
それにOpenCLBuildException.BuildLogsというのがあるので、それを使いましょう。

public List<string> BuildLogs;

この中にコンパイルエラーの説明が入っています。

サンプルコード

ではここであえておかしなOpenCL Cのコードを書いてみます。
ビルドしてエラーが起きるようなコードをわざと書くのです。

myKernelProgram.cl

__kernel void myKernelFunction(__global float* items)
{
	items[0] = 0
}

あーこれはいけません。
3行目の最後にセミコロン(;)がありません。
これではコンパイルエラーです。
例外が発生してしまうでしょう。
(そのためにこうしたのですが)

Program.cs

using OpenCLNet;

class Program
{
    static void Main()
    {
        var platform = OpenCL.GetPlatform(0);
        var context = platform.CreateDefaultContext();
        var program = context.CreateProgramWithSource(
            System.IO.File.ReadAllText("myKernelProgram.cl")
            );

        try
        {
            program.Build();
        }
        catch (OpenCLBuildException error)
        {
            foreach (var log in error.BuildLogs)
            {
                System.Console.WriteLine(log);
            }
        }

        program.Dispose();
        context.Dispose();
    }
}

このプログラムを実行すると、コンソールにOpenCL Cのコンパイルエラーが表示されます。

拍手[0回]

PR