supernova: multicore support for supercollider

36
SuperCollider Supernova SuperCollider 3.5 preview Supernova: Multicore Support for SuperCollider Tim Blechmann [email protected] Linux Audio Conference, 2011 Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Upload: others

Post on 26-Nov-2021

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

Supernova: Multicore Support for SuperCollider

Tim [email protected]

Linux Audio Conference, 2011

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 2: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

Outline

SuperColliderOverviewExamplesSC Node Graph

SupernovaOverviewParallel GroupsSatellite NodesBest Practices

SuperCollider 3.5 preview

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 3: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

Outline

SuperColliderOverviewExamplesSC Node Graph

SupernovaOverviewParallel GroupsSatellite NodesBest Practices

SuperCollider 3.5 preview

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 4: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

Outline

SuperColliderOverviewExamplesSC Node Graph

SupernovaOverviewParallel GroupsSatellite NodesBest Practices

SuperCollider 3.5 preview

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 5: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewExamplesSC Node Graph

Outline

SuperColliderOverviewExamplesSC Node Graph

SupernovaOverviewParallel GroupsSatellite NodesBest Practices

SuperCollider 3.5 preview

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 6: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewExamplesSC Node Graph

SuperCollider

I Object-oriented programming language, real-time safe,designed for audio synthesis.

I Audio synthesis server for dynamically changing synthesisgraphs.

I Separation between language and server, communication viaOSC.

I Written by James McCartney for MacOS9 in the 1990s.

I Released as open source in early 2000, ported to Linux byStefan Kersten.

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 7: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewExamplesSC Node Graph

Modular System

Synthesis ServerScsynth, audio synthesis server with OSC interface.Supernova is a drop-in replacement. UnitGenerators are loaded as plugins.

Synthesis Control LanguageTypically sclang with its class library. Alternativescsynth clients in other languages like scala, scheme,clojure, haskell, . . .

Editors/IDEsScapp (OSX), Scate (Kate), Sced (Gedit), Scvim(Vim), Scel (Emacs), PsyCollider (windows), Eclipse.

GUI SystemsCocoa (Scapp), Swing (Java), Qt.

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 8: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewExamplesSC Node Graph

Some SC Concepts I

SynthDefsInstrument definitions, created in the language,loaded into the server.

SynthsSynthDef instantiation on the server.

BussesServer-side routing system, used for synthcommunication.

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 9: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewExamplesSC Node Graph

Some SC Concepts II

I “There’s more than one way to do it”

I Raw OSC Communication, Classes, Events, Patterns, JitLib.

I Many implicit assumptions and syntactic sugar.

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 10: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewExamplesSC Node Graph

Synth

Listing 1: Creating Synths

// Raw OSC Messages

s.sendMsg ("/ s_new", "default", s.nextNodeID , 0, 1);

// SCLang nodes

a = Synth.new(\ default ); a.set(\freq , 442)

// Events

(). play; (freq: 440). play // implicit

// Functions

{

Pulse.ar(440 ! 2,

LFTri.kr({Rand (0.1, 0.2)}! 2)) * 0.1;

}.play

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 11: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewExamplesSC Node Graph

Patterns

Listing 2: Patterns

// Patterns

p = Pmono(\default ,

\dur , Pwrand ([0.4 , 0.05, 0.025] ,

[0.5, 2, 2]. normalizeSum ,

inf),

\degree , Pseq([

Prand ([0, 2, 3, 5], 6),

Prand ([0, 4, 6], 6)

], inf),

\pan , Prand([-1, 0, 1], inf),

\scale , Scale.new ((0..11) , 12, \just)

).play

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 12: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewExamplesSC Node Graph

SC Node Graph

GroupsLists of nodes, define order of execution, addressmultiple nodes as one entity.

NodesSynths and Groups.

Node HierarchyNodes form a tree hierarchy, each server has a rootgroup and a node tree.

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 13: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewExamplesSC Node Graph

Order of Execution

User is responsible to ensure correct node order

Listing 3: Node Ordering

g = Group(s);

a = Synth.head(g, \default );

b = Synth.after(a , \fx);

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 14: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Outline

SuperColliderOverviewExamplesSC Node Graph

SupernovaOverviewParallel GroupsSatellite NodesBest Practices

SuperCollider 3.5 preview

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 15: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Supernova

I Reimplementation of scsynth with a multiprocessor-awaresynthesis engine.

I Loads slightly patched unit generators.

I Implements Node Graph Extensions to express parallelismexplicitly.

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 16: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Parallel Groups

I Groups without node ordering constraint

I Group elements can be executed in parallel

I Parallel groups can be nested to build more comples structures

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 17: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Parallel Groups - An Example

Listing 4: Node graph with 4 generators and 1 effect

var gen_group , fx;

gen_group = ParGroup.new;

4.do {

Synth.head(gen_group , \myGenerator)

};

fx = Synth.after(gen_group , \myFx);

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 18: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Parallel Groups

Pro:

I Easy to use & understand

I Compatible with groups

Contra:

I User has to ensure correctness

I Each node has two dependency relations

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 19: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Parallel Groups

Pro:

I Easy to use & understand

I Compatible with groups

Contra:

I User has to ensure correctness

I Each node has two dependency relations

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 20: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Beyond Parallel Groups

I Parallel Groups at not optimal for all use cases

I Some synths just need ordering constraints in relation withone node

I Synths without input signals (generators)

I Synths without output signals (peak meters, disk/samplerecording synths)

satellite nodes

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 21: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Beyond Parallel Groups

I Parallel Groups at not optimal for all use cases

I Some synths just need ordering constraints in relation withone node

I Synths without input signals (generators)

I Synths without output signals (peak meters, disk/samplerecording synths)

satellite nodes

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 22: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Satellite Nodes - Proposed Interface

I 2 new node constructors: Node.preceding &Node.succeeding

I 2 new add actions

Listing 5: Satellite node example

var fx = Synth.new(\myFx);

4.do {

var gen = Synth.preceding(fx ,

\myGenerator)

Synth.succeeding(gen , \peakMeterSynth)

};

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 23: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Satellite Nodes - Dependency Graph

Figure: Dependency Graph for Satellite Nodes Example

Synth: myGenerator Synth: myGenerator Synth: myGenerator Synth: myGenerator

Synth: myFxSynth: PeakMeterSynth: PeakMeter Synth: PeakMeter Synth: PeakMater

Synth: some other synth

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 24: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Satellite Nodes - Semantics

I Satellite nodes are ordered in relation with one other node

I Each node can have multiple satellite predecessors andsatellite successors

I Satellite nodes may have satellite nodes themselves

I Satellite nodes can be addressed by the parent group of theirreference node

I Satellite nodes are freed, if their reference node are freed.

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 25: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Satellite Nodes

Pro:

I Increases the parallelism for many use cases

I Optimized for ‘node graph progress’: Satellite nodes have alower priority than other nodes

I The combination of satellite nodes and parallel groups canhandle most use cases in a nearly optimal manner

Contra:

I Incompatible with scsynth (unless one implements it!)

I Increased complexity (dependency graph vs hierarchy tree)

I Experimental implementation in Supernova

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 26: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Best Practices

I Keep the CPUs busy: use parallel node graph extensions.

I Avoid scheduling overhead: don’t parallelize light-weight worklike control-rate synths.

I Avoid contention: accessing to the same resources fromparallel synths may harm the performance.

I Do not use satellite nodes if the code should run on scsynth.

I Parallel groups are well tested, satellite nodes areexperimental.

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 27: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Best Practices

I Keep the CPUs busy: use parallel node graph extensions.

I Avoid scheduling overhead: don’t parallelize light-weight worklike control-rate synths.

I Avoid contention: accessing to the same resources fromparallel synths may harm the performance.

I Do not use satellite nodes if the code should run on scsynth.

I Parallel groups are well tested, satellite nodes areexperimental.

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 28: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Best Practices

I Keep the CPUs busy: use parallel node graph extensions.

I Avoid scheduling overhead: don’t parallelize light-weight worklike control-rate synths.

I Avoid contention: accessing to the same resources fromparallel synths may harm the performance.

I Do not use satellite nodes if the code should run on scsynth.

I Parallel groups are well tested, satellite nodes areexperimental.

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 29: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Best Practices

I Keep the CPUs busy: use parallel node graph extensions.

I Avoid scheduling overhead: don’t parallelize light-weight worklike control-rate synths.

I Avoid contention: accessing to the same resources fromparallel synths may harm the performance.

I Do not use satellite nodes if the code should run on scsynth.

I Parallel groups are well tested, satellite nodes areexperimental.

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 30: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

OverviewParallel GroupsSatellite NodesBest Practices

Best Practices

I Keep the CPUs busy: use parallel node graph extensions.

I Avoid scheduling overhead: don’t parallelize light-weight worklike control-rate synths.

I Avoid contention: accessing to the same resources fromparallel synths may harm the performance.

I Do not use satellite nodes if the code should run on scsynth.

I Parallel groups are well tested, satellite nodes areexperimental.

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 31: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

Outline

SuperColliderOverviewExamplesSC Node Graph

SupernovaOverviewParallel GroupsSatellite NodesBest Practices

SuperCollider 3.5 preview

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 32: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

SuperCollier 3.5

SuperCollider 3.5 will be a big release!

I Migration to git and cmake

I Supernova: alternative to scsynth

I QtCollider: new cross-platform GUI system based on Qt

I ScDoc: new help system

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 33: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

QtCollider

I Developed by Jakob Leben, merged late 2010

I Qt-based implementation of the Cocoa widgets

I Better sclang integration, cocoa compatibility andresponsiveness compared to SwingOSC.

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 34: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

ScDoc

I Developed by Jonatan Liljedahl, merged early 2011

I Browser-based doc system with on-the-fly rendering

I Simple markup language

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 35: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

Conclusion

Thanks!Questions?

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider

Page 36: Supernova: Multicore Support for SuperCollider

SuperColliderSupernova

SuperCollider 3.5 preview

Conclusion

Thanks!Questions?

Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider