Сообщение всё перепробывал от 17.04.2019 9:33
Изменено 17.04.2019 9:40 vvv848165@ya.ru
всё перепробывал
даже копирование данных до и после не спасло
private struct MyDataThread {
public double[][] tmp;
public FilterSections[] fs;
public double[] src;
public long no_point;
}
private static MyDataThread MyAction(int ic, ParallelLoopState p, MyDataThread obj)
{
obj.tmp[ic] = new double[obj.no_point];
obj.fs[ic].Next(obj.tmp[ic], obj.src);
return obj;
}
.................
Parallel.For<MyDataThread>(0, no_channel, () => {
MyDataThread dt = new MyDataThread();
dt.tmp = tmp;
dt.fs = fs;
dt.src = src;
dt.no_point = no_point;
return dt;
}, MyAction, (MyDataThread obg) => {
tmp = obg.tmp;
});
всё перепробывал
даже копирование данных до и после не спасло
В чём может быть ещё потеря производительности
если в С++ всё по честному (если распределил на 4 проца — то выполнится в 4 раза быстрее)
то в С# какой-то облом (если распределил на 4 проца то выполнится только в 3 раза быстрее (а то и в два))
private struct MyDataThread {
public double[][] tmp;
public FilterSections[] fs;
public double[] src;
public long no_point;
}
private static MyDataThread MyAction(int ic, ParallelLoopState p, MyDataThread obj)
{
obj.tmp[ic] = new double[obj.no_point];
obj.fs[ic].Next(obj.tmp[ic], obj.src);
return obj;
}
.................
Parallel.For<MyDataThread>(0, no_channel, () => {
MyDataThread dt = new MyDataThread();
dt.tmp = tmp;
dt.fs = fs;
dt.src = src;
dt.no_point = no_point;
return dt;
}, MyAction, (MyDataThread obg) => {
tmp = obg.tmp;
});
В чём может быть ещё потеря производительности
если в С++ всё по честному (если распределил на 4 проца — то выполнится в 4 раза быстрее)
то в С# какой-то облом (если распределил на 4 проца то выполнится только в 3 раза быстрее (а то и в два))