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
 Microsoft Foto’s: veel meer dan een fotoviewer
© ID.nl
Huis

Microsoft Foto’s: veel meer dan een fotoviewer

Wie denkt dat de Foto’s-app in Windows 11 niet meer is dan een basisviewer, vergist zich. Het programma combineert overzichtelijke organisatie, handige bewerkingstools en slimme koppelingen met andere Microsoft-diensten tot een verrassend veelzijdige tool.

De meeste gebruikers openen Foto’s om simpelweg een jpg- of png-bestand te bekijken. Toch is de app ontworpen als tool om niet alleen foto’s, maar ook video’s te beheren en te bewerken. Bovendien is de AI waarmee Windows 11 uitpakt, ook in deze app geïntegreerd. We bekijken enkele geavanceerde functies. 

Elementen verwijderen

Vaak merk je pas achteraf dat er iets storends op een foto staat: denk aan elektriciteitsdraden, rondslingerende rommel of een ex die je nooit meer wilt zien. In zulke gevallen biedt Foto’s een handige AI-functie: Genererend wissen. In tegenstelling tot het klassieke gummetje dat enkel overschildert, verwijdert deze tool het ongewenste object echt. De achtergrond wordt hierbij automatisch aangevuld alsof het element er nooit is geweest.

Zo werkt het: open de foto en klik op Bewerken. Bovenaan verschijnt de knop met het label AI. Selecteer Genererend wissen. Gebruik de kwast om over het object te gaan dat je wilt verwijderen. Met de schuifregelaar Kwastgrootte bepaal je de dikte van de kwast. Het geselecteerde object krijgt kort een gearceerde overlay en verdwijnt vervolgens netjes uit beeld.

Twee seconden later is de fietser uit beeld verdwenen.

Op twee manieren wissen

Wanneer je een groot object wilt verwijderen, kan het zijn dat je Genererend wissen meerdere keren moet toepassen. Soms blijven er namelijk restanten zichtbaar, maar meestal is dat na een tweede poging verholpen.

Standaard staat de verdwijnkwast op Automatisch toepassen. Schakel je dit uit, dan krijg je twee extra mogelijkheden: Masker toevoegen en Masker verwijderen. Met een masker bedoelt Microsoft de overlay waarmee je aanduidt wat moet verdwijnen. Op die manier kun je nauwkeuriger werken: stukjes overlay toevoegen waar nodig, of juist weghalen als je te veel hebt geselecteerd. Ben je niet tevreden met het resultaat, dan kun je altijd terug via de knop Opnieuw instellen.

We gebruiken de tool Genererend wissen tot we als resultaat een eenzame fietser hebben.

Tekst uit foto’s halen

De nieuwe Foto’s-app beschikt over een ingebouwde tekstherkenningsfunctie. Met behulp van Optical Character Recognition (OCR) haalt de app tekst uit afbeeldingen, zodat je die kunt kopiëren, plakken en bewerken. Handig bij screenshots, maar ook bij handgeschreven notities die netjes genoeg zijn om door de OCR te worden herkend.

Open een afbeelding met tekst in Foto’s. Klik onderaan op Tekst scannen. De app markeert automatisch de tekstgebieden. Klik met de rechtermuisknop op de gevonden tekst en kies Alle tekst selecteren. Er verschijnt een lichtrode overlay over de geselecteerde tekst. Klik opnieuw met de rechtermuisknop en kies Tekst kopiëren. De tekst staat nu op het klembord en kun je in elke toepassing plakken.

Wanneer de tekst is gekopieerd, kun je deze in elke toepassing plakken.

Achtergrond verwijderen

Een nieuwe AI-tool in Foto’s maakt het mogelijk om de achtergrond van een foto transparant te maken. Open de foto en klik op Bewerken. Kies bovenaan de knop Achtergrond. De AI herkent automatisch de voorgrond en achtergrond. De achtergrond wordt vervangen door een schaakbordpatroon, wat aangeeft dat dit gebied transparant is.

Als de automatische selectie te veel of te weinig heeft verwijderd, kun je dit aanpassen met het Hulpmiddel voor achtergrondkwast. Hiermee krijg je een kwast waarmee je maskers kunt toevoegen of verwijderen. Je kunt zowel de grootte als de zachtheid van de kwast instellen. Hoe zachter de kwast, hoe zachter de overgang tussen zichtbaar en transparant wordt.

Om de transparante achtergrond te behouden, moet je de afbeelding opslaan in een indeling die transparantie ondersteunt. Bij Opties voor opslaan kun je bijvoorbeeld kiezen voor png, aangezien de veelgebruikte jpg-indeling geen transparantie ondersteunt.

Zelfs een complexe achtergrond vormt geen probleem.

Vervagen of vervangen

Met dezelfde AI-tool kun je niet alleen de achtergrond transparant maken, maar ook vervagen of vervangen. Wanneer je Achtergrond AI selecteert, markeert Foto’s automatisch het voorgrondobject. In dit voorbeeld kiest de app correct de vrouw als voorgrond. Wil je dat ook het betonnen trapje waarop ze zit deel uitmaakt van de voorgrond? Selecteer dan Hulpmiddel voor achtergrondkwast om het trapje aan de selectie toe te voegen. Vervolgens kun je de optie Onscherp gebruiken. Met de schuifregelaar bepaal je de mate van onscherpte, waardoor een scherptediepte-effect ontstaat.

Er is ook een optie Vervangen. Het resultaat hiervan is beperkt: omdat Foto’s geen lagen ondersteunt zoals Microsoft Paint, kun je geen fotografische achtergrond toevoegen. De optie Vervangen laat je alleen de achtergrond vervangen door een effen kleur.

De dame en het trapje blijven scherp, de achtergrond vervaagt

Vergroten en verkleinen

Vaak wil je de grootte van een afbeelding aanpassen. Foto’s beschikt over een ingebouwde, aanpasbare resizer. Let op: wil je meerdere afbeeldingen tegelijk aanpassen, dan kan dat niet. Batchverwerking wordt niet ondersteund. Bij een geopende afbeelding klik je niet op Bewerken, maar op de drie puntjes bovenaan. In het menu kies je vervolgens Formaat van afbeelding wijzigen.

Je kunt het formaat instellen in pixelwaarden of in percentage. Tegelijk is het mogelijk om de afbeelding naar een andere indeling te converteren, bijvoorbeeld naar jpg of png. Met een schuifregelaar bepaal je de kwaliteit, wat de mate van compressie regelt. Hoe meer compressie, hoe kleiner het bestand, maar ook hoe groter het risico op kleine verstoringen (zogenaamde artefacten).

Onderaan zie je telkens het verschil tussen het huidige en het nieuwe bestand. Deze tool kun je niet alleen gebruiken om afbeeldingen te verkleinen; je kunt ze ook vergroten. Het verhogen van de resolutie heet upscaling of opschalen. Bij zowel upscalen als downscalen wordt automatisch de hoogte-breedteverhouding behouden, zodat de afbeelding niet wordt vervormd.

Door de resolutie en de compressie aan te passen, wordt het afbeeldingsbestand twintig keer kleiner.
Super Resolution

Op sommige computers verschijnt in deze app een knop Super Resolution. Dit is een AI-functie die foto’s automatisch scherper en gedetailleerder maakt. Zo kan een afbeelding van 800 × 600 worden opgeschaald naar 1600 × 1200 of zelfs hoger, terwijl de details grotendeels behouden blijven.

Bovendien corrigeert Super Resolution ook compressie-artefacten.De functie is alleen beschikbaar op pc’s met Copilot en een Neural Processing Unit (npu). Eind vorig jaar verscheen de knop per vergissing ook op apparaten die dit niet ondersteunden. Dat is inmiddels rechtgezet, zodat Super Resolution nu enkel zichtbaar is op geschikte toestellen.

Met Super Resolution helpt AI om je de afbeelding drastisch te upscalen.

Video’s bewerken

Met Microsoft Foto’s kun je ook eenvoudig video’s trimmen. Open de video in de app en die start meteen met afspelen. Linksboven verschijnt een rode knop Knippen. In het venster dat opent, gebruik je onderaan de tijdlijn de verticale indicator om het beginpunt van de video te bepalen. Daarna versleep je de achterste hendel om het eindpunt vast te leggen. Ben je tevreden met de selectie, dan kies je voor Opslaan als kopie (de originele video blijft behouden) of voor Opslaan (de oorspronkelijke video wordt overschreven).

Op de tijdlijn bepaal je eenvoudig het begin- en eindpunt van de video.

Filters en effecten

Zodra je op Bewerken hebt geklikt, kun je de afbeelding verfijnen met de knoppen Aanpassing (het pictogram van de zwart-witte bol) en Filteren (het pictogram van de kwast). Met Aanpassing pas je via schuifregelaars de belichting, kleur en scherpte aan. Zo maak je de kleuren warmer, verhoog je het contrast of voeg je extra helderheid toe. Onder Filteren vind je de functie Automatisch verbeteren en een reeks filters waarmee je de uitstraling van je foto in één klik verandert. Denk aan creatieve zwart-witfilters of effecten die je foto een vintage look geven. Pas je een filter toe, dan kun je de intensiteit traploos aanpassen.

Van elke filter kun je de intensiteit aanpassen.

Diashow

Je kunt in Foto’s heel snel een diashow starten. Selecteer in de galerij de gewenste afbeeldingen, klik er met de rechtermuisknop op en kies Diashow starten. De voorstelling begint onmiddellijk. Beweeg de muis naar boven, dan verschijnt een klein bedieningsvenster waarmee je de diashow kunt pauzeren of hervatten.

Via het muzieknootpictogram krijg je extra instellingen. Je kunt animaties of overgangen inschakelen, de voorstelling in een lus laten afspelen en een achtergrondmuziekje kiezen, bijvoorbeeld: Relaxed, Sentimenteel of Beats. Een belangrijke beperking: de diashow is slechts een tijdelijke weergave op het scherm. Je kunt hem dus niet rechtstreeks als videobestand opslaan. Wil je de slideshow later opnieuw bekijken, dan moet je de stappen opnieuw uitvoeren.

Met een klein regelvenster kun je de eigenschappen van de diashow regelen.

Horizonlijn corrigeren

Het komt vaak voor dat je snel een foto maakt en je focust op de persoon op de voorgrond, zonder te merken dat de horizon scheef staat. Dat kun je eenvoudig corrigeren in Foto’s tijdens de nabewerking. Klik op Bewerken en kies daarna Bijsnijden. Onderaan verschijnt een regelaar waarmee je de foto naar links of rechts kunt draaien. Terwijl je dit doet, verschijnt er een raster met hulplijnen, zodat je de achtergrond precies horizontaal kunt uitlijnen.

Door te roteren en rekening te houden met de hulplijnen, plaats je de horizonlijn perfect vlak.

Gelijkenissen zoeken

Wanneer je een afbeelding opent in Foto’s, zie je onderaan naast de knop Tekst scannen ook de optie Visueel zoeken met Bing. Met één muisklik opent Bing zijn afbeeldingzoeker in de browser en krijg je direct vergelijkbare afbeeldingen te zien. Dit is handig om objecten op basis van een foto te identificeren of om webpagina’s te vinden die exact dezelfde foto gebruiken. Je kunt deze zoekopdracht bovendien aanvullen met zoektermen.

Vanuit Foto’s laat je Bing zoeken naar gelijksoortige afbeeldingen op het web
Weergave 1:1 of 100%

Bovenaan zie je een klein knopje dat mogelijk vragen oproept: Werkelijke grootte, herkenbaar aan het pictogram 1:1. Een afbeelding bestaat uit beeldpuntjes, oftewel pixels, net zoals een computerscherm. Wanneer je de afbeelding via deze knop zodanig vergroot dat ieder beeldpuntje van de afbeelding exact overeenkomt met één pixel op het scherm, spreken we van een 1:1- of een 100%-weergave. Deze weergave is belangrijk om de scherpte van de afbeelding goed te kunnen beoordelen. Op het scherm wordt een foto vaak verkleind weergegeven, waardoor je niet kunt voorspellen of hij bij afdruk scherp zal zijn. Als de foto in Werkelijke grootte scherp oogt, kun je ervan uitgaan dat de kwaliteit in orde is.

Nu wordt de afbeelding op 37% getoond, met de knop 1:1 zien we hem op 100%

Info vragen aan Copilot

In de app vind je rechtsboven ook een knop naar Copilot. Daarmee kun je de AI raadplegen om vragen te stellen over de geselecteerde afbeelding. Open een foto, klik op de Copilot-knop en stel bijvoorbeeld de vraag: “Waar is deze opname gemaakt?” Met wat geluk herkent Copilot de omgeving en geeft hij meteen een verklaring waarom hij denkt dat de foto daar genomen is. Interessant is dat Copilot ook nagaat of je de vraag uit pure nieuwsgierigheid stelt of omdat je van plan bent de plek daadwerkelijk te bezoeken. In dat laatste geval helpt de assistent je verder met de voorbereiding van de reis.

Copilot geeft uitvoerig toelichting bij deze foto.

Exporteren naar Clipchamp

Selecteer in de Foto’s-galerij de afbeeldingen en video’s die je wilt combineren tot één filmmontage. Klik vervolgens met de rechtermuisknop op de selectie en kies de opdracht Een video maken in Microsoft Clipchamp. Daarmee open je Clipchamp, de gratis video-editor die sinds 2021 eigendom is van Microsoft en standaard wordt meegeleverd met Windows 11. Het programma is de opvolger van de oude Video Editor in Foto’s.

Clipchamp is laagdrempelig in gebruik, maar tegelijk krachtig genoeg om snel aantrekkelijke video’s te maken zonder dat je een professioneel pakket zoals Adobe Premiere nodig hebt. De geselecteerde media worden automatisch toegevoegd aan de map Jouw media in Clipchamp. Het enige wat je nog hoeft te doen, is de clips naar de tijdlijn te slepen, de duur van elke clip in te stellen en eventueel overgangen of effecten toe te voegen.

▼ Volgende artikel
Hoeveel internetsnelheid heb je écht nodig voor jouw huishouden?
© Golib Tolibov
Huis

Hoeveel internetsnelheid heb je écht nodig voor jouw huishouden?

Providers verleiden je graag met pakketten van 1 Gbit/s of meer, maar de meeste huishoudens benutten die bandbreedte zelden volledig. Of je nu streamt in 4K, fanatiek gamet of veel thuiswerkt, de juiste snelheid kiezen kan je flink wat geld besparen. We leggen uit hoeveel Mbit/s daadwerkelijk vereist is voor een stabiele verbinding zonder onnodige kosten.

Om te bepalen wat je nodig hebt, moet je eerst weten wat je verbruikt. Internetsnelheid wordt uitgedrukt in megabit per seconde, oftewel Mbit/s. Voor simpel surfgedrag, zoals het lezen van nieuwswebsites of het versturen van e-mails, heb je nauwelijks bandbreedte nodig. Vaak is 10 tot 20 Mbit/s in combinatie met een fatsoenlijke router al ruim voldoende. De echte belasting ontstaat pas bij het streamen van video. Diensten als Netflix of Disney+ geven duidelijke richtlijnen: voor een film in Full HD heb je ongeveer 5 Mbit/s nodig, maar wil je in de hoogste 4K-kwaliteit kijken, dan loopt dat al snel op naar 25 Mbit/s per stream. Als je in je eentje woont en vooral streamt, is een instapabonnement van 50 tot 100 Mbit/s dus vaak al meer dan genoeg.

De impact van meerdere gebruikers

De rekensom verandert zodra er meerdere mensen tegelijkertijd van het netwerk gebruikmaken. Je moet de internetverbinding zien als een digitale waterleiding: als iedereen tegelijk de kraan openzet, neemt de druk af. In een gezinssituatie waar de één een film in 4K kijkt, de ander een groot spelbestand downloadt en een derde persoon aan het videobellen is, telt het verbruik al snel op. Voor een gemiddeld gezin van vier personen wordt een snelheid tussen de 100 en 200 Mbit/s aangeraden. Hiermee voorkom je de gevreesde buffer-cirkels tijdens het filmkijken en zorg je dat downloads op de achtergrond de rest van het verkeer niet platleggen.

©Pixel-Shot

Uploadsnelheid bij thuiswerken

Veel consumenten staren zich blind op de downloadsnelheid, oftewel hoe snel je gegevens binnenhaalt. Maar sinds het massale thuiswerken is de uploadsnelheid minstens zo belangrijk geworden. Die bepaalt immers hoe snel jij gegevens naar het internet kan versturen. Tijdens een videogesprek via Teams of Zoom moet jouw beeld en geluid helder bij de collega's aankomen.

Bij traditionele kabelverbindingen is de uploadsnelheid vaak een fractie van de downloadsnelheid. Glasvezel biedt hier een groot voordeel omdat de upload- en downloadsnelheid daar meestal gelijk zijn (symmetrisch). Als je vaak grote bestanden naar de cloud stuurt of veel videobelt, is een abonnement met een hogere uploadsnelheid geen overbodige luxe.

Populaire merken voor netwerkapparatuur

Bij de zoektocht naar betere routers of mesh-systemen om je internetsnelheid optimaal te benutten, kom je al snel een aantal bekende namen tegen. TP-Link is momenteel een van de grootste spelers en biedt met de Deco-reeks toegankelijke oplossingen voor betere wifi-dekking in het hele huis. Netgear is een andere zwaargewicht die met hun Nighthawk-routers en Orbi-systemen vaak de bovenkant van de markt bedient voor veeleisende gebruikers. Voor consumenten die zweren bij stabiliteit en uitgebreide functies is het Duitse AVM, de maker van de iconische FRITZ!Box, al jaren een vaste waarde. Ook ASUS timmert hard aan de weg met krachtige routers die specifiek gericht zijn op gamers en gebruikers die maximale controle over hun netwerkinstellingen wensen.

Gigabit-internet vaak overkill

Providers adverteren steeds vaker met snelheden van 1000 Mbit/s (1 Gbit/s) of hoger. Hoewel dat indrukwekkend klinkt, is het voor de gemiddelde consument vaak overkill. Je merkt dat verschil eigenlijk alleen als je zeer regelmatig gigantische bestanden downloadt, zoals updates voor moderne games die soms wel 100 GB groot zijn. Met een gigabit-verbinding is zo'n update in enkele minuten binnen, terwijl je met een 100Mbit/s-verbinding wat langer moet wachten. Voor dagelijks gebruik, inclusief streamen en surfen, merk je in de praktijk weinig verschil tussen 200 Mbit/s en 1000 Mbit/s, omdat de servers van websites en streamingdiensten de snelheid vaak zelf beperken.

Wifi als vertragende factor

Besef tot slot dat de snelheid die je bij je provider inkoopt niet altijd de snelheid is die je op je apparaat haalt. Vaak ligt een trage verbinding niet aan het abonnement, maar aan de wifi-dekking in huis. Een duur abonnement van 1 Gbit/s lost een slecht wifi-signaal op zolder niet op. Voordat je je abonnement upgradet omdat het internet traag aanvoelt, is het verstandig om eerst te controleren of je router op een goede plek staat of dat je wellicht een mesh-netwerk nodig hebt om het signaal te verbeteren. In veel gevallen is investeren in betere wifi-apparatuur effectiever dan betalen voor een hogere snelheid die je draadloos toch niet kunt benutten.