[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
プログラミング、3DCGとその他いろいろについて
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
こちらも合わせてお読みください。
ここまでGPUにデータを渡すときはバッファを使っていました。
しかしint一つだけを渡す、なんてこともできます。
では、GPUにintをひとつ渡すサンプルを見てみましょう。
using OpenCLNet; class Program { static void Main() { var platform = OpenCL.GetPlatform(0); var context = platform.CreateDefaultContext(); var commandQueue = context.CreateCommandQueue(platform.QueryDevices(DeviceType.DEFAULT)[0]); var program = context.CreateProgramWithSource( System.IO.File.ReadAllText("myKernelProgram.cl") ); program.Build(); var kernel = program.CreateKernel("myKernelFunction"); const int elementCount = 3; var buffer = context.CreateBuffer( MemFlags.READ_WRITE, elementCount * sizeof(float) ); kernel.SetArg(0, buffer); kernel.SetArg(1, 2); commandQueue.EnqueueNDRangeKernel( kernel, 1, null, new[] { elementCount }, new[] { 1 }); var readBack = new float[elementCount]; buffer.Read(commandQueue, 0, readBack, 0, readBack.Length); foreach (var number in readBack) { System.Console.WriteLine(number); } buffer.Dispose(); kernel.Dispose(); program.Dispose(); commandQueue.Dispose(); context.Dispose(); } }
__kernel void myKernelFunction(__global float* items, __const int number) { items[get_global_id(0)] = number; }
このサンプルプログラムは、まずGPU内にfloatが3つ連なったバッファを確保します。
そしてGPUに2という数字(int)を送ります。
GPUを動かして、2をバッファに代入します。
CPUにバッファの内容を読み戻し、表示します。
結果はこうなります:
2 2 2