ID.nl logo
Wat is multithreading en wat heb je er aan?
© Reshift Digital
Huis

Wat is multithreading en wat heb je er aan?

De afgelopen jaren is het aantal cores in mainstream desktopplatformen flink toegenomen. Er is nu zelfs een 16core-processor te krijgen. Maar wat is multithreading nou precies? En wat zijn de technische beperkingen en uitdagingen die hiermee gepaard gaan?

Toen in de jaren 2000 bleek dat de kloksnelheden van processors niet onbeperkt verhoogd konden worden, werd de keuze gemaakt om in te zetten op meer processorcores. Een systeem met meerdere cores was niet nieuw. Servers hadden al langere tijd multisocket-moederborden, met ondersteuning voor meerdere processors. Doordat nu meerdere cores werden geïntegreerd in een enkele zogenoemde ‘die’, werd multithreading een stuk toegankelijker.

Het daadwerkelijk goed benutten van die extra cores loopt wel achter op de technische verbeteringen. Sommige programma’s zijn goed geoptimaliseerd voor multithreading en kunnen 16 cores benutten, maar dit is lang niet altijd het geval. Dit heeft meerdere oorzaken, waar we nu naar gaan kijken.

Wat zijn threads?

Allereerst is het belangrijk om onderscheid te maken tussen processen en threads. Elk proces beschikt over zijn eigen geheugensegment en opereert in principe compleet onafhankelijk van andere processen. Het besturingssysteem voorkomt elke poging van een proces om bij het geheugen van een ander proces te komen. Daarentegen zijn threads niet volledig onafhankelijk. Ze kunnen bij het geheugen van andere threads komen, maar het is wel een andere ‘draad’ van executie, die tegelijkertijd met de andere threads wordt uitgevoerd. Een proces kan meerdere threads hebben, maar een thread kan zelf geen eigen processen hebben.

Er zijn twee soorten threads: software-threads en hardware-threads. Het aantal software-threads wordt bepaald door het totale aantal ‘draden’. Dit kan veranderen, afhankelijk van het opstarten en afsluiten van programma’s. Wanneer we in dit artikel het woord thread zonder kwalificatie gebruiken, bedoelen we software-threads.

Het aantal hardware-threads ligt juist vast, en is afhankelijk van het aantal cores en of er Simultaneous Multithreading (SMT) wordt ondersteund. Een 8core-processor met SMT heeft bijvoorbeeld 16 threads.

Ideaal is een situatie waarbij er evenveel software-threads zijn als hardware-threads. Wanneer er minder software-threads zijn, wordt de hardware niet efficiënt benut. Dat spreekt voor zich, maar ook een te groot aantal software-threads kan negatief uitpakken voor de prestaties.

Threads versus processen

Zowel processen als threads kunnen gebruikt worden voor ‘concurrency’, een term die iets breder is dan multithreading, omdat het alles omvat waarbij meerdere taken tegelijkertijd worden uitgevoerd. Het voordeel van het gebruik van processen is dat het crashen van een proces niet leidt tot het beëindigen van het programma: Google gebruikt voor zijn Chrome-browser bijvoorbeeld meerdere processen om de stabiliteit te verbeteren.

Het grote nadeel is dat het opstarten van een proces veel trager is dan het starten van een thread. Dit is vooral het geval op Windows, waarbij alle bronnen van tevoren toegekend moeten worden. Linux heeft een andere implementatie, waarbij een proces zichzelf kan klonen. Deze kloon of ‘fork’ heeft toegang tot alle bronnen van het eerste proces. Door copy-on-write krijgt het tweede proces pas zijn eigen kopie van delen van het geheugen, als het ernaar probeert te schrijven. Dit zorgt voor veel efficiëntere multiprocessing dan op Windows, waarbij het zoals gezegd voor het creëren van een proces noodzakelijk is dat alle bronnen van tevoren toegewezen worden.

©PXimport

Aangezien threads dezelfde bronnen delen, is het makkelijker voor threads om te communiceren dan voor processen (maar zoals in de paragraaf ‘Gezamenlijk geheugengebruik’ wordt uitgelegd, is dit ook erg gevaarlijk). Inter-process communication is een kunst op zich en dat gaat vaak via omwegen die veel zwaarder en trager zijn dan wat voor threads mogelijk is. Niettemin is er een plaats voor multiprocessing en dit is vaak ook een stuk eenvoudiger te programmeren dan multithreading.

Sommige taken zijn relatief eenvoudig multithreaded te maken, dit geldt bijvoorbeeld voor 3D-rendering en encoderen onder. Andere programma’s, zoals computer assisted design (CAD), zijn dan weer noodgedwongen singlethreaded. Dit is niet willekeurig, maar hangt af van hoe geschikt een bepaald programma is voor multithreading.

Rekenen

Het belangrijkste punt is dat er zo min mogelijk afhankelijkheidsrelaties moeten zijn. In wiskundige termen moet de taak associatief zijn, wat inhoudt dat het niet uitmaakt in welke volgorde hij wordt uitgevoerd. De plusoperatie is bijvoorbeeld associatief, waardoor de volgende simpele berekening prima in een andere volgorde kan worden uitgevoerd: x = 4 + 2 + 5 + 6.

We zouden deze som met of zonder afhankelijkheid kunnen uitvoeren. In het eerste geval berekenen we eerst 4 + 2, vervolgens 6 + 5 en uiteindelijk 11 + 6. Tijdens elke stap hebben we de uitkomst van de vorige berekening nodig. Stel dat we dit anders doen, dat we eerst 4 + 2 berekenen, dan 5 + 6 en tot slot de uitkomst hiervan bij elkaar optellen. Het aantal benodigde berekeningen verandert niet, dat blijft drie, maar de afhankelijkheid is verminderd.

Voor de mens wordt het er niet makkelijker op, maar een cpu zou de eerste twee berekeningen tegelijkertijd kunnen uitvoeren, waardoor er (uitgaande van een enkele klokcyclus voor de add-instructie) maar twee klokcycli nodig zijn en niet drie. Dit voorbeeld dient ter illustratie, want als deze getallen worden ingevoerd als ‘literals’ (vaste getallen), weet een beetje compiler wel het juiste antwoord direct in te voeren.

©PXimport

Heel spannend klinkt dit misschien niet, maar de vorige paragraaf verklaart waarom bijvoorbeeld het encoderen van video zo goed als perfect multithreaded is. Het beeld wordt opgedeeld in bijvoorbeeld zestien verschillende delen. Deze hebben ieder niets te maken met de andere delen, waardoor processorthreads er onafhankelijk aan kunnen werken. Uiteindelijk wordt het beeld samengevoegd, iets wat wel afhankelijk is van de eerdere berekeningen, maar triviaal is daarmee vergeleken.

Het verklaart ook waarom sommige andere taken heel slecht geschikt zijn voor multithreaded, zoals CAD en sommige Photoshop-filters. Deze hebben een zeer hoge mate van afhankelijkheid van andere delen van een foto, waardoor het niet mogelijk is om de taak op te splitsen in verschillende delen. Het gevolg is dat er minder threads aan kunnen werken.

In hoeverre multithreading de prestaties kan verbeteren, kan uitgerekend worden op basis van het deel van het werk dat parallel te maken is. Dit heet de wet van Amdahl en luidt als volgt: 1 / (1 – p), waarbij p staat voor het deel dat te parallelliseren is. Een programma waarbij de helft geschikt is voor multithreading, kan met een onbeperkt aantal cores maximaal twee keer zo snel worden. Dit is omdat het voor de helft van de tijd niet uitmaakt hoeveel cores er zijn.

Thread-safety en cache coherence

Drie termen die vaak worden gebruikt in combinatie met multithreading zijn thread-safe, thread-unsafe en thread-compatible. Dit gaat altijd over delen van een bepaald programma, oftewel functies. Allereerst heb je functies die thread-unsafe zijn. Deze kunnen überhaupt niet vanuit meerdere threads gebruikt worden. Dit is vrijwel altijd het resultaat van slecht programmeerwerk. Het standaardniveau is thread-compatible. Dit betekent dat de functie geen problemen oplevert, zolang er niets naar het geheugen wordt geschreven.

Zonder wijzigingen is er ook geen synchronisatie noodzakelijk. Het hoogste niveau is thread-safe. Dit betekent dat er data wordt gewijzigd, maar dit levert geen problemen op dankzij de synchronisatiemechanismes die we verderop bespreken.

©PXimport

Iets wat multithreading heel ingewikkeld maakt, is het probleem van ‘cache coherency’, een van de fundamentele uitdagingen in de computerwetenschap. Dit gaat over de vraag hoe je ervoor zorgt dat het geheugen consistent is wanneer er meerdere programma’s zijn die hetzelfde geheugen lezen en ernaar schrijven. Het grote probleem is dat deze lees- en schrijfoperaties via de cache gebeuren, omdat deze vele malen sneller is dan het werkgeheugen. Aangezien iedere core zijn eigen cache heeft, kan het gebeuren dat de waarde hier verschilt met die in het geheugen, doordat een andere thread het geheugen heeft veranderd, of doordat de huidige thread de cache heeft aangepast en deze nog niet is bijgewerkt in het geheugen.

Gezamenlijk geheugengebruik

Op zich is het geen enkel probleem als er meerdere threads gebruik willen maken van hetzelfde geheugen, zolang er maar geen enkele thread is die naar het geheugen schrijft. Als er meerdere threads naar het geheugen schrijven, is dat zeker een probleem. Dit maakt multithreading onmiddellijk een stuk moeilijker … en gevaarlijker! Om een heel simpel voorbeeld te geven: stel dat er een programma is met een functie die enkel een teller verhoogt. Het volgende is een voorbeeld in C++:

void incr(){
static int i = 0;
++i; }

We willen dit programma graag multithreaded maken. Simpeler dan dit kan niet, dus je zou verwachten dat dit geen problemen zou kunnen geven. Helaas niet. Er gaat veel meer gepaard met het verhogen van een teller dan je zou verwachten. Dit heet een RMW- operatie: read-modify-write. Het systeem moet eerst uitlezen wat de teller is (bijvoorbeeld door het te kopiëren naar een processorregister), vervolgens dit aantal verhogen met 1 en dit daarna terugschrijven naar de geheugenlocatie. Vooral deze laatste stap gaat gepaard met een aanzienlijke vertraging. Wat als de teller op 2 staat en de functie wordt twee keer tegelijkertijd aangeroepen? In beide gevallen zal de functie 2 lezen en zal de verhoging daarom uitkomen op 3, terwijl het eigenlijk 4 zou moeten zijn.

Het kan nog erger. Het uitlezen ging het vorige voorbeeld immers nog netjes, ondanks het gelijktijdig beschrijven van exact hetzelfde geheugen. We krijgen óf de waarde van voor de laatste verandering óf die van daarna, maar niet iets anders. Dit is lang niet op alle processorarchitecturen zo (maar wel op x86). In een ander geval kan de tweede functie een willekeurig getal uitlezen, bijvoorbeeld 284 of -90. Dit getal wordt dan netjes vermeerderd met 1, maar het komt helaas op iets anders uit dan de 4 die we willen hebben. Het resultaat is ongedefinieerd gedrag, wat inhoudt dat er geen enkele garantie is voor wat de uitkomst is.

Een race-conditie is wanneer de uitkomst van een programma afhangt van de volgorde waarin of de tijd waarop bepaalde code toevallig wordt uitgevoerd. Een programma hoort deterministisch en daarmee voorspelbaar te zijn, dus een goed programma hoort vrij te zijn van race-condities. Wat we willen, is dat de tweede oproep van de functie netjes wacht totdat de vorige klaar is, en dat hij daarom ook de nieuwe waarde leest. Hiervoor is synchronisatie noodzakelijk, iets wat we hierna bespreken.

©PXimport

Mutex en Atomics

Een veelgebruikt synchronisatiemechanisme is een ‘mutual exclusion object’ (mutex). Een mutex is vergelijkbaar met een ‘stoplicht’, dat voorkomt dat meerdere threads tegelijkertijd bij een bepaald deel van het geheugen kunnen komen. Een thread die toegang wil, zal eerst een vrije mutex op ‘slot’ zetten. Elke volgende thread die bij de mutex komt, zal geblokkeerd worden totdat de mutex weer vrijgegeven wordt door de eerste thread.

Mutexen hebben alleen wel de nodige problemen. Zo zijn ze relatief sloom en gevaarlijker is het probleem van potentiële deadlocks. Dat is wanneer verschillende delen van een programma meerdere van dezelfde mutexen nodig hebben, dan kan het gebeuren dat een benodigde mutex nooit vrijgegeven wordt en dat het programma blijft hangen. Deze kans is nog aanzienlijker wanneer met andere mutexen beschermde delen van het programma afhankelijk zijn van elkaar. Als deze dan tegelijkertijd gedraaid worden, dan wacht de ene thread op een vrije mutex totdat hij zijn eigen mutex vrijgeeft, terwijl de eerste mutex niet vrijkomt totdat de eerste thread klaar is met zijn werk. Er moet dus op een goed doordachte manier geprogrammeerd worden. Een simpel voorbeeld in C++:

void incr(){
static mutex mut1;
static int i = 0;
lock_guard<mutex> lck(mut1); </mutex>
++i;
} // mutex wordt automatisch vrijgegeven

In sommige gevallen kan het lonen om in plaats van een gewone mutex een ‘reader writer’-mutex te gebruiken. Deze kan of aan één thread schrijftoestemming geven of aan een onbeperkt aantal threads leesbevoegdheid. Aangezien alleen veranderend geheugen race-condities oplevert, kan dit de prestaties verbeteren als er maar weinig naar het beschermde geheugen wordt geschreven.

Concurrency-problemen kunnen in sommige gevallen ook opgelost worden door het gebruiken van variabelen die geen tussenstaat laten zien. Deze heten ‘atomics’ in C en C++, en ‘volatile’ variabelen (vluchtige variabelen) in Java en C#. Als we een atomische variabele gebruiken voor ons eerdere scenario, dan begint de tweede operatie pas wanneer de eerste klaar is. Dan heb je niet het probleem dat een van de vermeerderingen potentieel verloren gaan.

Volgorde

Simpele atomics lossen niet alle problemen op. Atomische variabelen kunnen ook garanderen dat bepaalde code in een voorgeschreven volgorde wordt uitgevoerd. Elke atomische operatie heeft een bepaalde ‘memory barrier’, ook wel ‘memory order’ genoemd. Deze barrière bestaat uit een ‘acquire’-laadoperatie die wordt gekoppeld aan ‘release’-opslagoperatie. Tussen deze twee operaties wordt er een zogenoemde ‘çritical section’ gecreëerd. Instructies binnen dit deel is sterk beperkt in herordening: ze mogen niet buiten de sectie worden gebracht door de compiler of de processor. Dit garandeert dat alle instructies binnen (en voor) dit deel zijn uitgevoerd wanneer er een ‘acquire’ wordt uitgevoerd. Ook wordt er gegarandeerd dat de laatste waarde van de atomische variabele is geschreven naar het geheugen en de caches, zodra de acquire is uitgevoerd.

Als er toegang wordt gevraagd voordat het systeem hier klaar mee is, wordt toegang tot de betrokken delen van het geheugen geblokkeerd. Dit om te voorkomen dat er iets gebeurt met de tussenstaat van de variabele. Hier zijn speciale machine-instructies voor, die het werk efficiënter kunnen verrichten dan een mutex. Het volgende voorbeeld laat zien hoe dat werkt.

void incr(){
static atomic<int> i(0); </int>
++i; }

In de praktijk komt dit erop neer dat een ‘release’ informatie publiceert die een ‘acquire’ kan opvragen (bij een RMW-operatie is er een gecombineerde acquire en release). Waar zou dit nuttig voor kunnen zijn? Veel systemen moeten van een valide staat naar een andere valide staat gebracht worden, zonder dat er het een en ander kan gebeuren in de tussenstaat. Om maar een voorbeeld te geven: bij het uitvoeren van een banktransactie is het een goed idee om zowel de vermindering als de vermeerdering op de respectieve rekeningen als een alles-of-niets-transactie uit te voeren.

Het voordeel van atomics ten opzichte van een mutex, is dat ze sneller zijn en dat deadlocks niet tot de mogelijkheden behoren. Het nadeel is dat ze nog altijd substantieel langzamer zijn dan gewone variabelen, vooral wanneer het gaat om schrijfacties. Veranderingen moet immers verspreid worden naar niet alleen de verschillende caches, maar ook naar het werkgeheugen. In de tussentijd mag er geen enkele andere thread gebruikmaken van de oude waarde. Een verder nadeel is dat niet alles met atomische variabelen geïmplementeerd kan worden. Programma’s die hier wel gebruik van maken, heten ‘lockfree’, omdat ze geen gebruikmaken van een mutex-slot.

▼ Volgende artikel
Review Poco F8 Ultra – Toptoestel zodra de prijs zakt
© Wesley Akkerman
Huis

Review Poco F8 Ultra – Toptoestel zodra de prijs zakt

De smartphones van Poco zijn over het algemeen goed geprijsd als je kijkt naar wat je ervoor terugkrijgt. De nieuwe Poco F8 Ultra heeft een prijskaartje van minimaal 800 euro. Gaat die regel ook hier op?

Uitstekend
Conclusie

De Poco F8 Ultra oogt uniek, vindt in de subwoofer een handige toevoeging en voelt stevig aan. De door ons geteste Denim Blue-uitvoering heeft bovendien een faux denimlaagje op de achterkant voor extra grip (wat deze variant een paar gram zwaarder maakt dan de zwarte versie). Wel plaatsen we wat kanttekeningen bij de software- en camera-ervaring. De prijs is misschien gevoelsmatig nog wat hoog, zeker voor dit merk. Maar zakt de prijs richting de 600 euro, dan krijg je een toptoestel dat zijn prijs meer dan waarmaakt en waar je langdurig plezier van hebt.

Plus- en minpunten
  • Bose-subwoofer
  • Faux denim achterop
  • Stevig, handzaam en licht
  • Vlotte en overzichtelijke software
  • Gemiddeld tot goed softwarebeleid
  • Batterijduur
  • Kleuren kunnen beter
  • Camera laat te wensen over
  • Bloatware en advertenties
CategorieSpecificatie
Display6,9 inch Amoled-display, 120Hz (adaptief), 3500 nits maximale helderheid
ProcessorSnapdragon 8 Elite Gen 5 (3nm)
Geheugen12 GB of 16 GB LPDDR5X (9600 Mbps)
Opslag256 GB of 512 GB (UFS 4.1)
Batterij6500 mAh met 100W HyperCharge en 50W draadloos laden
Camera achter50 MP hoofdcamera (OIS), 50 MP periscooptelelens (OIS), 50 MP ultragroothoek
Camera voor32 MP met autofocus
VideoTot 8K op 30 fps (achter) / 4K op 60 fps (voor)
SoftwareXiaomi HyperOS 3
BouwIP68 waterbestendig, POCO Shield Glass, 218 (Black) - 220 gram (Denim Blue)
Connectiviteit5G, Wifi 7, Bluetooth 6.0, NFC
Extra'sUltrasone vingerafdrukscanner, Infrarood (IR-blaster), Bose audio

Want wat voor smartphone kun je precies aanbieden als je er net wat meer geld tegenaan gooit? Dat idee heeft een unieke telefoon opgeleverd, voorzien van een denimlook én een extra subwoofer achterop. Gewaagde keuzes, maar in een wereld waarin smartphones steeds meer naar elkaar toe groeien, en in hun identiteitscrisis meer en meer op iPhones gaan lijken, geen verkeerde ontwikkeling. Alleen daarom al zijn we enthousiast over de Poco F8 Ultra (Blue Denim-uitvoering).

Het helpt dan ook zeer dan de subwoofer daar niet alleen voor de show zit. Dit compacte speakertje geeft geluiden en audio meer dan genoeg ruimte om beter tot hun recht te komen vergeleken met reguliere smartphonespeakers. Weg is dat blikkige geluid, dat nu ruimte maakt voor warmere tonen en een bredere soundstage. Klinkt de muziek perfect? Dat kun je niet verwachten, maar we zijn desondanks onder de indruk van de Bose-luidspreker.

©Wesley Akkerman

Uniek en tof

De Poco F8 Ultra ligt prettig in de hand en voelt solide aan dankzij het aluminium frame. Met 220 gram is hij ook niet overdreven zwaar. Het fauxdenim op de achterkant draagt daarbij merkbaar bij aan de grip, waardoor hij niet snel uit je handen glipt. Juist door dat eigenzinnige uiterlijk is dit zo'n smartphone die je liever zonder hoesje gebruikt, ook al loop je daarmee iets meer risico op valschade.

Het grote amoled-paneel van 6,9 inch stelt evenmin teleur. Met zijn hoge resolutie (1.200 bij 2.608 pixels) en verversingssnelheid (120 Hertz) kom je niets tekort en oogt alles scherp en vlot. Het contrast is breed en zwartwaarden zijn diep, maar de kleuren kunnen soms net even wat flets ogen. Dat valt alleen op in directe vergelijkingen met andere smartphones; de kans is heel klein dat dit je hier iets van merkt in het dagelijkse gebruik of als je een minder geoefend oog hebt.

©Wesley Akkerman

©Wesley Akkerman

Wat je mag verwachten

Ook al draait de Poco F8 Ultra niet op de krachtigste processor die Qualcomm te bieden heeft, in de praktijk merk je daar weinig van. De Snapdragon 8 Elite Gen 5 voelt vlot aan bij multitasking en kan games zonder moeite aan, al moet je er wel rekening mee houden dat de Gen 5 warm (niet heet, gelukkig) kan worden wanneer je high-end spellen speelt. Niets om je zorgen over te maken, je zult hier namelijk je vingers niet aan branden.

Ook de accu stelt niet teleur. Met een capaciteit van 6.500 mAh haal je in veel gevallen probleemloos twee dagen, al hangt dat vanzelfsprekend af van hoe intensief je de smartphone gebruikt. Speel je veel games, dan loopt hij sneller leeg, maar opladen gaat razendsnel. Met een geschikte 100w-lader, die je zelf moet aanschaffen, zit de accu binnen ongeveer veertig minuten weer helemaal vol.

0,7x

1x

2x

Camera en software

Toch is niet alles goud wat er blinkt. Onder de juiste lichtomstandigheden maakt de Poco F8 Ultra kleurrijke en gedetailleerde beelden. Zoomen is geen probleem en ook de selfiecam lijkt goed om te gaan met verschillende huidtypen. De groothoeklens presteert echter minder goed: kleuren komen minder goed uit de verf en details vallen weg. De avondmodus stelt teleur, met een overdaad aan exposure, gebrekkige kleurenaccuraatheid en trage vastlegging.

Aangezien Poco een dochteronderneming is van Xiaomi, draait het toestel op HyperOS 3.0. De Poco staat daardoor vol met overbodige en dubbele apps, waaronder die van Xiaomi, waarvan je het gros kunt verwijderen. Ook kom je her en der wat reclame tegen. Verder is het besturingssysteem vlot en overzichtelijk, twee eigenschappen die we extreem belangrijk vinden. Je krijgt tot slot 'maar' vier Android-upgrades, evenals zes jaar aan beveiligingsupdates.

5x

10x

Poco F8 Ultra kopen?

Ondanks de kanttekeningen die we plaatsen bij de software- en camera-ervaringen, zijn er eigenlijk weinig redenen om niet voor de Poco F8 Ultra te kiezen. Hij oogt uniek, vindt in de subwoofer een handige toevoeging en voelt stevig aan. De door ons geteste Denim Blue-uitvoering heeft bovendien een faux denimlaagje op de achterkant voor extra grip (wat deze uitvoering wel een paar gram zwaarder maakt dan de Poco F8 Ultra Black). De prijs is misschien gevoelsmatig nog wat hoog, zeker voor dit merk. Maar zakt de prijs richting de 600 euro, dan krijg je een toptoestel dat zijn prijs meer dan waarmaakt en waar je langdurig plezier van hebt.

52137934

▼ Volgende artikel
Spatial audio: de zin en onzin van 3D-geluid
© ER | ID.nl
Huis

Spatial audio: de zin en onzin van 3D-geluid

Spatial audio, oftewel ruimtelijke audio, belooft een luisterervaring waarbij het geluid niet alleen van links en rechts komt, maar je volledig omringt. Hoewel de marketingkreten je geregeld om de oren vliegen, is de techniek niet in elke situatie even zinvol. In dit artikel ontdek je wanneer ruimtelijke audio je ervaring verrijkt en wanneer je prima zonder kunt.

Vergeet het statische geluid van je oude vertrouwde stereo-set. Met spatial audio krijgt geluid eindelijk de diepte die het verdient. Dankzij slimme algoritmes die de akoestiek van de echte wereld nabootsen, ontsnapt de audio aan je koptelefoon of soundbar. Geluid beweegt vrij door de kamer, waardoor een helikopter in een film ook echt boven je hoofd lijkt te cirkelen. Het is de overstap van een platte foto naar een hologram, maar dan voor je oren.

Bioscoopervaring thuis

De meest logische toepassing voor spatial audio is zonder twijfel de moderne filmervaring. Wanneer je een blockbuster kijkt die is gemixt in formaten zoals Dolby Atmos, komt de techniek pas echt tot leven. Een helikopter die overvliegt of regen die op een dak klatert, krijgt een verticale dimensie die voorheen onmogelijk was met een standaard hoofdtelefoon of een simpele soundbar.

Voor filmliefhebbers die niet de ruimte hebben voor een volledige surround-installatie met fysieke speakers in het plafond, biedt spatial audio een overtuigend en compact alternatief dat de zogenaamde immersie aanzienlijk vergroot.

Spatial audio in de praktijk

Je komt ruimtelijke audiotechnieken op steeds meer plekken tegen, vaak zonder dat je er specifiek naar hoeft te zoeken. In de filmwereld is Dolby Atmos de absolute standaard, waarbij streamingdiensten zoals Netflix en Disney+ deze techniek inzetten om geluidseffecten via een soundbar dwars door je kamer te laten bewegen.

Muziekliefhebbers vinden soortgelijke ervaringen bij Apple Music en Tidal, waar speciale mixes van bekende albums een breder en dieper geluidsveld bieden dan de originele stereoversie. Ook in de gamingwereld is het inmiddels de norm; Sony gebruikt de Tempest 3D-technologie voor de PlayStation 5 om spelers midden in de actie te plaatsen, terwijl Microsoft met Windows Sonic en Dolby Atmos for Headphones vergelijkbare resultaten behaalt op de Xbox en pc.

©ER | ID.nl

Muziek met een extraatje

Voor muziek is het nut van ruimtelijke audio iets genuanceerder en sterk afhankelijk van de productie. Bij klassieke concerten of live-opnames kan de techniek je het gevoel geven dat je midden in de concertzaal zit, waarbij de akoestiek van de ruimte tastbaar wordt. Ook bij moderne popmuziek die specifiek voor dit formaat is geproduceerd, kunnen artiesten creatiever omgaan met de plaatsing van instrumenten of subtiele geluidseffecten.

Toch blijft voor de purist die zweert bij een eerlijke, ongefilterde weergave van een studio-album de traditionele stereomix vaak de voorkeur genieten, omdat spatial audio de oorspronkelijke balans soms onnatuurlijk kan veranderen.

Gaming en de functionele voorsprong

In de wereld van gaming verschuift de waarde van spatial audio van puur esthetisch naar functioneel. Vooral in competitieve shooters is het horen van de exacte positie van een tegenstander een serieus dingetje. Door gebruik te maken van ruimtelijke audio kun je voetstappen boven, onder of achter je nauwkeurig lokaliseren. Dat geeft niet alleen een intensere spelervaring waarbij je volledig wordt opgeslokt door de spelwereld, maar biedt ook een tactisch voordeel dat met standaard audio simpelweg niet te evenaren is. Hierdoor is de techniek voor fanatieke gamers bijna onmisbaar geworden.

Wanneer kun je het beter uitschakelen?

Ondanks de indrukwekkende demonstraties is spatial audio niet altijd de beste keuze. Voor dagelijks gebruik, zoals het luisteren naar podcasts of het kijken van het journaal, voegt de extra ruimtelijkheid weinig toe en kan het de verstaanbaarheid van stemmen zelfs negatief beïnvloeden. Ook bij oudere opnames die door softwarematige kunstgrepen naar ruimtelijk geluid worden omgezet, ontstaat er vaak een hol en onnatuurlijk resultaat. In dergelijke gevallen is een zuivere stereoweergave nog altijd de meest betrouwbare weg naar een prettige luisterervaring.

Populaire merken voor spatial audio

Verschillende fabrikanten lopen voorop in de adoptie van ruimtelijke audiotechnieken. Apple heeft met de integratie in de AirPods Max en AirPods Pro in combinatie Apple Music de techniek toegankelijk gemaakt voor de massa, terwijl Sony met hun 360 Reality Audio een sterk eigen ecosysteem heeft gebouwd dat vooral schittert bij gaming en specifieke streamingdiensten. Daarnaast is Sonos een dominante speler op het gebied van home-entertainment met soundbars die Dolby Atmos ondersteunen. Bose en Sennheiser zijn eveneens belangrijke namen die met hun geavanceerde algoritmes en hoogwaardige hardware zorgen dat de ruimtelijke beleving ook voor de veeleisende luisteraar geloofwaardig blijft.