示例#1
0
        // Use the CuFFT wrapper to perform a forward transform.
        static void DoForwardPlan(
            CudaAccelerator accelerator,
            CuFFT cufft,
            Complex[] input,
            out Complex[] output)
        {
            using var stream       = accelerator.CreateStream() as CudaStream;
            using var inputBuffer  = accelerator.Allocate1D(input);
            using var outputBuffer = accelerator.Allocate1D <Complex>(input.Length);

            CuFFTException.ThrowIfFailed(
                cufft.Plan1D(
                    out var plan,
                    input.Length,
                    CuFFTType.CUFFT_Z2Z,
                    batch: 1));
            using (plan)
            {
                plan.SetStream(stream);
                CuFFTException.ThrowIfFailed(
                    plan.ExecZ2Z(
                        inputBuffer.View.BaseView,
                        outputBuffer.View.BaseView,
                        CuFFTDirection.FORWARD));

                output = outputBuffer.GetAsArray1D(stream);
            }
            WorkaroundKnownIssue(accelerator, cufft.API);

            Console.WriteLine("Output Values:");
            for (var i = 0; i < output.Length; i++)
            {
                Console.WriteLine($"  [{i}] = {output[i]}");
            }
        }
示例#2
0
        static void Main()
        {
            using var context = Context.Create(builder => builder.Cuda());
            foreach (var device in context)
            {
                using var accelerator = device.CreateAccelerator(context) as CudaAccelerator;
                Console.WriteLine($"Performing operations on {accelerator}");

                var input = new Complex[8];
                for (var i = 0; i < input.Length; i++)
                {
                    input[i] = new Complex(i + 1, 0);
                }

                Console.WriteLine("Input Values:");
                for (var i = 0; i < input.Length; i++)
                {
                    Console.WriteLine($"  [{i}] = {input[i]}");
                }

                var cufft = new CuFFT();
                DoForwardPlan(accelerator, cufft, input, out var output);

                var inverseInput  = output;
                var inverseOutput = new Complex[inverseInput.Length];
                DoInversePlan(accelerator, cufft.API, inverseInput, out _);
            }
        }