- nosilec: Miha Mraz
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.
- nosilec: Matjaž Jurič
- Parallel and distributed computing: quantifying parallelisation architectures, memory access, granularity, topologies
- Modern parallel architectures: shared-memory systems, distributed-memory systems, graphic processing units, modern coprocessors, FPGA circuits, heterogeneous systems
- Parallel languages and programming environments: OpenMP, MPI, OpenCL, MapReduce
- Parallel algorithms, analysis and programming: data and functional parallelism, pipeline, scalability, programming strategies, concepts and examples, speedup analyis, scalability
- Implementation of typical scientific algorithms on mentioned architectures, choosing the right hardware architecture for an algorithm
- Parallel performance: load balancing, scheduling, communication overhead, cache effects, spatial and temporal locality, energy efficiency
- Using national high-performance computing infrastructure: access, computational power, working with data storage, environment setup, large-scale simulations
- Advanced topics: eksa-scale computing, FPGA programming, importance of data representation on speedup
- nosilec: Uroš Lotrič
This course is about computer hardware. We will not deal
with processors and RAM, which you presumably already know from previous
courses, but rather with "the rest". The input/output or peripheral
devices are the most visible part of any computer system, however, they are not
really part of the computer in the strict sense. They are connected to the
computer in order to extend its functionality. Through many of them humans can
communicate with the computer. These include input devices such as keyboard,
mouse, scanner, output devices, such as video adapter, monitor, sound card,
speakers, and data storage devices such as hard drives, USB flash drives, CD,
DVD, Blu- ray, magnetic tapes, etc.
Closely connected with the peripheral devices are also
certain types of computer buses used for connecting these devices, for example.
PCI and USB. As computer buses are examples of electric transmission lines, we
will look at the basic characteristics thereof, for example, phenomena such as
reflections and crosstalk. We will also mention some of the older standards,
for example, RS-232. We will review certain cases of drivers, i.e., programs
that allow communication with peripheral devices, on an ARM-Cortex
- nosilec: Branko Šter