Exemplo n.º 1
0
        public static Tensor Invoke(CudaCode kernels, string funcName, Tensor result, Tensor src)
        {
            try
            {
                TSCudaContext context     = CudaHelpers.TSContextForTensor(src);
                CudaContext   cudaContext = context.CudaContextForTensor(src);

                cudaContext.SetCurrent();

                Tensor writeTarget  = TensorResultBuilder.GetWriteTarget(result, src, false, src.Sizes);
                long   elementCount = writeTarget.ElementCount();

                byte[] ptx = kernels.GetPtx(context.Compiler);

                if (result == src)
                {
                    ApplyOpInvoke.Invoke(context, cudaContext, ptx, "t1_" + funcName, writeTarget, elementCount);
                }
                else
                {
                    ApplyOpInvoke.Invoke(context, cudaContext, ptx, "t2_" + funcName, writeTarget, src, elementCount);
                }

                return(writeTarget);
            }
            catch (Exception e)
            {
                Logger.WriteLine($"Error = '{e.Message}', Call stack = '{e.StackTrace}'");
                throw;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Invokes the specified kernels.
        /// </summary>
        /// <param name="kernels">The kernels.</param>
        /// <param name="context">The context.</param>
        /// <param name="cudaContext">The cuda context.</param>
        /// <param name="result">The result.</param>
        /// <param name="src">The source.</param>
        public static void Invoke(FillCopyKernels kernels, TSCudaContext context, CudaContext cudaContext, NDArray result, NDArray src)
        {
            var ptx          = kernels.GetPtx(context.Compiler);
            var elementCount = result.ElementCount();

            ApplyOpInvoke.Invoke(context, cudaContext, ptx, "copy", result, src, elementCount);
        }
        public static void Invoke(FillCopyKernels kernels, TSCudaContext context, CudaContext cudaContext, Tensor result, Tensor src)
        {
            //    cudaContext.SetCurrent();

            byte[] ptx          = kernels.GetPtx(context.Compiler);
            long   elementCount = result.ElementCount();

            ApplyOpInvoke.Invoke(context, cudaContext, ptx, "copy", result, src, elementCount);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Invokes the specified kernels.
        /// </summary>
        /// <param name="kernels">The kernels.</param>
        /// <param name="result">The result.</param>
        /// <param name="value">The value.</param>
        public static void Invoke(FillCopyKernels kernels, NDArray result, float value)
        {
            var context      = CudaHelpers.TSContextForTensor(result);
            var cudaContext  = context.CudaContextForTensor(result);
            var ptx          = kernels.GetPtx(context.Compiler);
            var elementCount = result.ElementCount();

            ApplyOpInvoke.Invoke(context, cudaContext, ptx, "fill", result, value, elementCount);
        }
        public static void Invoke(FillCopyKernels kernels, Tensor result, float value)
        {
            TSCudaContext context     = CudaHelpers.TSContextForTensor(result);
            CudaContext   cudaContext = context.CudaContextForTensor(result);

            cudaContext.SetCurrent();

            byte[] ptx          = kernels.GetPtx(context.Compiler);
            long   elementCount = result.ElementCount();

            ApplyOpInvoke.Invoke(context, cudaContext, ptx, "fill", result, value, elementCount);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Invokes the specified kernels.
        /// </summary>
        /// <param name="kernels">The kernels.</param>
        /// <param name="result">The result.</param>
        /// <param name="srcA">The source a.</param>
        /// <param name="srcB">The source b.</param>
        /// <param name="weight">The weight.</param>
        /// <returns>Tensor.</returns>
        public static NDArray Invoke(ElementwiseKernels kernels, NDArray result, NDArray srcA, NDArray srcB, float weight)
        {
            var context     = CudaHelpers.TSContextForTensor(srcA);
            var cudaContext = context.CudaContextForTensor(srcA);

            var writeTarget  = TensorResultBuilder.GetWriteTarget(result, srcA, false, srcA.Shape);
            var elementCount = writeTarget.ElementCount();

            var ptx = kernels.GetPtx(context.Compiler);

            ApplyOpInvoke.Invoke(context, cudaContext, ptx, "lerp", writeTarget, srcA, srcB, weight, elementCount);

            return(writeTarget);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Invokes the specified kernels.
        /// </summary>
        /// <param name="kernels">The kernels.</param>
        /// <param name="result">The result.</param>
        /// <param name="srcY">The source y.</param>
        /// <param name="srcX">The source x.</param>
        /// <returns>Tensor.</returns>
        public static Tensor Invoke(ElementwiseKernels kernels, Tensor result, Tensor srcY, Tensor srcX)
        {
            var context     = CudaHelpers.TSContextForTensor(srcY);
            var cudaContext = context.CudaContextForTensor(srcY);

            var writeTarget  = TensorResultBuilder.GetWriteTarget(result, srcY, false, srcY.Shape);
            var elementCount = writeTarget.ElementCount();

            var ptx = kernels.GetPtx(context.Compiler);

            ApplyOpInvoke.Invoke(context, cudaContext, ptx, "atan2", writeTarget, srcY, srcX, elementCount);

            return(writeTarget);
        }
        public static Tensor Invoke(ElementwiseKernels kernels, Tensor result, Tensor srcA, Tensor srcB, float weight)
        {
            TSCudaContext context     = CudaHelpers.TSContextForTensor(srcA);
            CudaContext   cudaContext = context.CudaContextForTensor(srcA);

            cudaContext.SetCurrent();

            Tensor writeTarget  = TensorResultBuilder.GetWriteTarget(result, srcA, false, srcA.Sizes);
            long   elementCount = writeTarget.ElementCount();

            byte[] ptx = kernels.GetPtx(context.Compiler);
            ApplyOpInvoke.Invoke(context, cudaContext, ptx, "lerp", writeTarget, srcA, srcB, weight, elementCount);

            return(writeTarget);
        }
Exemplo n.º 9
0
        public static Tensor Invoke(CudaCode kernels, Tensor result, Tensor srcY, Tensor srcX)
        {
            TSCudaContext context     = CudaHelpers.TSContextForTensor(srcY);
            CudaContext   cudaContext = context.CudaContextForTensor(srcY);

            cudaContext.SetCurrent();

            Tensor writeTarget  = TensorResultBuilder.GetWriteTarget(result, srcY, false, srcY.Sizes);
            long   elementCount = writeTarget.ElementCount();

            byte[] ptx = kernels.GetPtx(context.Compiler);
            ApplyOpInvoke.Invoke(context, cudaContext, ptx, "atan2", writeTarget, srcY, srcX, elementCount);

            return(writeTarget);
        }
Exemplo n.º 10
0
        /// <summary>
        /// Invokes the specified kernels.
        /// </summary>
        /// <param name="kernels">The kernels.</param>
        /// <param name="funcName">Name of the function.</param>
        /// <param name="result">The result.</param>
        /// <param name="lhs">The LHS.</param>
        /// <param name="rhs">The RHS.</param>
        /// <returns>Tensor.</returns>
        public static NDArray Invoke(ElementwiseKernels kernels, string funcName, NDArray result, NDArray lhs, NDArray rhs)
        {
            var context     = CudaHelpers.TSContextForTensor(lhs);
            var cudaContext = context.CudaContextForTensor(lhs);

            var writeTarget  = TensorResultBuilder.GetWriteTarget(result, lhs, false, lhs.Shape);
            var elementCount = writeTarget.ElementCount();

            var ptx = kernels.GetPtx(context.Compiler);

            if (result == lhs)
            {
                ApplyOpInvoke.Invoke(context, cudaContext, ptx, "t1_" + funcName, writeTarget, rhs, elementCount);
            }
            else
            {
                ApplyOpInvoke.Invoke(context, cudaContext, ptx, "t2_" + funcName, writeTarget, lhs, rhs, elementCount);
            }

            return(writeTarget);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Invokes the specified kernels.
        /// </summary>
        /// <param name="kernels">The kernels.</param>
        /// <param name="funcName">Name of the function.</param>
        /// <param name="result">The result.</param>
        /// <param name="src">The source.</param>
        /// <param name="value">The value.</param>
        /// <returns>Tensor.</returns>
        public static Tensor Invoke(ElementwiseKernels kernels, string funcName, Tensor result, Tensor src, float value)
        {
            var context     = CudaHelpers.TSContextForTensor(src);
            var cudaContext = context.CudaContextForTensor(src);

            var writeTarget  = TensorResultBuilder.GetWriteTarget(result, src, false, src.Shape);
            var elementCount = writeTarget.ElementCount();

            var ptx = kernels.GetPtx(context.Compiler);

            if (result == src)
            {
                ApplyOpInvoke.Invoke(context, cudaContext, ptx, "t1_" + funcName, writeTarget, value, elementCount);
            }
            else
            {
                ApplyOpInvoke.Invoke(context, cudaContext, ptx, "t2_" + funcName, writeTarget, src, value, elementCount);
            }

            return(writeTarget);
        }
Exemplo n.º 12
0
        /// <summary>
        /// Invokes the specified kernels.
        /// </summary>
        /// <param name="kernels">The kernels.</param>
        /// <param name="result">The result.</param>
        /// <param name="src">The source.</param>
        /// <param name="min">The minimum.</param>
        /// <param name="max">The maximum.</param>
        /// <returns>Tensor.</returns>
        public static NDArray Invoke(ElementwiseKernels kernels, NDArray result, NDArray src, float min, float max)
        {
            var funcName    = "clamp";
            var context     = CudaHelpers.TSContextForTensor(src);
            var cudaContext = context.CudaContextForTensor(src);

            var writeTarget  = TensorResultBuilder.GetWriteTarget(result, src, false, src.Shape);
            var elementCount = writeTarget.ElementCount();

            var ptx = kernels.GetPtx(context.Compiler);

            if (result == src)
            {
                ApplyOpInvoke.Invoke(context, cudaContext, ptx, "t1_" + funcName, writeTarget, min, max, elementCount);
            }
            else
            {
                ApplyOpInvoke.Invoke(context, cudaContext, ptx, "t2_" + funcName, writeTarget, src, min, max, elementCount);
            }

            return(writeTarget);
        }
        public static Tensor Invoke(CudaCode kernels, string funcName, Tensor result, Tensor src, float value)
        {
            TSCudaContext context     = CudaHelpers.TSContextForTensor(src);
            CudaContext   cudaContext = context.CudaContextForTensor(src);

            cudaContext.SetCurrent();

            Tensor writeTarget  = TensorResultBuilder.GetWriteTarget(result, src, false, src.Sizes);
            long   elementCount = writeTarget.ElementCount();

            byte[] ptx = kernels.GetPtx(context.Compiler);

            if (result == src)
            {
                ApplyOpInvoke.Invoke(context, cudaContext, ptx, "t1_" + funcName, writeTarget, value, elementCount);
            }
            else
            {
                ApplyOpInvoke.Invoke(context, cudaContext, ptx, "t2_" + funcName, writeTarget, src, value, elementCount);
            }

            return(writeTarget);
        }
        public static Tensor Invoke(ElementwiseKernels kernels, string funcName, Tensor result, Tensor lhs, Tensor rhs, Tensor rhs2, Tensor rhs3)
        {
            TSCudaContext context     = CudaHelpers.TSContextForTensor(lhs);
            CudaContext   cudaContext = context.CudaContextForTensor(lhs);

            cudaContext.SetCurrent();

            Tensor writeTarget  = TensorResultBuilder.GetWriteTarget(result, lhs, false, lhs.Sizes);
            long   elementCount = writeTarget.ElementCount();

            byte[] ptx = kernels.GetPtx(context.Compiler);

            if (result == lhs)
            {
                ApplyOpInvoke.Invoke(context, cudaContext, ptx, "t1_" + funcName, writeTarget, rhs, rhs2, rhs3, elementCount);
            }
            else
            {
                ApplyOpInvoke.Invoke(context, cudaContext, ptx, "t2_" + funcName, writeTarget, lhs, rhs, rhs2, rhs3, elementCount);
            }

            return(writeTarget);
        }
Exemplo n.º 15
0
        public static Tensor Invoke(CudaCode kernels, Tensor result, Tensor rhs)
        {
            try
            {
                TSCudaContext context     = CudaHelpers.TSContextForTensor(rhs);
                CudaContext   cudaContext = context.CudaContextForTensor(rhs);

                cudaContext.SetCurrent();

                long elementCount = result.ElementCount();

                byte[] ptx = kernels.GetPtx(context.Compiler);

                ApplyOpInvoke.Invoke(context, cudaContext, ptx, "t1_atomicAdd", result, rhs, elementCount);


                return(result);
            }
            catch (Exception e)
            {
                Logger.WriteLine($"Exception message = '{e.Message}', Call stack = '{e.StackTrace}'");
                throw;
            }
        }