Здрасте! Задача довольна простая, но что-то я столкнулся с затруднениями. Суть в следующем: нужно произвести произведение матриц на нескольких ядрах, на нескольких потоках.
Про ядра:
Данная задача решается с помощью класса
Parallel:
КодList<Action> actions = new List<Action>();
int m = a.Rows;
int step = m / countCPU;
// производим разделение начальных данных (то есть дробим матрицу на подматрицы)
for (int i = 0; i < countCPU; i++)
{
int indexMin = i * step;
int indexMax = (i == (countCPU- 1)) ? (m - 1) : (step * (i + 1) - 1);
// метод CalcMulty выполняет собственное произведение матриц
actions.Add(delegate() { CalcMulty(a.getRangeRows(indexMin, indexMax), b); });
}
// выполняем операции и делаем замер времени
Stopwatch time = new Stopwatch();
time.Start();
Parallel.Invoke(new ParallelOptions() { MaxDegreeOfParallelism = countCPU}, actions.ToArray());
time.Stop();
return time.Elapsed;
Тут все в порядке, выполняются задачи на ядрах, но вот вопрос, как указать число ПОТОКОВ на которых нужно выполнять данную задачу (например: 1 ядро 1 поток, 1 ядро 2 потока, 2 ядра по 1 потоку на ядро, etc)
Желательно с небольшим примерном, спасибо!
P.S. возможно это можно сделать с помощью
TaskScheduler?