PARALELNO PROGRAMIRANJE

Similar documents
Threads. Threads (continued)

Ricardo Rocha. Department of Computer Science Faculty of Sciences University of Porto

Threads. Jinkyu Jeong Computer Systems Laboratory Sungkyunkwan University

CSCI4430 Data Communication and Computer Networks. Pthread Programming. ZHANG, Mi Jan. 26, 2017

Threads. studykorner.org

THREADS. Jo, Heeseung

Lecture 4. Threads vs. Processes. fork() Threads. Pthreads. Threads in C. Thread Programming January 21, 2005

LSN 13 Linux Concurrency Mechanisms

Lecture 19: Shared Memory & Synchronization

Introduction to pthreads

Introduction to PThreads and Basic Synchronization

CS 153 Lab4 and 5. Kishore Kumar Pusukuri. Kishore Kumar Pusukuri CS 153 Lab4 and 5

Computer Systems Laboratory Sungkyunkwan University

Operacijski sustavi. Laboratorijska vježba 3. Petra Lončar, mag. ing. el., asistent FESB, 2016.

Programiranje Programski jezik C. Sadržaj. Datoteke. prof.dr.sc. Ivo Ipšić 2009/2010

EPL372 Lab Exercise 2: Threads and pthreads. Εργαστήριο 2. Πέτρος Παναγή

Agenda. Process vs Thread. ! POSIX Threads Programming. Picture source:

POSIX PTHREADS PROGRAMMING

CSE 333 SECTION 9. Threads

Threads. Jo, Heeseung

pthreads CS449 Fall 2017

Concurrent Server Design Multiple- vs. Single-Thread

CS 3305 Intro to Threads. Lecture 6

Outline. CS4254 Computer Network Architecture and Programming. Introduction 2/4. Introduction 1/4. Dr. Ayman A. Abdel-Hamid.

CS 220: Introduction to Parallel Computing. Condition Variables. Lecture 24

Roadmap. Concurrent Programming. Concurrent Programming. Communication Between Tasks. Motivation. Tevfik Ko!ar

CSC Systems Programming Fall Lecture - XVIII Concurrent Programming. Tevfik Ko!ar. Louisiana State University. November 11 th, 2008

Multicore and Multiprocessor Systems: Part I

Threads. lightweight processes

Threads. Jo, Heeseung

POSIX threads CS 241. February 17, Copyright University of Illinois CS 241 Staff

Operating systems fundamentals - B06

COSC 6374 Parallel Computation. Shared memory programming with POSIX Threads. Edgar Gabriel. Fall References

Pthread (9A) Pthread

ENCM 501 Winter 2019 Assignment 9

Pthreads. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

Thread and Synchronization

POSIX Threads. Paolo Burgio

ANSI/IEEE POSIX Standard Thread management

CSE 333 Section 9 - pthreads

C Grundlagen - Threads

Preview. What are Pthreads? The Thread ID. The Thread ID. The thread Creation. The thread Creation 10/25/2017

HPCSE - I. «Introduction to multithreading» Panos Hadjidoukas

Concurrency. Johan Montelius KTH

High Performance Computing Lecture 21. Matthew Jacob Indian Institute of Science

Roadmap. Concurrent Programming. Concurrent Programming. Motivation. Why Threads? Tevfik Ko!ar. CSC Systems Programming Fall 2010

Threads (light weight processes) Chester Rebeiro IIT Madras

Network Programming TDC 561

What is concurrency? Concurrency. What is parallelism? concurrency vs parallelism. Concurrency: (the illusion of) happening at the same time.

Concurrency and Synchronization. ECE 650 Systems Programming & Engineering Duke University, Spring 2018

CS-345 Operating Systems. Tutorial 2: Grocer-Client Threads, Shared Memory, Synchronization

POSIX Threads. HUJI Spring 2011

High Performance Computing Course Notes Shared Memory Parallel Programming

TCSS 422: OPERATING SYSTEMS

Threaded Programming. Lecture 9: Alternatives to OpenMP

Chapter 4 Concurrent Programming

Creating Threads. Programming Details. COMP750 Distributed Systems

Programming with Shared Memory. Nguyễn Quang Hùng

CMPSC 311- Introduction to Systems Programming Module: Concurrency

Pre-lab #2 tutorial. ECE 254 Operating Systems and Systems Programming. May 24, 2012

Thread. Disclaimer: some slides are adopted from the book authors slides with permission 1

Multithreaded Programming

User Space Multithreading. Computer Science, University of Warwick

CSE 306/506 Operating Systems Threads. YoungMin Kwon

PThreads in a Nutshell

Posix Threads (Pthreads)

CMPSC 311- Introduction to Systems Programming Module: Concurrency

The course that gives CMU its Zip! Concurrency I: Threads April 10, 2001

VRIJEDNOSTI ATRIBUTA

VHDLPrimeri Poglavlje5.doc

CMPSC 311- Introduction to Systems Programming Module: Concurrency

Thread Concept. Thread. No. 3. Multiple single-threaded Process. One single-threaded Process. Process vs. Thread. One multi-threaded Process

real time operating systems course

Concurrency and Threads

Introduction to Threads

CSci 4061 Introduction to Operating Systems. (Threads-POSIX)

CSS CSS. selector { property: value; } 3/20/2018. CSS: Cascading Style Sheets

Učitati cio broj n i štampati njegovu recipročnu vrijednost. Ako je učitan broj 0, štampati 1/0.

CS 345 Operating Systems. Tutorial 2: Treasure Room Simulation Threads, Shared Memory, Synchronization

A Thread is an independent stream of instructions that can be schedule to run as such by the OS. Think of a thread as a procedure that runs

Osnove programskog jezika C# Čas 5. Delegati, događaji i interfejsi

VB komande. Programiranje 1

Shared Memory Parallel Programming with Pthreads An overview

CS 326: Operating Systems. Process Execution. Lecture 5

This exam paper contains 8 questions (12 pages) Total 100 points. Please put your official name and NOT your assumed name. First Name: Last Name:

Chapter 4 Threads. Images from Silberschatz 03/12/18. CS460 Pacific University 1

Computer Science 162, Fall 2014 David Culler University of California, Berkeley Midterm 1 September 29, 2014

Threads. To do. Why threads? Thread model & implementation. q q q. q Next time: Synchronization

Ricardo Rocha. Department of Computer Science Faculty of Sciences University of Porto

CPSC 313: Intro to Computer Systems. POSIX Threads. Latency Hiding / Multiprogramming (covered earlier) Ease of Programming (covered now)

Multithreading Programming II

Concurrency, Thread. Dongkun Shin, SKKU

Chapter 10. Threads. OS Processes: Control and Resources. A process as managed by the operating system groups together:

CSE 421/521 - Operating Systems Fall 2011 Recitations. Recitation - III Networking & Concurrent Programming Prof. Tevfik Kosar. Presented by...

Programming Assignment #4

Threads. Today. Next time. Why threads? Thread model & implementation. CPU Scheduling

Shared Memory: Virtual Shared Memory, Threads & OpenMP

Exercise (could be a quiz) Solution. Concurrent Programming. Roadmap. Tevfik Koşar. CSE 421/521 - Operating Systems Fall Lecture - IV Threads

CS240: Programming in C. Lecture 18: PThreads

Shared-Memory Programming

Transcription:

Predavanje 09 Odjel za matematiku 1 PARALELNO PROGRAMIRANJE POSIX threadovi za C++

Predavanje 09 Odjel za matematiku 2 Programske niti (thread) unutar procesa Danas ćemo se upoznati s POSIX thread bibliotekom za C/C++ Proces Thread ili nit predstavlja tok naredbi unutar procesa (programa). Proces može sadržavati više niti koje se izvršavaju paralelno Programske niti mogu dijeliti istu memoriju nit 1 nit 2 nit 3 Moderna računala višeprocesorska ili barem višejezgrena (multicore)

Predavanje 09 Odjel za matematiku 3 Paralelno programiranje Svoj program možete paralelizirati na način da stvorite više od jednog procesa ( fork ) u kojima se vaš program izvršava otežavajuće: svaki proces živi u svom adresnom prostoru (drugim riječima, dva procesa ne mogu pisati/brisati po istoj memorijskoj lokaciji) Komunikacija dva procesa (MPI) Stvaranje ( fork ) procesa košta više od stvaranja novoga threada sjajno: mogućnost stvaranja programa koji će se izvršavati na više različitih računala (distribuirano računanje) Ukoliko želi te paralelizirati program za jedno računalo, napravite to pomoću threadova

Predavanje 09 Odjel za matematiku 4 POSIX thread - pthread pthread biblioteka nam omogućuje jednostavno stvaranje višenitnog programa Prirodno je namjenjena za UNIX-like računala: FreeBSD, NetBSD, GNU/Linux, Mac OS X and Solaris Postoji implementacija i za Windowse IDEJA: stvoriti tzv. funkciju thread - funkcija koja je ujedno i thread Svaki thread sadrži svoj jedinstveni Thread ID Svaki thread vraća povratnu vrijednost tzv. errno (tipa integer) pthread vraća "0" ukoliko je sve prošlo OK. Osnovni thread iz kojega kreirate druge threadove zovemo Master Thread

Predavanje 09 Odjel za matematiku 5 Stvaranje threada ili niti pthread_create(): stvaranje threada int pthread_create(pthread_t * thread, const pthread_attr_t * attr, void * (*start_routine)(void *), void *arg); Argumenti: thread vraća thread ID (pthread_t je predefinirani unsigned long int) attr ukoliko postavljen na NULL, defaultne vrijednosti (najčešće) void * (*start_routine) pokazivač na thread funkciju *arg pokazivač na argument thread funkciji ukoliko više od jednog argumenta, enkapsulirajte ih unutar klase ili strukture pthread_join(): čekaj na završetak drugog threada int pthread_join(pthread_t th, void **thread_return); Argumenti: th ID threada na čiji završetak treba čekati thread_return vrijednost koju vraća funkcija thread (NULL)

Predavanje 09 Odjel za matematiku 6 pthread: Primjer 1 Naš zadatak je iz MainThreada stvoriti dva threada Svakom od dva threada treba proslijediti neku poruku koju threadovi trebaju ispisati na zaslon Npr. funkcija thread bi mogla izgledati ovako: void *thread_funkcija_ispisi_poruku( void * poruka ) char *message; message = (char *) ptr; cout << message << endl; Primjetite da thread funkcija vraća void * i prima void *. Zašto? Napravimo C++ implementaciju našeg primjera

Predavanje 09 Odjel za matematiku 7 pthread: Primjer 2 Zbrajanje vektora zbrojimo dva vektora paralelno C++ funkcija: void add( int *a, int *b, int *c ) int tid = 0; while (tid < N) c[tid] = a[tid] + b[tid]; tid += 1;

Predavanje 09 Odjel za matematiku 8 pthread: Primjer 2 Thread 1: Thread 2: void add( int *a, int *b, int *c, int start ) int tid = start; // start = 0 while (tid < N) c[tid] = a[tid] + b[tid]; tid += 2; void add( int *a, int *b, int *c, int start ) int tid = start; // start = 1 while (tid < N) c[tid] = a[tid] + b[tid]; tid += 2; Implementirajmo zbrajanje vektora u C++-u

Predavanje 09 Odjel za matematiku 9 pthread: Mutex Prisjetite se da threadovi djele adresni prostor Dobro: pojednostavnjuje komunikaciju izmedju threadova Loše: Lako napraviti grešku koja se teško otkriva Primjer: Dva threada koja pristupaju istoj varijabli brojac int brojac=0; void *povecajbrojac() brojac++; Ukoliko instanciramo dva threada povecajbrojac(), što mislite da će se desiti?

Predavanje 09 Odjel za matematiku 10 pthread: Mutex Želimo zaštititi pristup memorijskoj adresi brojača dok mu pristupa neki od threadova Mutex Mutual exclusion Ispravno implementirana funkcija povecajbrojac() pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; int counter=0; void *povecajbrojac() pthread_mutex_lock( &mutex1 ); brojac++ ; pthread_mutex_unlock( &mutex1 ); Primijetite da je sada dijeljena memorijska lokacija brojac ispravno zaštićena