Пример #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;
            }
        }
Пример #2
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);
        }
        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);
        }
Пример #4
0
        public static Tensor Invoke(CudaCode kernels, string funcName, Tensor result, Tensor lhs, Tensor rhs, Tensor rhs2)
        {
            var context     = CudaHelpers.TSContextForTensor(lhs);
            var cudaContext = context.CudaContextForTensor(lhs);

            cudaContext.SetCurrent();

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

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

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

            return(writeTarget);
        }
Пример #5
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;
            }
        }