今日、私はC#アプリケーションからCUDA C/C++プログラムを起動しようとしています。ManagedCUDA:構造体パラメータをカーネルに渡す
私はウェブ上でいくつかの調査をしましたが、それほど多くの情報は見つかりませんでした。私は唯一の "GitHubのを" 見たが、無...
は、だから私は、カーネルは次のように定義されたガット: (それは例です)
__global__ void kernel(Cartesian a, Cartesian b, Cartesian *c)
を "デカルト" では:
class Cartesian
{
public:
double x;
double y;
double z;
};
私はmanagedCUDAから私が理解しているものを使用します。これは、CUDA C/C++プログラムの主な機能を置き換えるようなものです。 「私たちのために仕事をする」というのlibを使用して
は、だから私は、このページから例を追っ:
そして、このように私のC#のプログラムを書く:
作成部分をコンテキスト:(いけない本当にこの「概念」を取得)打ち上げ(私は推測する)こと
static void InitKernels()
{
CudaContext cntxt = new CudaContext();
CUmodule cumodule = cntxt.LoadModule(@"C:\Users\stage\Documents\Visual Studio 2013\Projects\Cs_link_test\Cs_link_test\x64\Release\kernel.ptx");
addWithCuda = new CudaKernel("kernel", cumodule, cntxt);
}
一部の機能をし、KEによって行われた変更を取り戻しますrnel:私は(ちょうど言う)のC#
だから、私の問題に精通していないよ
static Func<Cartesian, Cartesian, Cartesian> cudaAdd = (a, b) =>
:
static Func<Cartesian, Cartesian, Cartesian> cudaAdd = (a, b) =>
{
CudaDeviceVariable<Cartesian> result_dev;
Cartesian result_host;
addWithCuda.Run(a, b, result_dev.DevicePointer);
result_dev.CopyToHost(ref result_host);
return result_host;
};
そして、この部分から、私はラインから何かを理解していない
result_devとresult_hostによって引き起こされるエラーから来ます。エラー言う:未割り当てのローカル変数の
使用 'result_は、*'
彼らは初期化さarren'tのでだから、それはありますか?
もしそうなら、なぜresult_hostがエラーを起こすのですか?それはカーネルによって変更される必要があるresult_devからデータを取得する必要があります。
もしそうでなければ、これを修正するには?
また、カーネル関数を使ってClassパラメータを調べることも可能ですか?もしそうなら、CudaDeviceVariableをどのように設定するのですか。なぜなら、その型はnull不可能でなければならないからです。だから私は構造体を使ってクラスを変更するのです。
質問は不明です。 C/C++ CUDAコードまたはC#managedCUDAを記述しようとしていますか? – Aznaveh
CUDA C/C++コードはすでに記述されています。私はこのCUDA C/C++コードを実行するためにC#managedCUDAをコード化しようとしています –