V zadnjih štirih desetletjih so se nosilci procesiranja v digitalnih sistemih razvijali tako v smislu hitrosti delovanja, kot tudi v smislu miniaturizacije osnovnih procesnih entitet. Ob nadaljujočem se tovrstnem trendu bomo v bližnji prihodnosti dosegli nivo miniaturizacije, kjer bo vprašljivo zanesljivo obvladovanje dinamike osnovnih entitet zaradi drugačnih fizikalnih (kvantnih) zakonov, ki veljajo na tem nivoju. Ostali problemi, ki postajajo vse bolj pereči, so prevelika poraba električne energije na pridelano enote »koristne« informacije, slabe možnosti reciklaže računalniških sistemov, relativno velika cena procesnih naprav, itd. Vsi našteti problemi zavirajo prehod iz ere »namiznega« računalništva (angl. desktop computing), ki smo mu bili priča zadnjih 30 let, v ero »vseprisotnega« računalništva (angl. ubiquitous computing). Človek se že od izuma orodja obnaša analitično (angl. top-down approach). Slednje pomeni, da z orodji obdeluje materiale, s čimer troši energijo, zaloge materialov in ustvarja stranske – nekoristne produkte. Mnogi svetovni misleci opozarjajo, da je tak pristop preživet in da moramo preiti v sintezen odnos do razvoja dobrin (angl. bottom up approach), ki predvideva, da bomo produkte bodočnosti gradili iz primarnih entitet na osnovi avtomatiziranih postopkov. Vse navedeno daje področju računalništva neslutene možnosti razvoja na nova področja, kot so področja farmacije, medicine, gradbeništva, proizvodnje dobrin, itd. Iz slednjih razlogov se že danes iščejo alternativne procesne platforme, ki bi predhodno navedene probleme zaobšle in ponudile značilnosti sinteznega pristopa. V okviru predmeta bomo tako pregledali aktualne alternativne platforme procesiranja kot so kvantni celularni automati (angl. quantum dot cellular automata), DNK nosilci procesiranja, nanocevi (angl. nanotubes), optični nosilci procesiranja, itd. in pa tudi alternativne metode procesiranja, ki jih tovrstne platforme omogočajo. Med metodami si bomo ogledali kvantno procesiranje, reverzibilno procesiranje, večstanjsko procesiranje, amorfno procesiranje, itd.

Cilj predmeta je pridobiti znanja za razvoj inovativnih računalniških storitev in aplikacij, ki se izvajajo v oblaku (Cloud). Računalništvo v oblaku pomembno spreminja načine razvoja aplikacij in pri predmetu se bomo spoznali s koncepti, arhitekturami in tehnologijami za oblak – s tako imenovano cloud-native arhitekturo.
Poleg tega, da bomo osvojili poglobljeno znanje in poznavanje področja računalništva v oblaku in vseh nivojev storitvene usmerjenosti (XaaS; Iaas, PaaS in SaaS), bomo podrobno spoznali arhitekturni model, vzorce in najboljše prakse za razvoj cloud-native aplikacij, kar vključuje množico konceptov.
Začeli bomo z arhitekturo mikrostoritev in podrobno spoznali razvojne vzorce za mikrostoritve. To bomo združili z vsebniki (conatinerji) Docker (in ostalimi) ter mikro-kerneli. Spoznali se bomo z orodji za orkestracijo vsebnikov, predvsem Kubernetes (in ostalimi).
Nadaljevali bomo s spoznavanjem konceptov cloud-native arhitekture: storitvami, asinhronimi vzorci klicanja storitev, prekinjevalci toka, reaktivnim modelom razvoja mikrostoritev, pretočnimi dogodki (event streaming aka Apache Kafka), konfiguracijo, odkrivanjem storitev (service discovery), preverjanjem vitalnosti (health check), metrikami, varnostjo, odpornostjo na napake in drugimi.
Cilj bo razumeti in razviti oblačne aplikacije, ki se izvajajo na odporni in elastični (resilient and elastic) oblačni infrastrukturi in platformi in razumeti, kako te aplikacije delujejo in kako jih nameščamo na različne ponudnike oblačnih storitev (Amazon AWS, Google AppEngine, Microsoft Azure, Cloud Foundry in druge). V okviru predmeta se bomo spoznali z najpopularnejšimi PaaS platformami. Spoznali bomo koncepte zasebnih, javnih in hibridnih oblakov. Prav tako bomo vzpostavili lasten zasebni/hibridni računalniški oblak.
Obenem se bomo spoznali s praksami DevOps, ki so nujne za razvoj oblačnih rešitev ter spoznali koncepte in projekte CNCF (Cloud Native Computing Foundation), kot so Kubernetes, Prometheus, OpenTracing, Fluentd, Istio, Linkerd, gRPC in druge.
Predmet je praktično orientiran. V okviru vaj bodo študenti v skupinah razvijali inovativne oblačne rešitve z uporabo ogrodij, kot so Spring Boot, KumuluzEE, Node.js, Docker, Kubernetes, Prometheus ter oblake AWS, AppEngine, Azure in druge. Razumeli bodo pomen inovacij v oblaku.
Najboljši študenti bodo imeli možnost sodelovati na inovativnih projektih.

  1. Vzporedno in porazdeljeno računanje: potreba po paralelizaciji
  2. Moderne paralelne arhitekture: sistemi z deljenim pomnilnikom, sistemi s porazdeljenim pomnilnikom, grafične kartice in drugi oprocesorji, vezja FPGA, heterogeni sistemi
  3. Vzporedni programski jeziki in okolja: OpenMP, OpenMPI, OpenCL
  4. Paralelni algoritmi, analiza in programiranje: podatkovni in funkcijski paralelizem, cevovod, raztegljivost, načini programiranja, vzorci, strategije, koncepti in primeri uporabe, analiza pohitritev, raztegljivost
  5. Implementacija tipičnih algoritmov s področja znanosti na omenjenih arhitekturah, izbira prave arhitekture za algoritem
  6. Zmogljivost paralelnih sistemov: uravnavanje obremenitve, razporejanje opravil, stroški komunikacije, vpliv predpomnilnika, prostorska in časovna lokalnost, energijska učinkovitost
  7. Uporaba nacionalne infrastrukture za visoko zmogljivo računanje: dostop, računski viri, shranjevanje podatkov, priprava okolij, izvajanje daljših simulacij
  8. Napredne teme: eksa račuananje, programiranje FPGA, pomen predstavitve podatkov na hitrost računanja

Pri tem predmetu bomo obravnavali uporabo računalniške strojne opreme, s poudarkom na vgrajenih sistemih, povezanih v brezžična omrežja, na katerih izvajamo inteligentno obdelavo podatkov. Vhodno-izhodne ali periferne naprave so najvidnejši del vsakega računalniškega sistema. Povezane so z računalnikom z namenom razširitve njegovih funkcionalnosti. Omogočajo komunikacijo z računalnikom in bolj trajno shranjevanje podatkov. Ker pa so računalniški sistemi že nekaj časa zelo raznoliki, lahko med periferne naprave štejemo tudi senzorje in aktuatorje. V tesni povezavi s perifernimi napravami so tudi vodila, namenjena priključevanju teh naprav. Ker vodila štejemo med električne linije, si bomo ogledali tudi osnovne značilnosti le-teh, npr. pojave, kot so odboji in presluhi. Ogledali si bomo tudi primere gonilnikov, tj. programov, ki omogočajo komunikacijo s perifernimi napravami. Naprave na robu omrežja postajajo vse bolj zmogljive (Edge computing), zato bomo obravnavali primere zajema in analize podatkov s Kalmanovim filtrom in konvolucijsko nevronsko mrežo.