Я экспериментирую с оптимизацией некоторых математических операций с использованием С#.net в пакете под названием Grasshopper (часть Rhino3D). Операция довольно проста, но список, на котором он должен быть выполнен, большой и может стать намного больше.
Я использую Parallel.ForEach и списки в моем С# script, и количество конечных результатов, которые я получаю, ниже ожидаемого. Скорее всего, это связано с тем, что list.add не является потокобезопасным (или не потокобезопасным в программном обеспечении, в котором я его строю).
private void RunScript(double z, int x, List<double> y, ref object A)
{
List<double> temp = new List<double>();
double r;
System.Threading.Tasks.Parallel.ForEach(y, numb =>
{
r = Math.Pow((numb * x), z);
temp.Add(r);
});
A = temp;
Пожалуйста, помогите мне выяснить простой и эффективный способ выполнения этой простой математической операции на несколько сотен значений с использованием многопоточности процессора (или если у вас есть предложения о GPU CUDA).
Я надеюсь, что неясное и специфическое программное обеспечение не беспокоит вас, поскольку, насколько я знаю, он работает идентично обычным С#.Net/Python/VB.Net.