У меня есть большой одномерный массив, полный данных Zmap (данные о высоте), массив довольно огромен, он состоит из 100 выборок измерений пикселя площади. Мне нужно обработать его несколькими способами, чтобы можно было исправить еще один заблокированный битмап. Чтобы ускорить обработку этого большого массива, я использую parallel.for
ea:
public void MarkErrorSamples(int[]Depthdata,int lowbound)
{
Parallel.For (0, depthData.Length, sampleN =>
{
if(depthData[sampleN] < lowbount)
{
// update redchannel Red value by 20
int x= xfromLockedmemPos(sampleN); // x value based upon sampleN
int y =yfromLockedmemPos(sampleN);
setpixel(x,y,AddRed((getpixelRed(x,y),20);
}
});
}
Приведенный выше код работает, но у меня есть некоторые сомнения по поводу доступа к depthdata[sampleN]
так, как я это делаю сейчас. Меня беспокоит то, что я думаю, что потоки могут блокировать массив каждый раз, когда поток запускается для извлечения из него данных. Поэтому мне интересно, как правильно работать с данными массива «внешний блок» в Parallel.for
Обратите внимание, что в приведенной выше пустоте не требуется изменять сами данные глубины, а только выполнять действие с растровым изображением (используя растровое изображение битов блокировки).
false sharing
, которые могут серьезно повлиять на параллельный алгоритм, например, из-за принудительной перезагрузки кэша процессора. . - person Matthew Watson   schedule 06.11.2015