public static void Execute(byte[] bitmap) { DateTime dt = DateTime.Now; CudafyModule km = CudafyModule.TryDeserialize(csFILENAME); // Check the module exists and matches the .NET modules, else make new if (km == null || !km.TryVerifyChecksums()) { Console.WriteLine("There was no cached module available so we make a new one."); km = CudafyModule.Deserialize(typeof(ray_serialize).Name); km.Serialize(csFILENAME); } GPGPU gpu = CudafyHost.GetGPGPU(CudafyModes.Target, 1); gpu.LoadModule(km); Console.WriteLine("Time taken to load module: {0}ms", DateTime.Now.Subtract(dt).Milliseconds); // capture the start time gpu.StartTimer(); // allocate memory on the GPU for the bitmap (same size as ptr) byte[] dev_bitmap = gpu.Allocate(bitmap); // allocate temp memory, initialize it, copy to constant memory on the GPU Sphere[] temp_s = new Sphere[SPHERES]; for (int i = 0; i < SPHERES; i++) { temp_s[i].r = rnd(1.0f); temp_s[i].g = rnd(1.0f); temp_s[i].b = rnd(1.0f); temp_s[i].x = rnd(1000.0f) - 500; temp_s[i].y = rnd(1000.0f) - 500; temp_s[i].z = rnd(1000.0f) - 500; temp_s[i].radius = rnd(100.0f) + 20; } gpu.CopyToConstantMemory(temp_s, s); // generate a bitmap from our sphere data dim3 grids = new dim3(DIM / 16, DIM / 16); dim3 threads = new dim3(16, 16); gpu.Launch(grids, threads, "kernel", dev_bitmap); // copy our bitmap back from the GPU for display gpu.CopyFromDevice(dev_bitmap, bitmap); // get stop time, and display the timing results float elapsedTime = gpu.StopTimer(); Console.WriteLine("Time to generate: {0} ms", elapsedTime); gpu.DeviceFreeAll(); }