Supernova: Multicore Support for SuperCollider
Transcript of Supernova: Multicore Support for SuperCollider
![Page 1: Supernova: Multicore Support for SuperCollider](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/1.jpg)
SuperColliderSupernova
SuperCollider 3.5 preview
Supernova: Multicore Support for SuperCollider
Linux Audio Conference, 2011
Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider
![Page 2: Supernova: Multicore Support for SuperCollider](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/2.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/3.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/4.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/5.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/6.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/7.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/8.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/9.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/10.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/11.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/12.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/13.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/14.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/15.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/16.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/17.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/18.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/19.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/20.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/21.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/22.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/23.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/24.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/25.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/26.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/27.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/28.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/29.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/30.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/31.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/32.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/33.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/34.jpg)
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](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/35.jpg)
SuperColliderSupernova
SuperCollider 3.5 preview
Conclusion
Thanks!Questions?
Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider
![Page 36: Supernova: Multicore Support for SuperCollider](https://reader030.fdocuments.in/reader030/viewer/2022012620/61a0ddfa3a36ab049c42bb74/html5/thumbnails/36.jpg)
SuperColliderSupernova
SuperCollider 3.5 preview
Conclusion
Thanks!Questions?
Tim Blechmann [email protected] Supernova: Multicore Support for SuperCollider