In this course we will introduce how to program for concurrency in C++, taking advantage of modern CPUs' ability to run multi-threaded programs on different CPU cores. We will briefly review the native C++ concurrency features for
asynchronous execution, thread spawning and locking as well as a few other features useful for concurrent programming. The tutorial will then show you how to use...
Container technologies are rapidly becoming the preferred way to distribute, deploy, and run services by developers and system administrators. They provide the means to start a light-weight virtualization environment, i.e., a container, based on Linux kernel namespaces and control groups (cgroups). Such virtualization environment is cheap to create, manage, and destroy, requires a negligible...
Elasticsearch is the most widely used full-text search engine, but is also very common for logging, metrics, and analytics. This exercise shows you what the rage is all about:
1. Overview of Elasticsearch and how it became the Elastic Stack.
2. Full-text search deep dive:
* How does full-text search work in general and what are the differences to databases.
* How the score or quality of a...
In this workshop, we will introduce the basics of programming in Go and
then work our way up to concurrency programming with this relatively new
language.
We'll start with the usual "Hello World" program, introduce functions,
variables, packages and then interfaces.
Then, we will tackle the two main tools at the disposal of the Go programmer
(colloquially known as a gopher): the channels and...
This Quantum Computing tutorial will enabling the participants to access and run calculations on real quantum computers from IBM. The course gives an introduction into the IBM Q Experience as well as to the open source Quantum Information and Science Kit (Qiskit), an open-source quantum computing framework for leveraging today's quantum processors and conducting research. Basic knowledge of...
Learning how to develop software for embedded devices has been a treacherous road for a long time. Dangers of undefined behavior coupled with quirks of embedded devices and “beginner” fallacies cause many promising developers to shy away from embedded development. This workshop is made up of two parts:
The first day covers Rust's safety and usability features. The focus lies on ownership...
In this workshop, we'll implement a distributed peer-to-peer chat application, involving WebSockets, http servers and the famous goroutines and channels that Go programmers can wield to achieve and tame concurrency.
We'll first start with simple command-line applications that operate on marshaling/unmarshaling JSON messages and then connect all these building blocks to eventually create a...
This tutorial is aimed at intermediate linux users who are interested in a modern way of log collection and analysis.
You will learn how to setup an Elastic Search cluster with a few tuning recommendation. Next you will learn how to collect and process log data with Filebeat. Than we will focus on advanced log processing with Logstash, where you will learn how to categorise, transform and...
How to distribute your compute tasks and get results with high performance, keeping machines and site admins joyful
HTCondor is an open source workload management system for High Throughput Computing designed to collect many different resources (servers from different computing centres, desktops or cloud services) into one common computing environment. These resources are transparently...
In this tutorial, we will introduce parallel programming with MPI and OpenMP, and the differences between the two parallel programming paradigms with hands-on exercises. The hands-on session will start with some basic OpenMP directives. More focus will be put into parallel programming with MPI, where we will cover blocking/non-blocking communication and collective communication.
For more...
Machine learning, and especially deep learning, is one of the current hot topics in computer science and engineering. It has not only experienced tremendous advancements in its theoretical foundations during the last few years, but is now also the state-of-the-art method in a broad range of applications. In this course, you will learn the basic terms and approaches in machine learning,...
Learning how to develop software for embedded devices has been a treacherous road for a long time. Dangers of undefined behavior coupled with quirks of embedded devices and “beginner” fallacies cause many promising developers to shy away from embedded development. This workshop is made up of two parts:
Learning how to develop software for embedded devices has been a treacherous road for a long...
In this workshop, the students will (a) learn how to efficiently use
relational and non-relational databases for modern large-scale
scientific experiments, and (b) how to create database workflows suitable for analytics and machine learning.
First, the focus of the workshop is to teach efficient, safe, and
fault-tolerant principles when dealing with high-volume and
high-throughput database...
The use of data analytics techniques, such as Machine Learning and Deep Learning, has become the key for gaining insight into the incredible amount of data generated by scientific investigations (simulations and observations). Therefore it is crucial for the scientific community to incorporate these new tools in their workflows, in order to make full use of modern and upcoming data sets. In...
OpenACC is a directive-based programming model for highly parallel systems, which allows for automated generation of portable GPU code. In this tutorial, we will get to know the programming model with examples, learn how to use the associated tools environment, and incorporate first strategies for performance optimization into our programs. Finally, we will integrate OpenACC with other GPU...
Pandas is a Python package that provides data structures to work with heterogenous, relational/tabular data. It provides fundamental building blocks for a powerful and flexible data analysis. Pandas provides functionality to load a wide set of data formats, manipulate the resulting data and also visualize it using various plotting frameworks. We will show in the workshop how to clean and...
In this tutorial we first present our new distributed Big Data processing framework called Thrill [1,2]. It is a C++ framework consisting of a set of basic scalable algorithmic primitives like mapping, reducing, sorting, merging, joining, and additional MPI-like collectives. This set of primitives goes beyond traditional Map/Reduce and can be combined into larger more complex algorithms, such...