Распараллелить выполнение цикла на все ядра процессора - C#

Узнай цену своей работы

Формулировка задачи:

Есть цикл for с очень большим количеством итераций, его выполнение отнимает кучу времени, хочу его ускорить с помощью потоков - создать количество потоков равное количеству ядер процессора и чтоб каждый поток проделывал работу со своей частью данных (количество требуемых итераций / количество потоков). Как это сделать? Буду очень благодарен за пример кода. Количество ядер узнаю с помощью Environment.ProcessorCount.

Решение задачи: «Распараллелить выполнение цикла на все ядра процессора»

textual
Листинг программы
Parallel.For(0, ih, y =>
            {
            //for (int y = 0; y < ih; y++)
                for (int x = 0; x < iw; x++)
                {
                    i = iw * y * 3 + x * 3;
                    j = rw * (y % rh) * 3 + (x % rw) * 3;
                    imgValues[i] = (byte)((imgValues[i] & cmask[b]) + (rValues[j] >> cshr[b]));
                    imgValues[i + 1] = (byte)((imgValues[i + 1] & cmask[b]) + (rValues[j + 1] >> cshr[b]));
                    imgValues[i + 2] = (byte)((imgValues[i + 2] & cmask[b]) + (rValues[j + 2] >> cshr[b]));
                }
            });

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5
Похожие ответы