Capabilities of information processing platforms have been rapidly increasing in the last four decades in the meaning of their speed and sizes. We are starting to reach the limits of possible capabilities of technologies on which current platforms are based. With their continuous minimization reliability of their behavior is questionable while quantum level will be reached. There are also many other problems that current technologies are facing, for example energy consumption, relatively high prices etc. These problems obstruct the evolution of computers from an era of desktop computing to an era of ubiquitous computing. Ever since humans have been using their “tools” as labor saving devices mainly top-down approach strategies have been employed, which means that tools are used in order to manipulate materials in manufacturing processes. Manufacturing processes employ big material and energy consumption and have a side effect of by-products which are unfit for use. Many great thinkers of our time point out that top-down approach is obsolete and that transition to synthetic approach (bottom-up approach) has to be established, which means that product will be built from basic entities using automatized procedures. Such development brings many new possible applications to information processing on the fields such as pharmacy, medicine, construction engineering, good production, etc. In order to solve the problems of current information processing technologies alternative processing platforms and methods are being intensively investigated and developed in the last years. During this course currently present alternative information processing platforms will be presented, such as quantum dot cellular automata, DNA based information processing platforms, nanotubes, optical information processing platforms etc. Moreover methods they employ will also be investigated, such as quantum processing, reversible processing, processing with more than two logical states, amorphous computing etc.

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.

The aim of the course is to gain knowledge of the development of innovative cloud computing and cloud applications. Cloud computing is changing the way applications are developed. We will become familiar with concepts, architectures and cloud technologies - the cloud-native architecture.
In addition to gaining in-depth knowledge of cloud computing and all levels of service orientation (XaaS; Iaas, PaaS and SaaS), we will learn in detail the architectural model, patterns and best practices for the development of cloud-native applications, which includes a multitude of concepts.
We will begin with the microservice architecture and learn about the development patterns for microservice. We will combine this with Docker (and others) containers and micro-kernels. We will get familiar with container orchestration tools, especially Kubernetes (and others).
We will continue to explore the concepts of cloud-native architecture: services, asynchronous patterns of calling services, circuit breakers, reactive microservice development models, event streaming aka Apache Kafka, configuration, service discovery, health check, metrics, security, fault tolerance, and others.
The goal will be to understand and develop cloud applications that run on resilient and elastic cloud infrastructure and platforms and understand how these applications work and how to deploy them on different cloud services providers (Amazon AWS, Google AppEngine, Microsoft Azure, Cloud Foundry and others). As part of the course, we will get to know the most popular PaaS platforms. We will get familiar with the concepts of private, public and hybrid clouds. We will also set up our own private / hybrid computer cloud.
At the same time, we will become familiar with the DevOps practices that are essential for the development of cloud solutions and learn about the concepts and projects of the CNCF (Cloud Native Computing Foundation) such as Kubernetes, Prometheus, OpenTracing, Fluentd, Istio, Linkerd, gRPC and others. The course is practically oriented. Within the exercises, students in teams will develop innovative cloud solutions using framework such as Spring Boot, KumuluzEE, Node.js, Docker, Kubernetes, Prometheus and AWS, AppEngine, Azure clouds, and others. They will understand the importance of innovation in the cloud.
The best students will be able to participate in innovative projects.

Programming of high-performance computing systems is an important tool in various fields of science and engineering. However, the effective use of powerful computing systems largely depends on understanding their architecture. In this course, we will consider the architectures of modern high-performance computer systems. We will study different types of computing parallelism (processors, interconnection networks and accelerators) and discuss architectural aspects of the development of parallel (parallel) computers and try to understand modern trends in parallel architectures. The course is complementary to the course High-performance computing - it deals with the same topic, but from the point of view of computer architecture. We will also learn about high-level synthesis (HLS) for implementation in FPGA circuits. Such tools automatically synthesize a circuit from a high-level description of a function in the C language. Knowledge of HDL languages ​​for hardware description is desirable, but not necessary. Automatic synthesis enables simpler implementation of circuits, and at the same time provides the designer with various optimization options, e.g. pipeline, loop unrolling, array partitioning different interfaces, etc.

  1. Parallel and distributed computing: need for parallelization
  2. Modern parallel architectures: shared-memory systems, distributed-memory systems, graphic processing units, modern coprocessors, FPGA circuits, heterogeneous systems
  3. Parallel languages and programming environments: OpenMP, OpenMPI, OpenCL
  4. Parallel algorithms, analysis and programming: data and functional parallelism, pipeline, scalability, programming strategies, patterns, concepts and examples, speedup analyis, scalability
  5. Implementation of typical scientific algorithms on mentioned architectures, choosing the right hardware architecture for an algorithm
  6. Parallel performance: load balancing, scheduling, communication overhead, cache effects, spatial and temporal locality, energy efficiency
  7. Using national high-performance computing infrastructure: access, computational power, working with data storage, environment setup, large-scale simulations
  8. Advanced topics: eksa-scale computing, FPGA programming, importance of data representation on speedup