Паралелизам податакаПаралелизам података је форма паралелне обраде која се врши преко више процесора у окружењима за паралелну обраду. Паралелна обрада се фокусира на дистрибуцију података на виже различитих чворова паралелне обраде. Паралелизам података је супротност паралелизму затадатака (енгл. task). ОписУ мултипроцесорском систему извршавање једног сета инструкција (SIMD), паралелизам података се постиже када сваки процесор извршава исти задатак на различитим деловима дистрибуираних података. У неким ситуацијама, једна нит избршења контролише операције на свим деловима података. У другим ситуацијама, различите нити контролишу операцију али извршавају исти код. На пример, разматрамо двопроцесорски систем (имамо процесоре А и Б) у паралелном окружењу, и желимо да урадимо задатак над неким податком Паралелизам података наглашава дистрибуирану (паралелну) природу података, за разлику од паралелизма задатака. Већина реалних програмских грешака се догађају негде између паралелизма задатака и паралелизма података. ПримерПрограм, који је доле написан у псеудокоду, примењује неку произвољну операцију. Овде if CPU = "a" lower_limit := 1 upper_limit := round(d.length/2) else if CPU = "b" lower_limit := round(d.length/2) + 1 upper_limit := d.length for i from lower_limit to upper_limit by 1 foo(d[i]) Ако се горенаведени пример изврши на двопроцесорском систему код ће се извршити следећим током:
Овај концепт може да се генерализује на било који број процесора. Међутим, када се повећа број процесора, може бити корисно да се реконструише програм на сличан начин (где би for i from cpuid to d.length by number_of_cpus foo(d[i]) На пример, на двопроцесорском систему, процесор А ( JVM ПримерСличан претходном примеру, паралелизам података је могуће имплементирати користећи Јава (Џава) виртуену машину (JVM), користећи Ateji PX, екстензију Јаве. Код испод илуструје паралелизам података на JVM: Могуће је одредити број грана у паралелној композицији. Ово се користи ради извршавања || оператора[1] на свим елементима низа или колекције: [
// инкрементира све елементе низа паралелно
|| (int i: N) array[i]++;
]
The equivalent sequential code would be: [
// инкрементира све елементе низа један за другим
for(int i: N) array[i]++;
]
Квантификација може да уведе произвољан број итератора и филтера. Ево како би ажурирали горњи леви троугао матрице: [
||(int i:N, int j:N, if i+j<N) matrix[i][j]++;
]
Види јошБелешке
Референце
Литература
|
Portal di Ensiklopedia Dunia