Procesimi_paralel
Puna paralele e kompjuterëve
Kompjuterët e parë, në një moment të caktuar kanë mundur të ekzekutojnë vetëm një program, përkatësisht për ta vazhduar punën në programin vijues është dashur që ta përfundojnë komplet ekzekutimin e programit paraprak. Puna paralele e kompjuterëve nuk është diçka që paraqitet sot. Ajo është përdorur shumë më herët dhe si e tillë takohet te kompjuterët që janë shfrytëzuar në laboratore të ndryshme për hulumtime shkencore, të cilët njiheshin edhe si superkompjuterë. Nënkuptohet se për këtë qëllim, është dashur të shkruhen programe speciale komplekse ashtu që të bëhet i mundur ekzekutimi paralel i disa instrukcioneve elementare. Për ekzekutimin e njëkohshëm të disa programeve, më vonë është shfrytëzuar koncepti i ndarjes së kohës (angl. timesharing) së procesorit, duke u caktuar copëza kohore për punë të pjesëve të veçanta të programeve që ekzekutohen. Gjatë kësaj, çdo program që ekzekutohet, për kompjuterin nënkuptohet edhe si një punë ose task (angl. task), kurse mënyra e ekzekutimit të programeve në këtë rast njihet si multitasking. Sistemi operativ, çdo programi që ekzekutohet i rezervon memorie dhe variabla të veçanta. Në këtë rast, shfrytëzuesi i kompjuterit e ka përshtypjen se njëkohësisht ekzekutohen disa programe, gjë që realisht nuk ndodh. Shfrytëzohet edhe koncepti i ekzekutimit të njëkohshëm i më shumë thredave (angl. threads), i cili njihet si multithreading. Në këtë mënyrë, njëkohësisht ekzekutohen pjesët elementare të programeve, të cilët njihen si threda. Për dallim nga koncepti multitasking, gjatë shfrytëzimit të konceptit multithreding, për thredat e veçantë sistemi operativ nuk rezervon memorie dhe variabla të veçanta. Aktualisht, gjatë shkruarjes së programeve për punë paralele të bërthamave procesorike, për ndarjen e punëve shfrytëzohet paralelizimi i detyrave (angl. task-parallelism) dhe paralelizimi i të dhënave (angl. data-parallelism), gjë që do të thotë se ndahen punët nëpër bërthama, por edhe mund të ndahen të dhënat. Për shfrytëzimin e njëkohshëm të punës së disa bërthamave procesorike, çdo problem duhet të ndahet në pjesë të pavarura, me çka mundësohet që njësitë procesorike t'i ekzekutojnë pjesët përkatëse të algoritmit, duke punuar njëkohësisht me njësitë tjera procesorike. Programet, përkatësisht aplikacionet gjatë ekzekutimit të tyre ndahen në procese (angl. pesses). Proceset në fakt paraqesin pjesët e programeve që aktualisht ekzekutohen dhe njihen edhe si detyra (angl. task). Për t'u ekzekutuar në mikroprocesor, proceset pastaj ndahen më tutje në copëza (angl. slice) elementare të instrukcioneve që mund të ekzekutohen në mikroprocesor, që siç u tha më sipër njihen si threda (angl. threads). Çdo proces në vedi përmban së paku një thred që ekzekutohet në mikroprocesor. Proceset janë të pavarur, kurse thredat janë pjesë përbërëse të proceseve. Sistemi operativ për çdo proces i rezervon resurset e nevojshme, siç është hapësira e memories, mikroprocesorin, etj., përkatësisht e ndanë hapësirën memoruese, kurse thredet e shfrytëzojnë hapësirën memoruese që u është ndarë proceseve përkatëse. Proceset mund të komunikojnë mes vedi, kurse thredat mund të komunikojnë mes vedi vetëm me thredat e një procesi. Programet shkruhen duke i shfrytëzuar metodat e një gjuhe programuese, në bazë të algoritmit për zgjidhje të problemit. Kurse gjatë ekzekutimit të instrukcioneve që përfshihen në një program ato copëtohen në procese (angl. processes). Te mikroprocesorët me më shumë bërthama procesorike, disa threda (angl. multiple threads) mund të ekzekutohen njëkohësisht (nga nji thred në çdo bërthamë). Proceset ekzekutohen në kompjuter pasi të ndahen si detyra (angl. task). Detyrat në vete përmbajnë një grumbull instrukcionesh. Kurse, gjatë ekzekutimit të tyre, sistemi operativ i ndan ato në njësi elementare ekzekutive, të cilat njihen edhe si threda (angl. thread). Thredi në fakt paraqesin sekuenca më e vogël e instrukcioneve që mund të menaxhohen nga sitemi operativ. Thredi përfshihet brenda nji procesi, ose brenda nji tasku, përkatësisht procesi ose tasku përmban më shumë threda. Te kompjuterët me nji procesor, përmes ndarjes së kohës ekzekutohen threda të ndryshëm (në një moment ekzekutohet vetëm një thred). Shfrytëzuesi e ka përshtypjen se ekzekutohen njëkohësisht. Te mikroprocesorët me më shumë bërthama, disa threda mund të ekzekutohen njëkohësisht. Në këtë rast flitet për multithreading ose multitasking. Numri i thredave varet nga numri i bërthamave procesorike dhe çdo bërthame fizike sistemi operativ i ndan një thred. Por, edhe procesorëve logjik mund t'u ndahet për ekzekutim nga një thred. Kjo do të thotë se çdo procesori fizik sistemi operativ mund t'i ndajë dy threda për ekzekutim të njëkohshëm. Thredave u ndahen për ekzekutim detyra-punë elementare (tasqe). Por, nëse thredi nuk ka më punë për ekzekutim, ai i huazon punët e thredave tjerë (i merr ato që janë duke pritur më gjatë). Por, nëse thredat shfrytëzojnë resurse të njëjta (p.sh. memorien), puna e tyre duhet të jetë e sinkronizuar (jo e pavarur). Për këtë qëllim futet në përdorim funkcioni i mbylljes (angl. lock) të thredave. Paralelizimi i programeve