Discrete Event Simulation

Similar documents
Design Patterns for Real-Time Computer Music Systems

Processes. CS 475, Spring 2018 Concurrent & Distributed Systems

Collection of priority-job pairs; priorities are comparable.

Operating Systems Design Fall 2010 Exam 1 Review. Paul Krzyzanowski

Lecture #7: Implementing Mutual Exclusion

Dealing with Issues for Interprocess Communication

Selection, Bubble, Insertion, Merge, Heap, Quick Bucket, Radix

15-323/ Spring 2019 Homework 5 Due April 18

Data Structures and Algorithms for Engineers

Computer Systems Assignment 4: Scheduling and I/O

The smallest element is the first one removed. (You could also define a largest-first-out priority queue)

Timers 1 / 46. Jiffies. Potent and Evil Magic

EECS 482 Introduction to Operating Systems

Announcements. Reading. Project #1 due in 1 week at 5:00 pm Scheduling Chapter 6 (6 th ed) or Chapter 5 (8 th ed) CMSC 412 S14 (lect 5)

Page 1. Challenges" Concurrency" CS162 Operating Systems and Systems Programming Lecture 4. Synchronization, Atomic operations, Locks"

Process Concepts. CSC400 - Operating Systems. 3. Process Concepts. J. Sumey

Data Structures and Algorithms Dr. Naveen Garg Department of Computer Science and Engineering Indian Institute of Technology, Delhi

EECS 482 Introduction to Operating Systems

PROCESS SCHEDULING II. CS124 Operating Systems Fall , Lecture 13

Tasks. Task Implementation and management

SMD149 - Operating Systems

Chapter 6 Heapsort 1

THREADS & CONCURRENCY

/633 Introduction to Algorithms Lecturer: Michael Dinitz Topic: Sorting lower bound and Linear-time sorting Date: 9/19/17

Interrupts and Time. Real-Time Systems, Lecture 5. Martina Maggio 28 January Lund University, Department of Automatic Control

POSIX / System Programming

Real-Time Component Software. slide credits: H. Kopetz, P. Puschner

Processes and Threads

Scheduling, part 2. Don Porter CSE 506

238P: Operating Systems. Lecture 14: Process scheduling

Real-Time Systems Concepts for Computer Music

Interrupts and Time. Interrupts. Content. Real-Time Systems, Lecture 5. External Communication. Interrupts. Interrupts

Appendix A and B are also worth reading.

CPS221 Lecture: Threads

Priority Queues Heaps Heapsort

Processes and Threads. Processes and Threads. Processes (2) Processes (1)

Parallel Programming Languages COMP360

Chapter Machine instruction level 2. High-level language statement level 3. Unit level 4. Program level

Extensions to Barrelfish Asynchronous C

Chapter 3: Processes

CS 167 Final Exam Solutions

CS 31: Introduction to Computer Systems : Threads & Synchronization April 16-18, 2019

COMP Data Structures

CS 326: Operating Systems. Process Execution. Lecture 5

Adaptive algorithm for High-Performance FPGA Cores

CSC263 Week 2. Larry Zhang

Concurrency & Parallelism. Threads, Concurrency, and Parallelism. Multicore Processors 11/7/17

AC OB S. Multi-threaded FW framework (OS) for embedded ARM systems Torsten Jaekel, June 2014

Threads SPL/2010 SPL/20 1

Midterm Exam Amy Murphy 6 March 2002

Threads, Concurrency, and Parallelism

연세대학교전기전자공학과프로세서연구실박사과정김재억.

5. Synchronization. Operating System Concepts with Java 8th Edition Silberschatz, Galvin and Gagn

Processes and Non-Preemptive Scheduling. Otto J. Anshus

Scheduling Algorithm and Analysis

Introduction. Week 10 Concurrency. Roger B. Dannenberg Professor of Computer Science, Art, and Music Carnegie Mellon University

THREADS AND CONCURRENCY

Sorting and Searching

Priority queues. Priority queues. Priority queue operations

Sorting: Given a list A with n elements possessing a total order, return a list with the same elements in non-decreasing order.

Micrium µc/os II RTOS Introduction EE J. E. Lumpp

CS153: Midterm (Fall 16)

Definition of a Heap. Heaps. Priority Queues. Example. Implementation using a heap. Heap ADT

Deviations are things that modify a thread s normal flow of control. Unix has long had signals, and these must be dealt with in multithreaded

Hash Tables. CS 311 Data Structures and Algorithms Lecture Slides. Wednesday, April 22, Glenn G. Chappell

Implementing Mutual Exclusion. Sarah Diesburg Operating Systems CS 3430

THREADS & CONCURRENCY

CS 471 Operating Systems. Yue Cheng. George Mason University Fall 2017

Performance Evaluation

Chapter 3 Processes. Process Concept. Process Concept. Process Concept (Cont.) Process Concept (Cont.) Process Concept (Cont.)

OS structure. Process management. Major OS components. CSE 451: Operating Systems Spring Module 3 Operating System Components and Structure

Sorting is a problem for which we can prove a non-trivial lower bound.

Disciplina Sistemas de Computação

Priority Queues. 1 Introduction. 2 Naïve Implementations. CSci 335 Software Design and Analysis III Chapter 6 Priority Queues. Prof.

Processes. CS3026 Operating Systems Lecture 05

Heap sort. Carlos Moreno uwaterloo.ca EIT

Data Structures Lesson 9

3. Priority Queues. ADT Stack : LIFO. ADT Queue : FIFO. ADT Priority Queue : pick the element with the lowest (or highest) priority.

Lecture 4: Memory Management & The Programming Interface

Section 5.3: Event List Management

Sorting and Searching

CSCE Introduction to Computer Systems Spring 2019

Outline. Process and Thread Management. Data Structures (2) Data Structures. Kernel Process Block (PCB)

Process and Thread Management

Sorting and Selection

Processes. Dr. Yingwu Zhu

So on the survey, someone mentioned they wanted to work on heaps, and someone else mentioned they wanted to work on balanced binary search trees.

Chapter 13 Topics. Introduction. Introduction

CS 162 Operating Systems and Systems Programming Professor: Anthony D. Joseph Spring Lecture 8: Semaphores, Monitors, & Condition Variables

Goals. Processes and Threads. Concurrency Issues. Concurrency. Interlacing Processes. Abstracting a Process

PROCESS CONTROL BLOCK TWO-STATE MODEL (CONT D)

Computer Systems II. First Two Major Computer System Evolution Steps

Lecture notes Lectures 1 through 5 (up through lecture 5 slide 63) Book Chapters 1-4

Binary heaps (chapters ) Leftist heaps

FINE-GRAINED SYNCHRONIZATION. Operating Systems Engineering. Sleep & Wakeup [chapter #5] 15-Jun-14. in the previous lecture.

15: OS Scheduling and Buffering

Operating Systems. Lecture 4 - Concurrency and Synchronization. Master of Computer Science PUF - Hồ Chí Minh 2016/2017

Real-time Support in Operating Systems

ò Paper reading assigned for next Tuesday ò Understand low-level building blocks of a scheduler User Kernel ò Understand competing policy goals

Dr. Rafiq Zakaria Campus. Maulana Azad College of Arts, Science & Commerce, Aurangabad. Department of Computer Science. Academic Year

Transcription:

Computer Music Systems and Information Processing Week 2: Discrete Event Simulation Roger B. Dannenberg, instructor Spring, 2017 Discrete Event Simulation n Why DES? n Overview n Approaches n Details of Event Scheduling Systems 2 1

Why Discrete Event Simulation n Most CS is concerned with computing answers at some time in the future (hopefully soon) n Discrete event simulation models time as well as processes n DES techniques turn out to be very relevant to real-time, interactive music systems. 3 Overview of Discrete Event Simulation n Model behavior n consisting of discrete state changes n State: all information describing system at a given point in time n Event: a trigger that initiates an action that changes the state n Process: a sequence of events, usually associated with some simulated entity 4 2

Simulation Structure n Executive: manages events and runs actions, keeps track of time n Utilities: random number generation, statistics, etc. n Model (program): code that models the specific behavior of the simulated system. n Note the design strategy: separate systemspecific code from generic, reusable code. 5 Time in Simulation n Usually, simulation time is not real time. n Results of simulation available faster than real time (e.g. weather, climate simulation) n Simulation time n Run time n Event time 6 3

Time in Simulation n Usually, simulation time is not real time. n Results of simulation available faster than real time (e.g. weather, climate simulation) n Simulation time: the time in the model n Also logical time or virtual time n Run time: the real (cpu) time of the simulation n Event time: the simulation time at which an event should happen 7 Scheduling Events n (1) Synchronous simulation n What it does: n Advance virtual time by small fixed interval n Run all events in that interval n Timing not precise n Wastes computation when no events enabled n Similar to frame-by-frame animation engine n (2) Event-scanning simulation: n Advance time to next event time n Run the event 8 4

(1) Synchronous Simulation Discrete times Call every object at every time step Objects being simulated 9 (2) Event-Scanning Executive n Event: data structure containing n Event time: when to dispatch the event n Function: reference to a method or procedure n Parameters: for the function n Future event list: data structure n Priority Queue: insert/remove events 10 5

Simulation Organization n Activity Scanning n Event Scanning/Scheduling n Process Interaction 11 Activity Scanning n Organized around the activity n Activities start when conditions are met n Executive scans for an activity that is enabled n Makes sense when enabling conditions are complex, e.g. particle systems, crowds, physics with collision detection n Amounts to synchronous simulation with polling to decide when to perform events 12 6

Event Scheduling n Organized around the event n Activities change the state, figure out time of next event and schedule accordingly n Appropriate when n Interactions are limited n Precise timing is important n Timed state changes 13 Process Interaction n Organized around the Process n Modeled entities represented by processes n Processes can wait to simulate passing of time n Processes can use synchronization, e.g. semaphores or condition variables to represent interdependencies. 14 7

Example n Manufacturing Step 1 Step 2 Step 3 n Activity model n Event model n Process model n Process could be a manufactured article n Process could be a manufacturing station 15 Event Model in More Detail n Why? Because we re going to be using the event model for music generation. Step 1 Step 2 Step 3 n State: 50 0 0 0 The number of objects at each position n Event: Begin or end a step 16 8

Events Step 1 Step 2 Step 3 50 0 0 0 def start_step(i): if s[i] > 0: s[i] = s[i] 1 schedule(now + dur(i), event_done, i) def event_done(i): s[i+1] = s[i+1] + 1 // increment output tray start_step(i) // begin work on next input n Bugs: n Need range check on i, there s no step 3, 4, 5, n If step is inactive and item is added to input tray, need to start the step. How do we implement this? 17 Events and Time n Virtual time does not advance while events are running being computed. n Virtual time only advances when the next event is in the future. n If there are multiple events at the same virtual time, time does not advance until all are computed. n Event duration is zero, but we can model process begin, middle, end as multiple events 18 9

Processes/Threads n A natural way to model behaviors n But processes are heavy n Stacks n Context switch must swap all registers n Processes must coordinate updates to the state. Consider: n s[i] = s[i] + 1 n s[i] = s[i] - 1 19 Processes and Time n How can we model time with Processes? n Virtual time should only advance when processes block or sleep. n Blocking and sleeping are probably primitives (but not designed for simulation) n Coordinating multiple CPUs to order computation with respect to virtual time is tricky and beyond our (current) discussion n Processes/threads are not recommended for DES 20 10

Coroutines n Similar to processes, but n synchronous in that threads must explicitly yield: n sleep() run other threads for some amount of virtual time n semaphores and condition variables block until ready to run, run other threads in the meantime n yield() just pick another thread and run n Consider: n s[i] = s[i] + 1 n s[i] = s[i] - 1 Each of these is an atomic operation: it runs to completion with no possibility of another thread seeing intermediate results. 21 Coroutines and Logical Time n How can we model time with coroutines? n Sleep(): inserts an event in a priority queue n Yield(): checks for ready-to-run coroutines. n Advance virtual time to next event in queue (virtual time does not necessarily change) n Event wakes up the sleeping coroutine n Assessment: n Similar to Event Model n Ability to suspend (sleep) within a procedure 22 11

Simulating a Sequence with Coroutines coroutine myseq(): state = STEP1 sleep(dur1) state = STEP2 sleep(dur2) state = STEP3 sleep(dur3) 23 Simulating a Sequence with Events def myseq(): if state == START: state = STEP1 schedule(now + DUR1, myseq ) elif state == STEP1: state = STEP2 schedule(now + DUR2, myseq ) elif state == STEP2: state = STEP3... What if we want multiple instances of myseq? 24 12

Events and Instances def myseq(state): if state == START: state = STEP1 schedule(now + DUR1, myseq, state) elif state == STEP1: state = STEP2 schedule(now + DUR2, myseq, state) elif state == STEP2: state = STEP3... Now we can launch many instances of myseq(start) But, what if we need local state for each instance? 25 Events and Instances (2) def myseq(state, per_inst): if state == START: state = STEP1 schedule(now + DUR1, myseq, state, per_inst) elif state == STEP1: state = STEP2 schedule(now + DUR2, myseq, state, per_inst) elif state == STEP2: state = STEP3... Now we can launch many instances of myseq(start, x) where each instance has its own local state (x). 26 13

Simulating a Sequence with Events A Variation def myseq_step1(): schedule(now + DUR1, myseq_step2 ) def myseq_step2(): schedule(now + DUR2, myseq_step3 ) def myseq_step3(): schedule(now + DUR3, myseq_step4 )... 27 Object Oriented Simulation n In previous slide, what if we wanted more state? n Events solution requires us to pass state or at least a reference to state through parameters. n Let s look at Object Oriented simulation as another way to deal with instances and state. 28 14

Object Oriented Approach n Scheduling an event effectively calls a procedure in the future n Procedures are not the best model for entities in the real world (that have state) n A previous example shows how we can pass state through parameters n What if we extend events to activate objects? n Object can hold state no need to encode into parameters n Objects can model entities in the real world 29 Object Oriented Approach 30 class Mything (Event): var state // an instance variable def init(): state = START def run(): switch (state): START: state = STEP1 schedule(now + DUR1) // inherited method STEP1: state = STEP2 schedule(now + DUR2) STEP2: state = STEP3... 15

Object Oriented Approach (2) n Notes on the previous slide: n Everything can be statically type checked n schedule() takes an object of type Event rather than a procedure reference n no dynamically typed parameters to pass to an event n State is encapsulated in objects n Slightly clunky that every schedule results in a call to run() n Some languages allow you to pass pointers to methods, similar to passing function pointers in the Event Model n OO languages allow you to pass objects that could then invoke the desired method, but this could be clunky too 31 Summary n Discrete Event Simulation computes (virtual) time as well as state changes n Event Scheduling can compute timing with high precision (no rounding to discrete intervals or system clock) n Various approaches: n Processes heavy and hard to manage time n Coroutines stacks, context switch, relatively easy to incorporate virtual time n Objects lighter weight, popular for models n Events very lightweight, simple 32 16

33 Computer Music Systems and Information Processing Week 2, Day 2: Discrete Event Simulation, Scheduling Roger B. Dannenberg, instructor Spring, 2017 17

Review n Discrete at points in time n Event state changing action n Simulation a model n Big ideas: n All behavior modeled as instantaneous events n Compute precise times of events n Future events in a priority queue (sort by time) n Perform events in time order n Always keep track of virtual (simulated) time 35 Representing Events in Serpent n Want to separate simulation executive from details of model. n Need event representation: how do we represent a function call to take place in the future? n event should support these operations: n Dispatch allows the executive to execute events without knowing the details n Compare allows executive to see which event comes first 36 18

The event Representation n Just an array: n [time, // the event time n target, // object n message_name, // method to invoke n parms] // parameters to pass n Or n [time, // the event time n nil, // nil call a function n function_name,// function to call n parms] // parameters to pass 37 Dispatching an event def general_apply(target, message, parms) if target sendapply(target, message, parms) else apply(message, parms) // note: parms is an array, e.g. // // general_apply(synth, 'play', [60, 100]) // is same as: synth.play(60, 100) // // general_apply(nil, 'foo', [10, "hi"]) // is same as: foo(10, "hi") 38 19

Implementing a scheduler (a simulation executive ) n Need two operations: n Schedule ( cause ) an event: the event is remembered and dispatched at the specified event time n Poll: n advance virtual time to the earliest event time, n if real time >= virtual time n dispatch the earliest event n Design choice: n Simulation executive can be a process that polls n It can be our responsibility to call poll() frequently 39 Implementation 1: linked list n To schedule, insert event at the head of a list while len(list) > 0: // run until done for each r in list if r[0] < now list.remove(r) dispatch(r) now += interval n Example of Event Scanning n Problems: n Could run events out of order n Searches entire list very often n Bug: changing list while iterating over list is not allowed 40 20

Implementation 2: priority queue n Like before, but linked list is sorted: Increasing timestamps while len(list) > 0: // run until done var r = list[0] list.remove(r) now = r[0] // get the event time dispatch(r) n Problems: n Scheduling (insertion) is linear in size of list n In Serpent, list.remove(r) is linear as well 41 Implementation 3: heapsort n Trick: embed complete binary tree in array. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 n parent(n) = floor(n/2) n left_subtree(n) = 2 * n n right_subtree(n) = 2 * n + 1 n Heap invariant: No parent is greater than its children It follows that the root is the minimal element 42 21

Heapsort (2) n After removing least element (array[1]), move last array element to first. Then, bubble down the tree by swapping new element with least of two children (iteratively) until no child is smaller. n To add an element, insert at end of array. Then bubble up the tree by swapping new element with parent until parent is smaller. n Log(n) insert and delete. 43 Heapsort (3): Remove 5 20 6 35 29 44 22

Heapsort (3): Remove 20 6 35 29 45 Heapsort (3): Remove 29 20 6 35 46 23

Heapsort (3): Remove 6 20 29 35 47 Heapsort (3): Insert 6 20 29 35 4 48 24

Heapsort (3): Insert 6 4 29 35 20 49 Heapsort (3): Insert 4 6 29 35 20 50 25

From DES to Real-Time Systems n DES computes and simulates precise timing n We want precise timing in music systems too n Example: n Thread1(): loop: play bass_drum sleep(1.0) Thread2(): loop: play snare sleep(1.0) main(): new Thread1() sleep(0.5) new Thread2() 51 How Much Precision Do We Need? n Suppose we compute things to nearest frame of a video game: n Frame rate = 60fps n Frame period = 1/60 = 17ms n Quantization error is perceptible n What if system always responds within 1ms? n 100 beats per minute * 0.5ms error = 50ms error per minute (!) n Recommendation: compute time with doubles 52 26

What can we hear? n 0.1s jitter n 20ms jitter n 5ms jitter n 1ms jitter n 10ms is typical Just-Noticeable Difference (JND) for (almost) equally spaced taps n 10ms jitter in a drum roll is clearly audible though, so 1ms is a much better goal 53 DES-like Real-Time Scheduling n In music, usually very small timing errors (~1ms) are OK, but cumulative errors are bad: n Otherwise, two musical lines might drift apart n Otherwise, MIDI synchronized to audio or video might drift n By the way, what are synchronization requirements for audio/video? n EBU R37: recommends audio at most 40ms early, at most 60ms late 54 27

DES-like Real-Time Scheduling (2) n Key ideas: n DES techniques to compute when things should happen a specification n Use clock reference to make things happen as close to specification as possible n Algorithm: periodically do this: if time of first event in queue < get_time() remove event from queue now = event.time event.run() 55 Where do we get real time? n system clock every computer has a built-in crystal clock n audio sample count to sync to audio n video frame count or SMPTE sync to video 56 28

How to implement periodically n Simplest scheme (for command line e.g. serpent64 or embedded programs) n while true do periodic computation sleep(0.002) // sleep 2ms to reduce CPU load n GUI toolkits/libraries usually have a timer callback function, e.g. in Swing: n new Timer(2, periodiccomputation).start(); n Where periodiccomputation implements Action interface 57 Scheduler in Serpent require "sched def sched_poll(): nil sched_init() rtsched.time_offset = time_get() // put something on the scheduler def demo(n): print "I'm alive!", n rtsched.cause(1, nil, 'demo', n + 1) rtsched.start_use() rtsched.cause(1, nil, 'demo', 0) rtsched.finish_use() sched_run() 58 29

Scheduler in wxserpent require "sched" sched_init() rtsched.time_offset = time_get() def timer_callback(): rtsched.poll(time_get()) def demo(n): print "I'm alive!", n rtsched.cause(1, nil, 'demo', n + 1) rtsched.start_use() rtsched.cause(1, nil, 'demo', 0) rtsched.finish_use() wxs_timer_start(2, 'timer_callback') 59 Review n Now you know how to build an accurate scheduler for music that: n Can handle hundreds or thousands of concurrent streams of events (notes, chords, beats, etc.) n Is efficient with computer time n Does not drift with respect to reference clock n Does not introduce critical sections, locks, multiple threads, or the overhead of traditional concurrent programs n Let s look at some more scheduling algorithms 60 30

Implementation 4: no polling n Implementations 2 and 3 use priority queues n Time of the next event is easily determined n Why wake up periodically? n Instead, sleep until the next event time. n Observations: n +Saves time when there nothing to do n -Overhead of polling every ms or so is small n -Often, you need to poll for other things (audio processing, sensor input, ) 61 Implementation 5: timing wheel or calendar queue 0 1 2 3 62 n-1 To Schedule: insert in table[int(ticks) mod n] To Dispatch: every tick, search in table[tick mod n] Assuming event times are random, and table size n is comparable to number of events, this can have O(1) scheduling and dispatching time. 31

Implementation 6 n What happens if events are not randomly distributed but separated by n? n E.g. table size = 1024 and each slot represents 1ms. Many events are scheduled at times 50+1024n ms. Slot 50 gets all events! n Suppose we use table only for events in the near future? n Note: reading makes this assumption already in Implementation 5. n What do we do with events too far in future? 63 Implementation 6 (2) n The answer: n Keep far-future events in a heap-based priority queue and deal with them later. n But a heap-based priority queue has O(log n) insert time, so n Schedule far-future events by inserting into a list; process the events later. Pending List Priority Queue Table 64 32

Implementation 6 (3) Pending List 1 Incoming Events far future next period this period Pending List 2 (1) Priority Queue (2) Table 2 Table 1 65 Implementation 6 Analysis n Schedule time is O(1): based on time, just insert into Table 1, Table 2, or Pending List n Dispatch time is O(1) per event and O(1) per clock tick: dispatch everything in corresponding slot in Table 1. n Additional background processing time is O(log n) per far-future event. n Background processing must be completed each period. 66 33

Implementation 6 Discussion n How do you schedule background processing? What if it doesn t finish in time? n Yann Orlarey has a related scheme using an incremental radix sort instead of the heap implemented and used in MidiShare system. n I currently use Serpent s (linear) resort() method to make priority cues. In C, I use Implementation 5 (timing wheel): n Simple to implement. n Works with floating point timestamps. n Worst-case performance not bad in practice. n Determining when to do background processing and coordinating that with foreground processing really needs OS support so it s hard to do right 67 Summary n Events and Priority Queue n Adaptable to almost any programming language n Function pointers n Subclass events n Accurate timing n Deterministic execution even in the face of some timing jitter n Scheduling can be both fast and simple n Implementation 5 is common, but tricky to implement due to rounding issues 68 34