Hello again
Sorry OriginalGriff, and others..
I've attached the loop I would like to send to the GPU.
As for Cudafy, I've stumbled upon it, and other dll's.. microsoft's, nvidia, cuda.net etc.. and didn't understand nothing.
I realized the inner loop: foreach (decimal Quote in QuotesList) takes most of the processing time.. but the functions in there are written impeccable.
So back to my question, f I'll divide the Parallel.ForEach loop to the GPU - would it run faster? and if so, how it's done ??
Please forgive my newbidity and many thanks for your help
Parallel.ForEach<params10>(Params10List, parallelOptions, Prm10 =>
{
SectionParams T1 = new SectionParams();
T1.TempWeek = TempWeek;
T1.Counter = -1;
StrategyData StrategyDataTempT1 = new StrategyData();
StrategyDataTempT1.WeekResults = new List<decimal>();
StrategyDataTempT1.Prm10 = Prm10;
StrategyDataTempT1.Symbol = Symbol;
StrategyDataTempT1.StrNumber = StrategyNumber;
StrategyDataTempT1.SubStrNumber = Prm10.SubStrategyNum;
Strategys StrategyT1 = new Strategys(Point, Spread, Prm10);
foreach (decimal Quote in QuotesList)
{
T1.Counter++;
#region //Save weekly results:
if (T1.TempWeek < DateTimeList[T1.Counter])
{
SaveWeekResults(StrategyDataTempT1, T1.LastWeekSum);
T1.LastWeekSum = StrategyDataTempT1.TotalGain;
T1.TempWeek = T1.TempWeek.AddDays(7);
}
#endregion //(Save weekly results)
T1.StrategyRequest = StrategyT1.OperateStrategy(Quote, StrategyNumber);
#region//Strategy analysis:
if (T1.StrategyRequest != 0)
{
CalculateClosedDeals(Quote, ref Spread, ref T1, T1.StrategyRequest);
BuySellWithOrCounterDirection(ref StrategyDataTempT1, ref T1, ref QuotesList);
}
T1.OpenDealsSum = CalculateOpenDeals(Quote, ref Spread, ref T1);
StrategyDataTempT1.TotalGain = T1.CloseDralsSum + T1.OpenDealsSum;
CalcMaxDD(ref T1, StrategyDataTempT1);
#endregion//(Strategy analysis)
}
SaveWeekResults(StrategyDataTempT1, T1.LastWeekSum);
T1.TempWeek = FirstSaturday;
StrategyDataTempT1.TotalGain = Math.Round(StrategyDataTempT1.TotalGain, PointRound);
StrategyDataTempT1.MaxSizeDeal = T1.MaxSizeDeal;
StrategyDataTempT1.DealSends = T1.DealSends;
if (StrategyDataTempT1.MaxDD != 0)
StrategyDataTempT1.GainToMaxDD = StrategyDataTempT1.TotalGain / StrategyDataTempT1.MaxDD;
else
StrategyDataTempT1.GainToMaxDD = 0;
#region //Calc STDEV:
if (StrategyDataTempT1.TotalGain != 0)
{
T1.Avg = StrategyDataTempT1.WeekResults.Average();
foreach (decimal WResult in StrategyDataTempT1.WeekResults)
{
T1.Value = WResult - T1.Avg;
T1.sumOfDerivation += ((T1.Value) * (T1.Value));
}
T1.DsumOfDerivation = (double)T1.sumOfDerivation;
StrategyDataTempT1.STDEV = Math.Sqrt((1.0 / (double)StrategyDataTempT1.WeekResults.Count()) * T1.DsumOfDerivation);
}
else
StrategyDataTempT1.STDEV = 0;
#endregion //(Calc STDEV)
#region //Save results to List :
lock (StrategyDataList)
{
StrategyDataList.Add(StrategyDataTempT1);
}
#endregion //(Save results to List)
});
</decimal></params10>