<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sr">
	<id>https://siwiki.rs/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8%2F%D0%9A2_2020</id>
	<title>Мултипроцесорски системи/К2 2020 - Историја измена</title>
	<link rel="self" type="application/atom+xml" href="https://siwiki.rs/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8%2F%D0%9A2_2020"/>
	<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2020&amp;action=history"/>
	<updated>2026-06-04T04:52:47Z</updated>
	<subtitle>Историја измена ове странице на пројекту</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2020&amp;diff=5116&amp;oldid=prev</id>
		<title>KockaAdmiralac: Sedmi zadatak</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2020&amp;diff=5116&amp;oldid=prev"/>
		<updated>2022-12-07T08:55:15Z</updated>

		<summary type="html">&lt;p&gt;Sedmi zadatak&lt;/p&gt;
&lt;a href=&quot;https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2020&amp;amp;diff=5116&amp;amp;oldid=5115&quot;&gt;Прикажи измене&lt;/a&gt;</summary>
		<author><name>KockaAdmiralac</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2020&amp;diff=5115&amp;oldid=prev</id>
		<title>KockaAdmiralac: Naziv predmeta</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2020&amp;diff=5115&amp;oldid=prev"/>
		<updated>2022-12-07T00:29:50Z</updated>

		<summary type="html">&lt;p&gt;Naziv predmeta&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старија измена&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Верзија на датум 7. децембар 2022. у 02:29&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l145&quot;&gt;Ред 145:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 145:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категорија:Рокови]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категорија:Рокови]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категорија:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Назив предмета&lt;/del&gt;]]&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;!-- Zameniti sa nazivom predmeta --&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категорија:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Мултипроцесорски системи&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>KockaAdmiralac</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2020&amp;diff=5114&amp;oldid=prev</id>
		<title>KockaAdmiralac: WIP, bez sedmog zadatka</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D1%83%D0%BB%D1%82%D0%B8%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9A2_2020&amp;diff=5114&amp;oldid=prev"/>
		<updated>2022-12-07T00:29:25Z</updated>

		<summary type="html">&lt;p&gt;WIP, bez sedmog zadatka&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{tocright}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Drugi kolokvijum 2020. godine&amp;#039;&amp;#039;&amp;#039; održan je 7. decembra. Trajao je 105 minuta i postavka je dostupna sa [http://mups.etf.bg.ac.rs/ispiti/2020-2021/si4mps_k2_20202021.pdf stranice predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Objasniti princip paralelizacije kod &amp;#039;&amp;#039;dataflow&amp;#039;&amp;#039; programskog modela. Nacrtati strukturu ovakvog sistema i objasniti princip funkcionisanja.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;#039;&amp;#039;Dataflow&amp;#039;&amp;#039; programski model postiže paralelizaciju predstavljanjem programa kao grafa sa blokovima instrukcija kao čvorovima koji mogu da se izvrše čim su im podaci spremni. Grane ovakvog grafa predstavljaju zavisnosti po podacima. Između čvorova se prosleđuje token izvršavanja, i svi čvorovi koji imaju token se izvršavaju u paraleli.&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Objasniti prednosti i nedostatke primene zajedničke keš memorije u multiprocesorskim sistemima.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Prednosti:&lt;br /&gt;
* Pozitivna interferencija: podatak koji je dovukao jedan procesor može služiti i drugom.&lt;br /&gt;
* Nema potrebe voditi računa o koherenciji keša.&lt;br /&gt;
* Izbegava se lažna deljivost.&lt;br /&gt;
Mane:&lt;br /&gt;
* Negativna interferencija: podatak koji je dovukao jedan procesor može biti izbačen od strane drugog.&lt;br /&gt;
* Što je keš memorija veća to je i sporija.&lt;br /&gt;
* Svi procesori pristupaju istoj keš memoriji, pa im je propusni opseg zajedno ograničen&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Kakva je motivacija za unapređenje u protokolu MESIF? Objasniti semantiku dodatnog stanja. Precizno objasniti sve akcije koje su vezane za ove stanje i nacrtati samo deo dijagrama stanja vezan za ovo stanje.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
U MESI protokolu se u &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; stanju nije znalo ko će prilikom operacije &amp;lt;code&amp;gt;Transfer&amp;lt;/code&amp;gt;, odnosno prenošenja podatka iz jedne u drugu keš memoriju, biti taj koji prenosi podatak. Novouvedeno stanje &amp;lt;code&amp;gt;F&amp;lt;/code&amp;gt; (&amp;#039;&amp;#039;forward&amp;#039;&amp;#039;) je isto kao &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; osim što služi da označi procesor koji će raditi to prosleđivanje podatka preko magistrale. Dodeljuje se procesoru koji je poslednji pročitao podatak, tako da se u ovo stanje ulazi čim se pročita podatak sa magistrale, a iz njega izlazi čim se detektuje čitanje ili upis.&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Diskutovati kako se reorganizacijom deljenih struktura podataka sa mogućnostima upisa u multiprocesorskom sistemu mogu poboljšati performanse u sledećim slučajevima: a) niz stuktura&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; sa dva polja kojima pristupaju dva različita procesa i b) niz čiji elementi su manji od veličine bloka kojima pristupaju različiti procesi.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Niz struktura sa po dva polja se može pretvoriti u dva niza, tako da svaki procesor pristupa drugačijem delu memorije i neće izbacivati jedan drugog iz respektivnih keš memorija (izazivati lažnu deljivost). Niz sa elementima manjim od veličine bloka se može izmeniti tako da svaki element sadrži dovoljno praznog prostora (&amp;#039;&amp;#039;padding&amp;#039;&amp;#039;) unutar sebe da procesori ne dohvate elemente ostalih procesora prilikom dohvatanja svojih.&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Korišćenjem MPI tehnologije paralelizovati funkciju u prilogu koja vrši pronalaženje svih indeksa u string str na kojima se nalazi znak c. Obratiti pažnju na efikasnost paralelizacije. Smatrati da je MPI okruženje već inicijalizovano i da svi procesi treba da učestvuju u obradi. Proces sa rangom 0 dobija ulazne podatke, raspodeljuje ih ostalim procesima, učestvuje u obradi i sakuplja rezultate. Pronađeni indeksi u rezultujućem nizu treba da odgovaraju ulaznom nizu. Smatrati da alokacije memorije uvek uspevaju.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int* find_all_occurences(char* str, char c) {&lt;br /&gt;
    int* loc = malloc(sizeof(int) * strlen(str)), j = 0;&lt;br /&gt;
    for (int i = 0; i &amp;lt; strlen(str); i++) {&lt;br /&gt;
        if (str[i] == c) {&lt;br /&gt;
            loc[j++] = i;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    loc = realloc(loc, (j + 1) * sizeof(int));&lt;br /&gt;
    loc[j] = -1;&lt;br /&gt;
    return loc;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define MASTER 0&lt;br /&gt;
&lt;br /&gt;
int* find_all_occurences(char* str, char c, int length, int* locSize) {&lt;br /&gt;
    int rank;&lt;br /&gt;
    MPI_Comm_rank(MPI_COMM_WORLD, &amp;amp;rank);&lt;br /&gt;
    int* loc = malloc(sizeof(int) * length);&lt;br /&gt;
    *locSize = 0;&lt;br /&gt;
    for (int i = 0; i &amp;lt; length; i++) {&lt;br /&gt;
        if (str[i] == c) {&lt;br /&gt;
            loc[(*locSize)++] = i + rank * length;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return loc;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    // ...&lt;br /&gt;
    MPI_Status status;&lt;br /&gt;
    int size;&lt;br /&gt;
    int rank;&lt;br /&gt;
    MPI_Comm_size(MPI_COMM_WORLD, &amp;amp;size);&lt;br /&gt;
    MPI_Comm_rank(MPI_COMM_WORLD, &amp;amp;rank);&lt;br /&gt;
    char *str, c;&lt;br /&gt;
    if (rank == MASTER) {&lt;br /&gt;
        // Input str, c&lt;br /&gt;
    }&lt;br /&gt;
    int length = strlen(str);&lt;br /&gt;
    int chunk = length / size;&lt;br /&gt;
    MPI_Bcast(&amp;amp;chunk, 1, MPI_INT, MASTER, MPI_COMM_WORLD);&lt;br /&gt;
    MPI_Bcast(&amp;amp;c, 1, MPI_CHAR, MASTER, MPI_COMM_WORLD);&lt;br /&gt;
    char* myStr;&lt;br /&gt;
    if (rank == MASTER) {&lt;br /&gt;
        myStr = str;&lt;br /&gt;
        for (int i = 1; i &amp;lt; size; ++i) {&lt;br /&gt;
            MPI_Send(str + i * chunk, chunk, MPI_CHAR, i, 0, MPI_COMM_WORLD);&lt;br /&gt;
        }&lt;br /&gt;
    } else {&lt;br /&gt;
        myStr = malloc(chunk * sizeof(char));&lt;br /&gt;
        MPI_Recv(myStr, chunk, MPI_CHAR, MASTER, 0, MPI_COMM_WORLD, &amp;amp;status);&lt;br /&gt;
    }&lt;br /&gt;
    int locSize = 0;&lt;br /&gt;
    int* loc = find_all_occurences(myStr, c, chunk, &amp;amp;locSize);&lt;br /&gt;
    if (rank == MASTER) {&lt;br /&gt;
        int totalLocSize = locSize;&lt;br /&gt;
        loc = realloc(loc, length * sizeof(int));&lt;br /&gt;
        for (int i = 1; i &amp;lt; size; ++i) {&lt;br /&gt;
            int otherLocSize;&lt;br /&gt;
            MPI_Recv(&amp;amp;otherLocSize, 1, MPI_INT, i, 1, MPI_COMM_WORLD, &amp;amp;status);&lt;br /&gt;
            MPI_Recv(loc + totalLocSize, otherLocSize, MPI_INT, i, 2, MPI_COMM_WORLD, &amp;amp;status);&lt;br /&gt;
            totalLocSize += otherLocSize;&lt;br /&gt;
        }&lt;br /&gt;
        loc = realloc(loc, (totalLocSize + 1) * sizeof(char));&lt;br /&gt;
        loc[totalLocSize] = -1;&lt;br /&gt;
    } else {&lt;br /&gt;
        MPI_Send(&amp;amp;locSize, 1, MPI_INT, MASTER, 1, MPI_COMM_WORLD);&lt;br /&gt;
        MPI_Send(loc, locSize, MPI_INT, MASTER, 2, MPI_COMM_WORLD);&lt;br /&gt;
        free(loc);&lt;br /&gt;
    }&lt;br /&gt;
    free(str);&lt;br /&gt;
    // ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Kakva je uloga bafera prilikom MPI komunikacije između tačno dva procesa (&amp;#039;&amp;#039;point-to-point&amp;#039;&amp;#039; komunikacije)? Kakvu vrstu komunikacije baferi omogućavaju? Da li programer svestan postojanja bafera? Odgovor ilustrovati slikom.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Sistemski bafer u MPI služi za asinhrono primanje i slanje podataka, ali takođe služe i za rukovanje situacijom kada procesu stignu poruke koje ne može odmah da obradi. Sistemski bafer je transparentan za programera.&lt;br /&gt;
&lt;br /&gt;
== 7. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Dat je multiprocesorski sistem sa 4 identična procesora, koji koristi &amp;#039;&amp;#039;MOESI&amp;#039;&amp;#039; protokol za održavanje koherencije keš memorije. Svaka keš memorija ima po 2 ulaza, koji su veličine jedne reči. Preslikavanje je direktno. Početne vrednosti podataka su 0. Svaki upis uvećava vrednost izmenjenog podatka za 1. Na početku su sve keš memorije prazne. Data je sledeća sekvenca pristupa memoriji:&lt;br /&gt;
# P0,R,A0&lt;br /&gt;
# P2,R,A0&lt;br /&gt;
# P0,W,A0&lt;br /&gt;
# P1,R,A0&lt;br /&gt;
# P0,W,A0&lt;br /&gt;
# P0,W,A2&lt;br /&gt;
# P0,R,A1&lt;br /&gt;
# P2,W,A0&lt;br /&gt;
&lt;br /&gt;
* Napisati stanja koherencije u svim procesorima i stanje memorije posle svake promene i skicirati opisani sistem u trenutku 8.&lt;br /&gt;
* Koliko puta koji od procesora pristupa memoriji? Za svaki pristup navesti razlog.&lt;br /&gt;
* Koliki je Hit Rate za svaki od procesora (brojati i čitanje i upis, prikazati zbirno)?&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Назив предмета]]&amp;lt;!-- Zameniti sa nazivom predmeta --&amp;gt;&lt;/div&gt;</summary>
		<author><name>KockaAdmiralac</name></author>
	</entry>
</feed>