Cloo を使用していくつかの opencl コードを実行するプログラムをコンパイルしようとしています。
static void Main(string[] arg)
{
CLCalc.InitCL();
string src = File.ReadAllText("kernels.cl");
CLCalc.Program.Compile(src);
}
プログラムは以前は正常に動作していましたが、null 参照例外が発生します。
最初は自分の opencl コードにバグがあると思っていましたが、opencl を非常に単純なカーネルに置き換えてもコンパイルできませんでした。
すなわち:
static void Main(string[] arg)
{
CLCalc.InitCL();
//string src = File.ReadAllText("kernels.cl");
string src = "__kernel void hello(__global char * out){}";
CLCalc.Program.Compile(src);
}
デバイスが存在しないことに注意してください。これはなぜでしょうか?私はGPUを持っています...
これは、私の PCにCUDA takelkkitをインストールして以来の問題でした。これが原因である可能性さえありますか?
編集
数行のコードだけで非常に単純なプロジェクトを作成し、バグを明らかにしました。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenCL;
using OpenCL.Net;
using OpenCLTemplate;
namespace ClooTest
{
class Program
{
static void Main(string[] args)
{
CLCalc.InitCL();
string src = "__kernel void hello(__global char * out){}";
CLCalc.Program.Compile(src);
}
}
}
編集
プログラムの古い作業コピーを USB から復元しました。自宅のPCで問題なく動きました。しかし、仕事用の PC で実行すると同じバグが発生します。
編集
コンパイル行の前にブレークポイントを置くと、例外が表示されます
突然デバイスが見つからないのはなぜですか?
編集
自分の OpenCL デバイスを見ると、デフォルト デバイスとしてリストされているのは自分の CPU だけです ...
どうして!?