public void cudaMalloc_cudaFree_cudaMemcpy_test_cudaMemset_test() { int length = 1024 * 2; byte testValue = 5; byte[] test = new byte[length]; byte[] result = new byte[length]; IntPtr d_ptr = IntPtr.Zero; var size = length * sizeof(byte); var status = CudaRuntimeApi.cudaMalloc(ref d_ptr, (ulong)size); Assert.AreEqual(status, cudaError.cudaSuccess); Console.WriteLine($"ptr : {d_ptr}"); GCHandle gchTest = GCHandle.Alloc(test, GCHandleType.Pinned); GCHandle gchResult = GCHandle.Alloc(result, GCHandleType.Pinned); IntPtr h_ptrTest = Marshal.UnsafeAddrOfPinnedArrayElement(test, 0); IntPtr h_ptrResult = Marshal.UnsafeAddrOfPinnedArrayElement(result, 0); status = CudaRuntimeApi.cudaMemcpy(d_ptr, h_ptrTest, (ulong)size, cudaMemcpyKind.HostToDevice); Assert.AreEqual(status, cudaError.cudaSuccess); status = CudaRuntimeApi.cudaMemset(d_ptr, testValue, (ulong)size); Assert.AreEqual(status, cudaError.cudaSuccess); status = CudaRuntimeApi.cudaMemcpy(h_ptrResult, d_ptr, (ulong)size, cudaMemcpyKind.DeviceToHost); Assert.AreEqual(status, cudaError.cudaSuccess); for (int i = 0; i < length; i++) { Assert.AreEqual(result[i], testValue); } status = CudaRuntimeApi.cudaFree(d_ptr); Assert.AreEqual(status, cudaError.cudaSuccess); gchTest.Free(); gchResult.Free(); }