public void Kernel(deviceptr <float4> pos, float time) { var x = blockIdx.x * blockDim.x + threadIdx.x; var y = blockIdx.y * blockDim.y + threadIdx.y; var u = ((float)x) / ((float)Width); var v = ((float)y) / ((float)Height); u = u * 2.0f - 1.0f; v = v * 2.0f - 1.0f; const float freq = 4.0f; var w = LibDevice.__nv_sinf(u * freq + time) * LibDevice.__nv_cosf(v * freq + time) * 0.5f; pos[y * Width + x] = new float4(u, w, v, LibDevice.__nv_uint_as_float(0xff00ff00)); }
//[/commonPerfTester] //[bodyBodyInteraction] public static float3 BodyBodyInteraction(float softeningSquared, float3 ai, float4 bi, float4 bj) { // r_ij [3 FLOPS] var r = new float3(bj.x - bi.x, bj.y - bi.y, bj.z - bi.z); // distSqr = dot(r_ij, r_ij) + EPS^2 [6 FLOPS] var distSqr = r.x * r.x + r.y * r.y + r.z * r.z + softeningSquared; // invDistCube =1/distSqr^(3/2) [4 FLOPS (2 mul, 1 sqrt, 1 inv)] var invDist = LibDevice.__nv_rsqrtf(distSqr); var invDistCube = invDist * invDist * invDist; // s = m_j * invDistCube [1 FLOP] var s = bj.w * invDistCube; // a_i = a_i + s * r_ij [6 FLOPS] return(new float3(ai.x + r.x * s, ai.y + r.y * s, ai.z + r.z * s)); }
/// <summary> /// A custom kernel using LibDevice functions. /// </summary> public static void KernelWithLibDevice(Index1D index, ArrayView <float> data) { data[index] = LibDevice.Cos(index); }
private static Real MaskCuda(Real value) { return(LibDevice.__nv_isfinited(value) != 0 ? value : 0); }