A programozásban az SPMD ( egy program, több adat ) a párhuzamosság elérésére használt technika; ez a Flynn-osztályozásban a számítástechnikai rendszerek MIMD -osztályának alkategóriája .
Ebben a kategóriában a feladatok szét vannak választva, és egyszerre futnak több processzoron, különböző bemenettel a gyorsabb eredmény érdekében. Az SPMD a párhuzamos programozás leggyakoribb stílusa . [1] Ez is előfeltétele olyan fogalmak feltárásának, mint az aktív üzenetek és az elosztott megosztott memória .
Az SPMD-ben sok autonóm processzor egyszerre hajtja végre ugyanazt a programot különböző helyekről (értsd: kódrészek), és nem a SIMD által a különböző adatok feldolgozásához szükséges merev sorrendben. Az SPMD-nek köszönhetően a feladatok általános célú processzorokon is végrehajthatók. A SIMD -nek vektorprocesszorokra van szüksége az adatfolyam-vezérléshez . Vegye figyelembe, hogy ez a két módszer nem zárja ki egymást.
Az SPMD-t általában üzenetküldő programozásnak nevezik elosztott memória architektúrákhoz. Az elosztott memória „csomópontoknak” nevezett független számítógépek halmazából áll. Mindegyik csomópont saját programot futtat, és üzenetek küldésével és fogadásával kommunikál a többi csomóponttal, ehhez hívja a küldési és fogadási eljárásokat. Az akadály szinkronizálás üzenetek segítségével valósítható meg. Üzenetek küldhetők kommunikációs mechanizmusok, például TCP/IP ( Ethernethez ) vagy speciális nagysebességű kapcsolatok, például Myrient és Supercomputer Interconnect segítségével. A programok szekvenciális szakaszait (szakaszait) ugyanazokkal a számításokkal hajtják végre az összes csomóponton, és nem úgy, hogy az eredményt egy csomóponton számítják ki, és elküldik másoknak.
Jelenleg a programozó el van szigetelve a szabványos interfészeken, például PVM és MPI -n keresztül történő üzenettovábbítás részleteitől .
Az elosztott memória a párhuzamos szuperszámítógépeken használt programozási stílus, a Beowulf otthoni klaszterektől a legnagyobb TeraGrid-fürtökig.
Egy megosztott memóriát használó gépen (több processzorral rendelkező számítógépen, amely egyetlen memóriához fér hozzá) üzenetek küldhetők úgy, hogy azok tartalmát ideiglenesen egy megosztott memóriaterületen tárolják. Ez a módszer gyakran a leghatékonyabb a nagyszámú processzorral rendelkező megosztott memóriás gépeknél, különösen a nem egységes memóriaelérésű ( NUMA ) gépeknél, ahol a memória a processzor lokális, és hosszabb ideig tart egy másik processzor memóriájához való hozzáférés. Osztott memória Az SPMD általában szokásos operációs rendszeri folyamatokon keresztül valósul meg .
Az SPMD-vel ellentétben a megosztott memória többfeldolgozása , amelyet szimmetrikus többfeldolgozásnak (SMP) is neveznek , lehetővé teszi a végrehajtás párhuzamosítását azáltal, hogy minden processzoron független alkalmazás-végrehajtási útvonal van, kommunikációs mechanizmusként megosztott memóriát használva. A program egy processzoron indul el, és a végrehajtás párhuzamos szakaszokra oszlik, amelyeket a forráskódban párhuzamosítási direktívák segítségével adunk meg (például az egyik direktíva deklarálja a programkódban egy párhuzamos szakasz kezdetét). A párhuzamos szakaszon belül a processzorok ugyanazt a programot hajtják végre, de eltérő adatokkal. Tipikus példa a párhuzamos DO hurok, ahol a különböző processzorok a ciklusban érintett tömb különálló részeit dolgozzák fel. A ciklus végén a végrehajtási szakaszok szinkronizálódnak, majd csak egy processzor dolgozik tovább, a többi pedig vár. Jelenleg az osztott memóriás többprocesszoros rendszerek szabványos interfésze az OpenMP . Általában könnyű folyamatokkal, úgynevezett szálakkal valósítják meg .
A modern számítógépek lehetővé teszik több párhuzamos üzemmód egyidejű használatát a maximális összhatás elérése érdekében. Az MPI -t használó megosztott memória programok egyidejűleg futhatnak csomópontok halmazán. Mindegyik csomópont lehet megosztott memóriájú számítógép, és párhuzamosan több processzoron végezhet számításokat az OpenMP segítségével. A maximális sebesség egyetlen processzorral való eléréséhez SIMD vektorutasításokat (amelyeket általában a fordító automatikusan generál) és szuperskaláris végrehajtást (amelyet általában maga a processzor dolgoz fel transzparens módon), mint például a csővezetékeket és több párhuzamos funkcióblokkot használnak.
Az SPMD-t 1984-ben Frederick Durham javasolta az IBM -nél nagy teljesítményű párhuzamos gépekre [2] , mint például az RP3 (IBM Research Parallel Processor Prototype) egy kiadatlan irodai levélben. [3] Az 1980-as évek végére sok olyan elosztott számítógép volt, amelyek saját üzenettovábbítási könyvtáraik voltak. Az első SPMD szabvány a PVM volt. Jelenleg a de facto szabvány az MPI. A Cray párhuzamos direktívái az OpenMP közvetlen elődjei voltak.