Algo.Gpu/README.md
StockSharp.Algo.Gpu is a specialized library that provides GPU-accelerated calculations for technical indicators using the ILGPU framework. It enables massive parallel processing of market data indicators on CUDA, OpenCL, and CPU accelerators, offering significant performance improvements for batch calculations and strategy optimization scenarios.
GpuCandle and GpuIndicatorResult structs designed for GPU memory layoutThe typical workflow involves creating an accelerator, setting up input data, and running batch calculations:
using StockSharp.Algo.Gpu;
using StockSharp.Algo.Gpu.Indicators;
using StockSharp.Algo.Indicators;
// Create best available accelerator (CUDA > OpenCL > CPU)
var (context, accelerator) = GpuAcceleratorFactory.CreateBestAccelerator();
// Convert candles to GPU format
var gpuCandles = candles.Select(c => new GpuCandle(
c.OpenTime, c.OpenPrice, c.HighPrice, c.LowPrice, c.ClosePrice, c.TotalVolume
)).ToArray();
// Define SMA parameters to test
var smaParams = new GpuSmaParams[]
{
new(10, (byte)Level1Fields.ClosePrice),
new(20, (byte)Level1Fields.ClosePrice),
new(50, (byte)Level1Fields.ClosePrice)
};
// Calculate SMA for multiple parameter sets
using var calculator = new GpuSmaCalculator(context, accelerator);
IGpuIndicatorResult[][][] gpuResults = calculator.Calculate(new[] { gpuCandles }, smaParams);
// Convert GPU results to indicator values
var smaIndicator = new SimpleMovingAverage { Length = 20 };
foreach (var seriesResult in gpuResults[0])
{
foreach (IGpuIndicatorResult gpuResult in seriesResult)
{
if (gpuResult.GetIsFormed())
{
var indicatorValue = gpuResult.ToValue(smaIndicator);
Console.WriteLine($"SMA: {indicatorValue.ToDecimal()} at {indicatorValue.Time}");
}
}
}
// Cleanup
accelerator.Dispose();
context.Dispose();
GpuAcceleratorFactory – factory for creating and selecting optimal ILGPU acceleratorsGpuIndicatorCalculatorBase – base class for all GPU indicator calculatorsGpuCandle – GPU-optimized candle data structure with float precision for performanceIGpuIndicatorResult – interface for GPU indicator calculation results with ToValue conversionGpuIndicatorResult – standard GPU result structure implementing IGpuIndicatorResultIGpuIndicatorParams – interface for GPU indicator parameter structuresIGpuIndicatorResult – interface for GPU calculation results with ToValue() conversion methodfloat) for optimal performance