Kernen en threads van moderne microprocessors. Softwaredefinitie van topologie

Saul 9 september 2015 om 13:38 uur

Implementatie van multi-threaded game-engine-architectuur

  • Intel-blog,
  • Spelontwikkeling,
  • Parallelle programmering,
  • Website-ontwikkeling
  • Vertaling

Met de komst van multi-coreprocessors ontstond de behoefte om een ​​game-engine te creëren op basis van parallelle architectuur. Het gebruik van alle processors van het systeem - zowel de grafische processor (GPU) als de centrale processor (CPU) - biedt veel meer mogelijkheden vergeleken met een single-threaded GPU-only engine. Door bijvoorbeeld meer CPU-kernen te gebruiken, kun je de beelden verbeteren door het aantal fysieke objecten dat in de game wordt gebruikt te vergroten, en realistischer karaktergedrag bereiken door geavanceerde kunstmatige intelligentie (AI) te implementeren.
Laten we eens kijken naar de kenmerken van de implementatie van de multi-threaded architectuur van de game-engine.

1. Inleiding

1.1. Beoordeling

Dankzij de multi-threaded architectuur van de game-engine kunt u de mogelijkheden van alle platformprocessors maximaal benutten. Het omvat de parallelle uitvoering van verschillende functionele blokken op alle beschikbare processors. Het implementeren van een dergelijk schema blijkt echter niet zo eenvoudig te zijn. Individuele elementen van een game-engine hebben vaak interactie met elkaar, wat tot fouten kan leiden als ze gelijktijdig worden uitgevoerd. Om dergelijke scenario's aan te kunnen, biedt de engine speciale gdie mogelijke blokkering elimineren. Het implementeert ook methoden voor het gelijktijdig synchroniseren van gegevens, waardoor de uitvoeringstijd wordt geminimaliseerd.

Om de gepresenteerde materialen te begrijpen, moet u een goed begrip hebben van moderne methoden voor het maken van computerspellen, het ondersteunen van multi-threading voor game-engines of het verbeteren van de applicatieprestaties in het algemeen.

2. Parallelle uitvoeringsstatus

Concurrency-status is een sleutelconcept bij multithreading. Alleen door de game-engine in afzonderlijke systemen te verdelen, die elk in hun eigen modus werken en vrijwel geen interactie hebben met de rest van de engine, kan men de grootste efficiëntie van parallel computergebruik bereiken en de tijd die nodig is voor synchronisatie verminderen. Het is niet mogelijk om afzonderlijke delen van de engine volledig te isoleren, waardoor alle gedeelde bronnen worden geëlimineerd. Voor bewerkingen zoals het verkrijgen van gegevens over de positie of oriëntatie van objecten kunnen individuele systemen echter lokale kopieën van de gegevens gebruiken in plaats van gedeelde bronnen. Hierdoor kunt u de gegevensafhankelijkheid in verschillende delen van de engine minimaliseren. Meldingen van wijzigingen in gedeelde gegevens die door een afzonderlijk systeem worden aangebracht, worden naar de staatsmanager gestuurd, die ze in een wachtrij plaatst. Dit wordt de berichtenmodus genoemd. Deze modus gaat ervan uit dat de motorsystemen, na het voltooien van taken, meldingen over wijzigingen ontvangen en hun interne gegevens dienovereenkomstig bijwerken. Dit mechanisme kan de synchronisatietijd en de afhankelijkheid van systemen van elkaar aanzienlijk verminderen.

2.1 Uitvoeringsstaten

Om de uitvoeringsstatusmanager effectief te laten werken, wordt aanbevolen dat de bewerkingen worden gesynchroniseerd met een specifieke klokpuls. Hierdoor kunnen alle systemen gelijktijdig werken. In dit geval hoeft de klokfrequentie niet noodzakelijkerwijs overeen te komen met de frametransmissiefrequentie. En de duur van de cycli is mogelijk niet afhankelijk van de frequentie. Het kan zo worden geselecteerd dat één klokcyclus overeenkomt met de tijd die nodig is om één frame te verzenden (ongeacht de grootte ervan). Met andere woorden, de frequentie of duur van klokcycli wordt bepaald door de specifieke implementatie van de statusmanager. Figuur 1 toont een "gratis" stapsgewijze werkingsmodus, waarbij niet alle systemen een bewerking in dezelfde klokcyclus hoeven te voltooien. De modus waarin alle systemen hun activiteiten in één klokcyclus voltooien, wordt de ‘harde’ stapsgewijze modus genoemd. Het wordt schematisch weergegeven in Figuur 2.


Figuur 1. Uitvoeringsstatus in vrije stapmodus

2.1.1. Gratis turn-based modus
In de gratis stapsgewijze modus werken alle systemen continu gedurende een vooraf bepaalde tijdsperiode die nodig is om het volgende deel van de berekeningen te voltooien. De naam ‘vrij’ moet echter niet letterlijk worden opgevat: systemen worden niet op een willekeurig tijdstip gesynchroniseerd, ze zijn alleen ‘vrij’ in het kiezen van het aantal klokcycli dat nodig is om de volgende fase te voltooien.
Normaal gesproken is het in deze modus niet voldoende om een ​​eenvoudige melding van een statuswijziging naar de statusmanager te sturen. Ook moeten bijgewerkte gegevens worden verzonden. Dit komt omdat het systeem dat de gedeelde gegevens heeft gewijzigd mogelijk actief is terwijl een ander systeem dat op die gegevens wacht al klaar is om de update uit te voeren. In dit geval is meer geheugen vereist omdat er meer kopieën van de gegevens moeten worden gemaakt. Daarom kan de ‘vrije’ modus niet als een universele oplossing voor alle gelegenheden worden beschouwd.
2.1.2. Harde turn-based modus
In deze modus worden de taken van alle systemen in één klokcyclus voltooid. Dit mechanisme is eenvoudiger te implementeren en vereist niet de overdracht van bijgewerkte gegevens samen met de melding. Het ene systeem kan indien nodig eenvoudigweg nieuwe waarden opvragen bij een ander systeem (uiteraard aan het einde van de uitvoeringscyclus).
In de harde modus kunt u een pseudo-vrije, stapsgewijze werkwijze implementeren door berekeningen over verschillende stappen te verdelen. Dit kan met name nodig zijn voor AI-berekeningen, waarbij in de eerste klokcyclus een initieel ‘algemeen doel’ wordt berekend, dat in daaropvolgende fasen geleidelijk wordt verfijnd.


Figuur 2. Uitvoeringsstatus in harde stapmodus

2.2. Gegevenssynchronisatie

Wijzigingen in gedeelde gegevens door meerdere systemen kunnen tot conflicterende wijzigingen leiden. In dit geval moet het berichtensysteem een ​​algoritme bieden voor het selecteren van de juiste eindwaarde. Er zijn twee hoofdbenaderingen op basis van de volgende criteria.
  • Tijd: De uiteindelijke waarde is de laatst aangebrachte wijziging.
  • Prioriteit: De resulterende waarde is de wijziging die is aangebracht door het systeem met de hoogste prioriteit. Als de systemen dezelfde prioriteit hebben, kan er ook rekening worden gehouden met de timing van wijzigingen.
Alle verouderde gegevens (op basis van een van de criteria) kunnen eenvoudigweg worden overschreven of uitgesloten van de notificatiewachtrij.
Omdat de resulterende waarde kan afhangen van de volgorde waarin wijzigingen worden aangebracht, kan het gebruik van relatieve waarden voor gedeelde gegevens erg lastig zijn. In dergelijke gevallen moeten absolute waarden worden gebruikt. Vervolgens kunnen systemen bij het bijwerken van lokale gegevens eenvoudigweg de oude waarden vervangen door de nieuwe. De optimale oplossing is om absolute of relatieve waarden te kiezen, afhankelijk van de specifieke situatie. Algemene gegevens zoals positie en oriëntatie moeten bijvoorbeeld absolute waarden hebben, omdat de volgorde waarin wijzigingen worden aangebracht voor hen belangrijk is. Relatieve waarden kunnen bijvoorbeeld worden gebruikt voor een deeltjesgeneratiesysteem, omdat alle informatie over deeltjes alleen daarin wordt opgeslagen.

3. Motor

Bij de ontwikkeling van de motor ligt de nadruk vooral op de flexibiliteit die nodig is om de functionaliteit verder uit te breiden. Hierdoor kan het worden geoptimaliseerd voor gebruik onder bepaalde beperkingen (bijvoorbeeld geheugen).
De engine kan in twee delen worden verdeeld: raamwerk en managers. Het raamwerk (zie sectie 3.1) omvat delen van het spel die tijdens de uitvoering worden gerepliceerd, dat wil zeggen dat ze in verschillende exemplaren bestaan. Het bevat ook elementen die betrokken zijn bij de uitvoering van de hoofdspellus. Managers (zie paragraaf 3.2) zijn Singleton-objecten die verantwoordelijk zijn voor de uitvoering van de logische component van het spel.
Hieronder ziet u een diagram van de game-engine.


Figuur 3. Algemene motorarchitectuur

Houd er rekening mee dat functionele spelmodules of systemen geen deel uitmaken van de engine. De motor verbindt ze alleen met elkaar en fungeert als verbindingselement. Deze modulaire organisatie maakt het mogelijk om systemen naar behoefte te laden en lossen.

De interactie tussen de motor en systemen wordt uitgevoerd met behulp van interfaces. Ze zijn zo geïmplementeerd dat de engine toegang krijgt tot de systeemfuncties en de systemen toegang krijgen tot de managers van de engine.
Een gedetailleerd motordiagram vindt u in bijlage A, “Motordiagram”.

In feite zijn alle systemen onafhankelijk van elkaar (zie Hoofdstuk 2, “Concurrency State”), wat betekent dat ze parallel acties kunnen uitvoeren zonder de werking van andere systemen te beïnvloeden. Elke wijziging in de gegevens zal echter bepaalde problemen met zich meebrengen, aangezien de systemen met elkaar zullen moeten communiceren. Uitwisseling van informatie tussen systemen is noodzakelijk in de volgende gevallen:

  • om een ​​ander systeem op de hoogte te stellen van wijzigingen in algemene gegevens (zoals de positie of oriëntatie van objecten);
  • om functies uit te voeren die niet beschikbaar zijn voor het systeem (het AI-systeem heeft bijvoorbeeld toegang tot het systeem om de geometrische of fysieke eigenschappen van een object te berekenen om een ​​straalkruisingstest uit te voeren).
In het eerste geval kan de in de vorige paragraaf beschreven statusmanager worden gebruikt om de informatie-uitwisseling te beheren. (Voor meer informatie over de statusmanager, zie Paragraaf 3.2.2, “Statemanager.”)
In het tweede geval is het noodzakelijk om een ​​speciaal mechanisme te implementeren waarmee de diensten van het ene systeem door het andere kunnen worden gebruikt. Een volledige beschrijving van dit mechanisme wordt gegeven in Paragraaf 3.2.3, “Service Manager”.

3.1. Kader

Het raamwerk dient om alle elementen van de motor te combineren. Hier wordt de engine geïnitialiseerd, met uitzondering van managers, van wie de instances wereldwijd worden gemaakt. Het slaat ook informatie over de scène op. Om meer flexibiliteit te bereiken, wordt een scène geïmplementeerd als een zogenaamde generieke scène, die generieke objecten bevat. Het zijn containers die verschillende functionele delen van de scène combineren. Zie paragraaf 3.1.2 voor details.
De hoofdspellus is ook in het raamwerk geïmplementeerd. Schematisch kan dit als volgt worden weergegeven.


Figuur 4. Hoofdspellus

De engine draait in een vensteromgeving, dus de eerste stap van de gameloop is het verwerken van alle openstaande OS-vensterberichten. Als dit niet gebeurt, reageert de engine niet op OS-berichten. In de tweede stap wijst de planner taken toe met behulp van Taakbeheer. Dit proces wordt hieronder in paragraaf 3.1.1 gedetailleerd beschreven. Hierna stuurt de statusmanager (zie paragraaf 3.2.2) informatie over de wijzigingen die zijn aangebracht aan de motorsystemen waarvan de werking hierdoor mogelijk wordt beïnvloed. In de laatste stap bepaalt het raamwerk, afhankelijk van de uitvoeringsstatus, of de engine moet worden beëindigd of voortgezet, bijvoorbeeld om naar de volgende scène te gaan. Informatie over de staat van de motor wordt opgeslagen door de omgevingsmanager. Zie paragraaf 3.2.4 voor details.

3.1.1. Planner
De planner genereert een referentie-uitvoeringsklok op een gespecificeerde frequentie. Als de benchmarkmodus vereist dat de volgende bewerking onmiddellijk begint nadat de vorige is voltooid, zonder te wachten op het einde van de klokcyclus, kan de frequentie onbeperkt zijn.
Op basis van het kloksignaal schakelt de planner, met behulp van de taakmanager, de systemen naar de uitvoeringsmodus. In de gratis stapsgewijze modus (paragraaf 2.1.1) ondervraagt ​​de planner systemen om te bepalen hoeveel klokcycli ze nodig hebben om een ​​taak te voltooien. Op basis van de onderzoeksresultaten bepaalt de planner welke systemen gereed zijn voor uitvoering en welke hun werk volgens een bepaalde klokcyclus zullen voltooien. De planner kan het aantal klokcycli wijzigen als een systeem meer tijd nodig heeft om uit te voeren. In de harde stapmodus (paragraaf 2.1.2) starten en eindigen alle systemen de uitvoering op dezelfde klokcyclus, dus wacht de planner totdat alle systemen klaar zijn met uitvoeren.
3.1.2. Universele scène en objecten
De generieke scène en objecten zijn containers voor functionaliteit die in andere systemen is geïmplementeerd. Ze zijn uitsluitend bedoeld voor interactie met de motor en voeren geen andere functies uit. Ze kunnen echter worden uitgebreid om te profiteren van functies die op andere systemen beschikbaar zijn. Dit maakt losse koppeling mogelijk. Een universele scène en objecten kunnen inderdaad de eigenschappen van andere systemen gebruiken zonder eraan gebonden te zijn. Het is deze eigenschap die de afhankelijkheid van systemen van elkaar elimineert en hen de mogelijkheid geeft om tegelijkertijd te werken.
Het onderstaande diagram toont de uitbreiding van een universele scène en object.


Figuur 5. Algemene scène- en objectextensie

Laten we eens kijken hoe extensies werken aan de hand van het volgende voorbeeld. Laten we zeggen dat een universele scène is uitgebreid, een universele scène is uitgebreid om grafische, fysieke en andere eigenschappen te gebruiken. In dit geval zal het “grafische” deel van de extensie verantwoordelijk zijn voor het initialiseren van de weergave, en het “fysieke” deel zal verantwoordelijk zijn voor het implementeren van natuurkundige wetten voor vaste lichamen, zoals de zwaartekracht. Scènes bevatten objecten, dus een generieke scène zal ook meerdere generieke objecten bevatten. Generieke objecten kunnen ook worden uitgebreid om grafische, fysieke en andere eigenschappen te gebruiken. Het tekenen van een object op het scherm zal bijvoorbeeld worden geïmplementeerd door grafische uitbreidingsfuncties, en de berekening van de interactie van vaste lichamen zal worden geïmplementeerd door fysieke.

Een gedetailleerd diagram van de interactie tussen de motor en de systemen wordt gegeven in bijlage B, ‘Interactieschema tussen de motor en de systemen’.
Opgemerkt moet worden dat de generieke scène en het generieke object verantwoordelijk zijn voor het registreren van al hun "extensies" bij de statusmanager, zodat alle extensies meldingen kunnen ontvangen van wijzigingen die door andere extensies (dat wil zeggen andere systemen) zijn aangebracht. Een voorbeeld hiervan is een grafische extensie die is geregistreerd om meldingen te ontvangen over positie- en oriëntatiewijzigingen die door een fysieke extensie zijn aangebracht.
Voor gedetailleerde informatie over systeemcomponenten, zie Paragraaf 5.2, “Systeemcomponenten.”

3.2. Managers

Managers controleren de werking van de motor. Het zijn Singleton-objecten, dat wil zeggen dat elk managertype slechts in één exemplaar beschikbaar is. Dit is nodig omdat duplicatie van middelen onder managers onvermijdelijk zal leiden tot overtolligheid en een negatieve impact zal hebben op de productiviteit. Bovendien zijn managers verantwoordelijk voor het implementeren van gemeenschappelijke functies in alle systemen.
3.2.1. Taakbeheer
De taakbeheerder is verantwoordelijk voor het beheer van systeemtaken in de threadpool. Om een ​​optimale n-voudige schaling te bieden en de toewijzing van onnodige threads te voorkomen, waardoor onnodige overhead van taakwisselingen in het besturingssysteem wordt geëlimineerd, creëert de threadpool één thread per processor.

De planner biedt de taakbeheerder een lijst met taken die moeten worden uitgevoerd, evenals informatie over welke taken moeten wachten op voltooiing. Zij ontvangt deze gegevens van verschillende systemen. Elk systeem krijgt slechts één taak om uit te voeren. Deze methode wordt functionele ontbinding genoemd. Voor gegevensverwerking kan elke taak echter worden onderverdeeld in een willekeurig aantal subtaken (gegevensontleding).
Hieronder ziet u een voorbeeld van het verdelen van taken tussen threads voor een quad-coresysteem.


Figuur 6. Voorbeeld van een threadpool gebruikt door Taakbeheer

Naast het verwerken van plannerverzoeken voor toegang tot hoofdtaken, kan de taakbeheerder in de initialisatiemodus werken. Het controleert de systemen opeenvolgend vanuit elke thread, zodat ze de lokale gegevensopslag kunnen initialiseren die nodig is voor de werking.
Tips voor het implementeren van een taakbeheerder worden gegeven in bijlage D, ‘Tips voor het implementeren van taken’.

3.2.2. Staatsmanager
De staatsmanager maakt deel uit van de berichtenengine. Het houdt wijzigingen bij en stuurt meldingen hierover naar alle systemen die mogelijk door deze wijzigingen worden beïnvloed. Om te voorkomen dat onnodige meldingen worden verzonden, slaat de statusmanager informatie op over welke systemen in welk geval moeten worden gewaarschuwd. Dit mechanisme wordt geïmplementeerd met behulp van het Observer-patroon (zie bijlage C, “Observer (ontwerppatroon)”). Kort gezegd impliceert dit patroon het gebruik van een ‘waarnemer’ die eventuele veranderingen in het onderwerp in de gaten houdt, waarbij de veranderingscontroller als tussenpersoon tussen hen fungeert.

Het mechanisme werkt als volgt. 1. De waarnemer vertelt de change controller (of statusmanager) welke entiteiten hij wil monitoren op veranderingen. 2. De betrokkene stelt de verantwoordelijke op de hoogte van al zijn wijzigingen. 3. Op basis van een signaal uit het raamwerk informeert de controller de waarnemer over veranderingen in het onderwerp. 4. De waarnemer stuurt een verzoek naar de proefpersoon om bijgewerkte gegevens te ontvangen.

In de gratis stapsgewijze uitvoeringsmodus (zie paragraaf 2.1.1) wordt de implementatie van dit mechanisme iets gecompliceerder. Eerst moeten de bijgewerkte gegevens samen met de wijzigingsmelding worden verzonden. In deze modus is push-verzending niet van toepassing. Als het systeem dat verantwoordelijk is voor de wijzigingen nog niet klaar is met uitvoeren wanneer het verzoek wordt ontvangen, kan het inderdaad geen bijgewerkte gegevens verstrekken. Ten tweede: als een systeem aan het einde van de klokcyclus nog niet klaar is om de wijzigingen te ontvangen, zal de statusmanager de gewijzigde gegevens moeten bewaren totdat alle systemen die zijn geregistreerd om de wijzigingen te ontvangen, gereed zijn.

Het raamwerk voorziet hiervoor in twee statusmanagers: voor het verwerken van wijzigingen op scèneniveau en op objectniveau. Normaal gesproken zijn berichten over scènes en objecten onafhankelijk van elkaar, dus het gebruik van twee afzonderlijke managers elimineert de noodzaak om onnodige gegevens te verwerken. Maar als de scène rekening moet houden met de toestand van een object, kan deze worden geregistreerd om meldingen over de wijzigingen te ontvangen.

Om onnodige synchronisatie te voorkomen, creëert de statusmanager afzonderlijk een wachtrij met wijzigingsmeldingen voor elke thread die door de taakbeheerder wordt gemaakt. Daarom is er geen synchronisatie vereist bij toegang tot de wachtrij. Paragraaf 2.2 beschrijft een methode die kan worden gebruikt om wachtrijen na uitvoering samen te voegen.


Figuur 7. Melding van interne wijzigingen aan een generiek object

Meldingen van wijzigingen hoeven niet opeenvolgend te worden verzonden. Er is een manier om ze parallel te verzenden. Bij het uitvoeren van een taak werkt het systeem met al zijn objecten. Terwijl fysieke objecten bijvoorbeeld met elkaar interageren, regelt het fysieke systeem hun beweging, de berekening van botsingen, nieuwe actiekrachten, enz. Bij het ontvangen van meldingen heeft een systeemobject geen interactie met andere objecten in zijn systeem. Het werkt samen met de bijbehorende generieke objectextensies. Dit betekent dat generieke objecten nu onafhankelijk van elkaar zijn en tegelijkertijd kunnen worden bijgewerkt. Deze aanpak sluit randgevallen niet uit waarmee tijdens het synchronisatieproces rekening moet worden gehouden. U kunt er echter wel de parallelle uitvoeringsmodus mee gebruiken wanneer het erop leek dat u alleen opeenvolgend kon handelen.

3.2.3. Servicemanager
De servicemanager geeft systemen toegang tot functies van andere systemen die anders voor hen niet beschikbaar zouden zijn. Het is belangrijk om te begrijpen dat functies toegankelijk zijn via interfaces en niet rechtstreeks. Informatie over systeeminterfaces wordt ook opgeslagen in de servicemanager.
Om de afhankelijkheid van systemen van elkaar te elimineren, heeft elk van hen slechts een klein aantal services. Bovendien wordt de mogelijkheid om een ​​bepaalde dienst te gebruiken niet bepaald door het systeem zelf, maar door de servicemanager.


Figuur 8. Voorbeeld van een servicemanager

De servicemanager heeft nog een andere functie. Het geeft systemen toegang tot eigenschappen van andere systemen. Eigenschappen zijn systeemspecifieke waarden die niet in het berichtensysteem worden verzonden. Dit kan de uitbreiding van de schermresolutie in een grafisch systeem zijn, of de omvang van de zwaartekracht in een fysiek systeem. De servicemanager geeft systemen toegang tot deze gegevens, maar laat deze niet direct controleren. Het plaatst eigenschapswijzigingen in een speciale wachtrij en publiceert deze pas na opeenvolgende uitvoering. Houd er rekening mee dat toegang tot de eigenschappen van een ander systeem zelden vereist is en dat er geen misbruik van mag worden gemaakt. U hebt dit bijvoorbeeld nodig om de wireframe-modus in het grafische systeem in of uit te schakelen vanuit het consolevenster, of om de schermresolutie op verzoek van de speler te wijzigen via de gebruikersinterface. Deze functie wordt voornamelijk gebruikt om parameters in te stellen die niet van frame tot frame veranderen.

3.2.4. Omgevingsmanager
  • De omgevingsmanager beheert de runtime-omgeving van de motor. De functies kunnen in de volgende groepen worden verdeeld.
  • Variabelen: namen en waarden van algemene variabelen die door alle delen van de engine worden gebruikt. Meestal worden de waarden van variabelen bepaald bij het laden van een scène of bepaalde gebruikersinstellingen. De motor en verschillende systemen kunnen er toegang toe krijgen door een verzoek te sturen.
  • Uitvoering: Uitvoeringsgegevens, zoals de voltooiing van een scène of programma. Deze parameters kunnen zowel door de systemen zelf als door de motor worden ingesteld en opgevraagd.
3.2.5. Platformbeheerder
De platformmanager implementeert een abstractie voor besturingssysteemaanroepen en biedt ook extra functionaliteit die verder gaat dan de eenvoudige abstractie. Het voordeel van deze aanpak is dat deze verschillende gemeenschappelijke functies binnen één oproep omvat. Dat wil zeggen dat ze niet voor elke beller afzonderlijk hoeven te worden geïmplementeerd, waardoor deze wordt overladen met details over OS-oproepen.
Overweeg bijvoorbeeld om de platformbeheerder te bellen om de dynamische bibliotheek van het systeem te laden. Het start niet alleen het systeem op, maar haalt ook functie-ingangspunten op en roept de bibliotheekinitialisatiefunctie aan. De manager bewaart ook de bibliotheekhandgreep en laadt deze uit nadat de motor is afgelopen.

De platformbeheerder is ook verantwoordelijk voor het verstrekken van informatie over de processor, zoals ondersteunde SIMD-instructies, en voor het initialiseren van de specifieke werkingsmodus van processen. Systemen kunnen geen andere functies voor het genereren van query's gebruiken.

4. Interfaces

Interfaces zijn de middelen voor interactie tussen het raamwerk, managers en systemen. Het raamwerk en de managers maken deel uit van de motor, zodat ze rechtstreeks met elkaar kunnen communiceren. De systemen zijn niet gerelateerd aan de motor. Bovendien vervullen ze allemaal verschillende functies, wat leidt tot de noodzaak om een ​​uniforme methode voor interactie met hen te creëren. Omdat de systemen niet rechtstreeks met managers kunnen communiceren, moeten ze van een andere toegangsmethode worden voorzien. Niet alle functies van managers moeten echter openstaan ​​voor systemen. Sommige daarvan zijn alleen beschikbaar voor het raamwerk.

Interfaces definiëren de reeks functies die nodig zijn om een ​​standaardtoegangsmethode te gebruiken. Dit elimineert de noodzaak voor het raamwerk om de implementatiedetails van specifieke systemen te kennen, aangezien het er alleen mee kan communiceren via een specifieke reeks oproepen.

4.1. Onderwerp- en waarnemersinterfaces

Het voornaamste doel van de subject- en waarnemersinterfaces is het registreren welke waarnemers notificaties moeten sturen over welke onderwerpen, en om dergelijke notificaties te versturen. Waarnemersregistratie en ontkoppeling zijn standaardfuncties voor alle actoren die zijn opgenomen in hun interface-implementatie.

4.2. Managerinterfaces

Managers zijn, ondanks dat ze Singleton-objecten zijn, alleen rechtstreeks toegankelijk voor het raamwerk. Andere systemen hebben alleen toegang tot managers via interfaces die slechts een deel van hun algehele functionaliteit vertegenwoordigen. Na initialisatie wordt de interface doorgegeven aan het systeem, dat deze gebruikt om met bepaalde managerfuncties te werken.
Er is niet één interface voor alle managers. Elk van hen heeft zijn eigen afzonderlijke interface.

4.3. Systeeminterfaces

Om een ​​raamwerk toegang te geven tot systeemcomponenten heeft het interfaces nodig. Zonder hen zou de ondersteuning voor elk nieuw motorsysteem afzonderlijk moeten worden geïmplementeerd.
Elk systeem bevat vier componenten, dus er moeten vier interfaces zijn. Namelijk: systeem, scène, object en taak. Voor een gedetailleerde beschrijving, zie Hoofdstuk 5, Systemen. Interfaces zijn middelen om toegang te krijgen tot componenten. Met de systeeminterfaces kunt u scènes maken en verwijderen. Met scène-interfaces kunt u op hun beurt objecten maken en vernietigen, en informatie opvragen over de hoofdtaak van het systeem. De taakinterface wordt voornamelijk gebruikt door Taakbeheer bij het toewijzen van taken aan een threadpool.
Omdat scène en object, als delen van een systeem, met elkaar moeten interageren en met de universele scène en het universele object waaraan ze zijn gekoppeld, worden hun interfaces ook gecreëerd op basis van de interfaces van het subject en de waarnemer.

4.4. Wijzig interfaces

Deze interfaces worden gebruikt om gegevens tussen systemen over te dragen. Alle systemen die wijzigingen van een bepaald type uitvoeren, moeten een dergelijke interface implementeren. Een voorbeeld is geometrie. De geometrie-interface bevat methoden voor het bepalen van de positie, oriëntatie en schaal van een element. Elk systeem dat wijzigingen in de geometrie aanbrengt, moet een interface implementeren zodat toegang tot de gewijzigde gegevens geen informatie over andere systemen vereist.

5. Systemen

Systemen maken deel uit van de engine die verantwoordelijk is voor het implementeren van spelfunctionaliteit. Ze voeren alle basistaken uit zonder welke de motor geen zin zou hebben. Interactie tussen de motor en systemen vindt plaats met behulp van interfaces (zie paragraaf 4.3, “Systeeminterfaces”). Dit is nodig om de motor niet te overbelasten met informatie over verschillende soorten systemen. Dankzij interfaces wordt het proces van het toevoegen van een nieuw systeem veel eenvoudiger, omdat de engine geen rekening hoeft te houden met alle implementatiedetails.

5.1. Soorten

Enginesystemen kunnen grofweg worden onderverdeeld in verschillende vooraf gedefinieerde categorieën die overeenkomen met standaard spelcomponenten. Bijvoorbeeld: geometrie, graphics, natuurkunde (botsing van stijve lichamen), geluid, invoerverwerking, AI en animatie.
Systemen met niet-standaardfuncties behoren tot een aparte categorie. Het is belangrijk om te begrijpen dat elk systeem dat gegevens voor een bepaalde categorie wijzigt, op de hoogte moet zijn van de interface van die categorie, aangezien de engine dergelijke informatie niet levert.

5.2. Systeemcomponenten

Voor elk systeem moeten meerdere componenten worden geïmplementeerd. Sommigen daarvan zijn: systeem, scène, object en taak. Al deze componenten dienen voor interactie met verschillende delen van de motor.
In onderstaand schema zijn de interacties tussen de verschillende componenten weergegeven.


Figuur 9. Systeemcomponenten

Een gedetailleerd diagram van de verbindingen tussen motorsystemen wordt gegeven in bijlage B, ‘Interactieschema tussen de motor en de systemen’.

5.2.1. Systeem
De "systeem" -component, of simpelweg het systeem, is verantwoordelijk voor het initialiseren van systeembronnen, die praktisch niet zullen veranderen tijdens de werking van de engine. Het grafische systeem analyseert bijvoorbeeld bronadressen om hun locatie te bepalen en het laden te versnellen wanneer de bron wordt gebruikt. Het stelt ook de schermresolutie in.
Het systeem is het belangrijkste toegangspunt voor het raamwerk. Het biedt informatie over zichzelf (zoals het systeemtype), evenals methoden voor het maken en verwijderen van scènes.
5.2.2. Scène
De scènecomponent, of systeemscène, is verantwoordelijk voor het beheer van de bronnen die bij de huidige scène horen. Een universele scène maakt gebruik van systeemscènes om de functionaliteit uit te breiden door gebruik te maken van hun functies. Een voorbeeld is een fysieke scène, die wordt gebruikt bij het creëren van een nieuwe spelwereld en bij het initialiseren van de scène de zwaartekrachten daarin bepaalt.
Scènes bieden methoden voor het maken en vernietigen van objecten, evenals een taakcomponent voor het verwerken van de scène en een methode om er toegang toe te krijgen.
5.2.3. Voorwerp
Een objectcomponent, of systeemobject, hoort bij de scène en wordt meestal geassocieerd met wat de gebruiker op het scherm ziet. Een generiek object gebruikt een systeemobject om de functionaliteit uit te breiden door de eigenschappen ervan als zijn eigen eigenschappen weer te geven.
Een voorbeeld hiervan is de geometrische, grafische en fysieke uitbreiding van een generiek object om een ​​houten balk op het scherm weer te geven. Geometrische eigenschappen omvatten de positie, oriëntatie en schaal van het object. Het grafische systeem gebruikt een speciaal raster om het weer te geven. En het fysieke systeem zal het de eigenschappen geven van een vast lichaam om de interacties met andere lichamen en de werkende zwaartekrachtkrachten te berekenen.

In bepaalde gevallen moet een systeemobject wijzigingen aan een generiek object of een van zijn uitbreidingen kunnen accommoderen. Hiervoor kunt u een speciale verbinding maken waarmee u de aangebrachte wijzigingen kunt volgen.

5.2.4. Taak
Het taakonderdeel, of systeemtaak, wordt gebruikt om de scène te verwerken. De taak ontvangt een opdracht om de scène bij te werken van Taakbeheer. Dit is een signaal om systeemfuncties op scèneobjecten te starten.
De uitvoering van een taak kan worden onderverdeeld in subtaken, waarbij deze ook met behulp van een taakbeheerder over een nog groter aantal threads kunnen worden verdeeld. Dit is een handige manier om de engine over meerdere processors te schalen. Deze methode wordt data-decompositie genoemd.
Informatie over objectwijzigingen tijdens het bijwerken van scènetaken wordt naar de statusmanager verzonden. Voor details over de staatsmanager, zie paragraaf 3.2.2.

6. Alle componenten samenbrengen

Alle hierboven beschreven elementen zijn met elkaar verbonden en maken deel uit van één geheel. De werking van de motor kan in verschillende fasen worden verdeeld, die in de volgende paragrafen worden beschreven.

6.1. Initialisatiefase

Het werk van de engine begint met de initialisatie van managers en het raamwerk.
  • Het raamwerk roept de scènelader aan.
  • Nadat is bepaald welke systemen de scène zal gebruiken, belt de lader de platformbeheerder om de juiste modules te laden.
  • De platformmanager laadt de juiste modules, geeft deze door aan de interfacemanager en roept ze vervolgens op om een ​​nieuw systeem te maken.
  • De module retourneert een verwijzing naar een exemplaar van het systeem dat de systeeminterface implementeert naar de lader.
  • De servicemanager registreert alle diensten die een systeemmodule levert.


Figuur 10. Initialisatie van managers en motorsystemen

6.2. Laadfase van scène

De besturing wordt teruggegeven aan de lader, die de scène laadt.
  • De lader creëert een universele scène. Om systeemscènes te instantiëren, roept het systeeminterfaces op, waardoor de functionaliteit van de generieke scène wordt uitgebreid.
  • Een universele scène definieert welke gegevens elke systeemscène kan wijzigen en over welke wijzigingen er meldingen over moeten worden ontvangen.
  • Door scènes in kaart te brengen die specifieke wijzigingen uitvoeren en daarover geïnformeerd willen worden, geeft de generieke scène deze informatie door aan de statusmanager.
  • Voor elk scèneobject maakt de lader een generiek object en bepaalt vervolgens welke systemen het generieke object zullen uitbreiden. Correspondentie tussen systeemobjecten wordt bepaald met behulp van hetzelfde schema dat wordt gebruikt voor scènes. Het wordt ook doorgegeven aan de staatsmanager.
  • Met behulp van de resulterende scène-interfaces instantiëert de lader systeemobjecten en gebruikt deze om generieke objecten uit te breiden.
  • De planner vraagt ​​scène-interfaces om informatie over hun hoofdtaken om deze informatie tijdens de uitvoering door te geven aan de taakbeheerder.


Figuur 11. Algemene scène- en objectinitialisatie

6.3. Spelcyclusfase

  • De platformmanager wordt gebruikt om vensterberichten en andere elementen af ​​te handelen die nodig zijn om het huidige platform te laten draaien.
  • De besturing gaat vervolgens over naar de planner, die wacht op het einde van de klokcyclus om verder te werken.
  • Aan het einde van een vinkje in de vrije stapmodus controleert de planner welke taken zijn voltooid. Alle voltooide taken (dat wil zeggen klaar om te worden uitgevoerd) worden overgebracht naar de taakbeheerder.
  • De planner bepaalt welke taken tijdens de huidige klokcyclus worden voltooid en wacht tot deze zijn voltooid.
  • In de harde stapmodus worden deze bewerkingen elke klokcyclus herhaald. De planner draagt ​​alle taken over aan de manager en wacht tot deze zijn voltooid.
6.3.1. Uitvoering van een taak
De controle gaat over naar de taakbeheerder.
  • Het vormt een wachtrij van alle ontvangen taken en zodra er vrije threads verschijnen, begint het deze uit te voeren. (Het proces voor het uitvoeren van taken verschilt per systeem. Systemen kunnen aan slechts één taak werken of meerdere taken uit een wachtrij tegelijkertijd verwerken, waardoor parallelle uitvoering wordt geïmplementeerd.)
  • Tijdens de uitvoering kunnen taken met de hele scène of alleen met bepaalde objecten werken, waarbij hun interne gegevens worden gewijzigd.
  • Systemen moeten op de hoogte worden gesteld van eventuele wijzigingen in gedeelde gegevens (zoals positie of oriëntatie). Wanneer een taak wordt uitgevoerd, informeert de systeemscène of het object de waarnemer over eventuele wijzigingen. In dit geval fungeert de waarnemer feitelijk als change controller, die deel uitmaakt van de staatsmanager.
  • De wijzigingscontroller creëert een wachtrij met wijzigingsmeldingen voor daaropvolgende verwerking. Het negeert veranderingen die geen invloed hebben op de gegeven waarnemer.
  • Om bepaalde diensten te gebruiken, neemt een taak contact op met de servicemanager. Met de servicemanager kunt u ook eigenschappen van andere systemen wijzigen die niet in de berichtenengine kunnen worden gecommuniceerd (het gegevensinvoersysteem verandert bijvoorbeeld de schermextensie, een eigenschap van het grafische systeem).
  • Taken kunnen ook contact opnemen met de omgevingsmanager om omgevingsvariabelen te verkrijgen en de uitvoeringsstatus te wijzigen (uitvoering pauzeren, naar de volgende scène gaan, enz.).


Figuur 12. Taakbeheer en taken

6.3.2. Gegevensupdate
Nadat alle taken van de huidige tick zijn voltooid, neemt de hoofdspellus contact op met de staatsmanager om de fase van het bijwerken van gegevens te starten.
  • De staatsmanager roept op zijn beurt elk van zijn wijzigingscontrollers op om de verzamelde meldingen te verspreiden. De controller controleert per actor naar welke waarnemers wijzigingsmeldingen moeten worden gestuurd.
  • Vervolgens roept het de gewenste waarnemer op en brengt deze op de hoogte van de wijziging (de melding bevat ook een verwijzing naar de interface van de actor). In de vrije stapsgewijze modus ontvangt de waarnemer de gewijzigde gegevens van de veranderingscontroller, maar in de harde stapsgewijze modus moet hij deze bij het onderwerp zelf opvragen.
  • Normaal gesproken zijn de waarnemers die geïnteresseerd zijn in het ontvangen van meldingen over wijzigingen aan een systeemobject andere systeemobjecten die aan hetzelfde generieke object zijn gekoppeld. Hiermee kunt u het proces van het aanbrengen van wijzigingen verdelen in verschillende taken die parallel kunnen worden uitgevoerd. Om het synchronisatieproces te vereenvoudigen, kunt u alle gerelateerde uitbreidingen van een generiek object in één taak combineren.
6.3.3. Controleer de voortgang en sluit af
De laatste fase van de spelcyclus is het controleren van de status van de runtime-omgeving. Er zijn verschillende van dergelijke statussen: actief, pauze, volgende scène, enz. Als de actieve status is geselecteerd, wordt de volgende iteratie van de lus gestart. De “exit”-status betekent dat de lus eindigt, bronnen worden vrijgegeven en de applicatie wordt afgesloten. U kunt andere statussen implementeren, bijvoorbeeld "pauze", "volgende scène", enz.

7. Conclusie

Het hoofdidee van dit artikel wordt gepresenteerd in sectie 2, ‘Concurrency State’. Dankzij functionele decompositie en data-decompositie is het mogelijk om niet alleen de multi-threading van de engine te realiseren, maar ook de schaalbaarheid ervan naar nog meer cores in de toekomst. Als u synchronisatieoverhead wilt elimineren en toch gegevens up-to-date wilt houden, kunt u naast berichten ook statusmanagers gebruiken.

Het Observer-patroon is een functie van de berichtenengine. Het is belangrijk om goed te begrijpen hoe het werkt, zodat u de beste manier kunt kiezen om het voor de motor te implementeren. In feite is het een mechanisme voor interactie tussen verschillende systemen dat zorgt voor de synchronisatie van gedeelde gegevens.

Taakbeheer speelt een belangrijke rol bij de verdeling van de lasten. Bijlage D biedt tips voor het maken van een effectieve taakbeheerder voor een game-engine.

Zoals je kunt zien, kan de multi-threading van de game-engine worden geïmplementeerd dankzij een goed gedefinieerde structuur en berichtenmechanisme. Met zijn hulp kunt u de prestaties van huidige en toekomstige processors aanzienlijk verbeteren.

Bijlage A. Motordiagram

De verwerking wordt gestart vanuit de hoofdspellus (zie figuur 4, “Hoofdspellus”).


Bijlage B. Interactiediagram tussen de motor en systemen


Bijlage C: Waarnemer (ontwerppatroon)

Het Observer-patroon wordt gedetailleerd beschreven in het boek Object-Oriented Design Techniques. Design Patterns”, E. Gamma, R. Helm, R. Johnson, J. Vlissides (“Ontwerppatronen: elementen van herbruikbare objectgeoriënteerde software”, Gamma E., Helm R., Johnson R., Vlissides J.). Het werd voor het eerst in het Engels gepubliceerd in 1995 door Addison-Wesley.

Het hoofdidee van dit model is dit: als sommige elementen op de hoogte moeten worden gesteld van wijzigingen in andere elementen, hoeven ze niet door de lijst met alle mogelijke wijzigingen te bladeren, in een poging de benodigde gegevens daarin te vinden. Het model gaat uit van de aanwezigheid van een subject en een waarnemer, die worden gebruikt om meldingen van wijzigingen te verzenden. De waarnemer houdt eventuele veranderingen in het onderwerp in de gaten. De change controller fungeert als intermediair tussen deze twee componenten. Het volgende diagram illustreert deze relatie.


Figuur 13. Waarnemerssjabloon

Het proces voor het gebruik van dit model wordt hieronder beschreven.

  1. De change controller registreert de waarnemer en het onderwerp waarover hij meldingen wil ontvangen.
  2. De change controller is eigenlijk een waarnemer. In plaats van een waarnemer samen met een onderwerp, registreert hij zichzelf. Ook houdt de change controller een lijst bij van waarnemers en de bij hen geregistreerde onderwerpen.
  3. Het onderwerp voegt een waarnemer (dat wil zeggen de wijzigingsbeheerder) toe aan de lijst met waarnemers die op de hoogte willen worden gesteld van de wijzigingen. Soms wordt het type verandering bovendien gespecificeerd, wat bepaalt in welk soort veranderingen de waarnemer geïnteresseerd is. Hiermee kunt u het proces van het verzenden van meldingen over wijzigingen optimaliseren.
  4. Bij het wijzigen van gegevens of status stelt het onderwerp de waarnemer op de hoogte via een callback-mechanisme en geeft informatie door over de gewijzigde typen.
  5. De wijzigingscontroller creëert een wachtrij met wijzigingsmeldingen en wacht op een signaal om deze over objecten en systemen te verspreiden.
  6. Tijdens de distributie neemt de change controller contact op met echte waarnemers.
  7. Waarnemers vragen informatie over gewijzigde gegevens of status op bij de proefpersoon (of ontvangen deze samen met meldingen).
  8. Voordat een waarnemer wordt verwijderd, of wanneer deze geen meldingen meer over een onderwerp hoeft te ontvangen, wordt het abonnement op dat onderwerp in de wijzigingscontroller verwijderd. 
Er zijn veel verschillende manieren om taakverdeling te implementeren. Het is echter het beste om het aantal werkthreads gelijk te houden aan het aantal beschikbare logische processors op het platform. Probeer taken niet aan een specifieke draad te koppelen. De uitvoeringstijd van taken van verschillende systemen valt niet altijd samen. Dit kan leiden tot een ongelijkmatige verdeling van de belasting over de werkdraden en tot impactefficiëntie. Om dit proces te vereenvoudigen, gebruikt u taakbeheerbibliotheken zoals

Maar met de verovering van nieuwe pieken in frequentie-indicatoren werd het moeilijker om deze te verhogen, omdat dit de toename van de TDP van processors beïnvloedde. Daarom begonnen ontwikkelaars de breedte van processors te vergroten, namelijk door kernen toe te voegen, en het concept van multi-core ontstond.

Letterlijk zes tot zeven jaar geleden waren multi-coreprocessors vrijwel ongehoord. Nee, er bestonden al eerder multi-core processors van hetzelfde IBM-bedrijf, maar de verschijning van de eerste dual-core processor voor desktopcomputers, vond pas in 2005 plaats en deze processor heette Pentium D. Ook werd in 2005 een dual-core Opteron van AMD uitgebracht, maar dan voor serversystemen.

In dit artikel gaan we niet in detail in op historische feiten, maar bespreken we moderne multi-coreprocessors als een van de kenmerken van de CPU. En het allerbelangrijkste: we moeten uitzoeken wat deze multi-core oplevert in termen van prestaties voor de processor en voor jou en mij.

Verbeterde prestaties dankzij multi-core

Het principe van het verhogen van de processorprestaties door het gebruik van meerdere kernen is het opsplitsen van de uitvoering van threads (verschillende taken) in verschillende kernen. Samenvattend kunnen we zeggen dat bijna elk proces dat op uw systeem draait meerdere threads heeft.

Ik maak meteen een voorbehoud dat het besturingssysteem virtueel veel threads voor zichzelf kan maken en deze allemaal tegelijkertijd kan uitvoeren, zelfs als de processor fysiek single-core is. Dit principe implementeert dezelfde Windows-multitasking (bijvoorbeeld tegelijkertijd naar muziek luisteren en typen).


Laten we een antivirusprogramma als voorbeeld nemen. De ene draad zal de computer scannen, de andere zal de antivirusdatabase bijwerken (we hebben alles zeer vereenvoudigd om het algemene concept te begrijpen).

En laten we eens kijken naar wat er in twee verschillende gevallen zal gebeuren:

a) Single-coreprocessor. Omdat er twee threads tegelijkertijd actief zijn, moeten we voor de gebruiker (visueel) dezelfde gelijktijdige uitvoering creëren. Het besturingssysteem doet iets slims:er is een schakelaar tussen de uitvoering van deze twee threads (deze schakelaars zijn onmiddellijk en de tijd is in milliseconden). Dat wil zeggen, het systeem voerde de update een beetje uit, schakelde vervolgens abrupt over op scannen en vervolgens weer op updaten. Voor jou en mij lijkt het dus alsof we deze twee taken tegelijkertijd uitvoeren. Maar wat is er verloren? Natuurlijk, prestaties. Laten we dus naar de tweede optie kijken.

b) Multi-coreprocessor. In dit geval zal deze omschakeling niet plaatsvinden. Het systeem zal elke thread duidelijk naar een afzonderlijke kern sturen, waardoor we het overschakelen van thread naar thread, wat nadelig is voor de prestaties, kunnen vermijden (laten we de situatie idealiseren). Er worden twee threads tegelijkertijd uitgevoerd, dit is het principe van multi-core en multi-threading. Uiteindelijk zullen we veel sneller scannen en updaten op een multi-coreprocessor dan op een single-coreprocessor. Maar er zit een addertje onder het gras: niet alle programma's ondersteunen multi-cores. Niet elk programma kan op deze manier worden geoptimaliseerd. En alles gebeurt verre van zo ideaal als we beschreven. Maar elke dag creëren ontwikkelaars steeds meer programma's waarvan de code perfect is geoptimaliseerd voor uitvoering op multi-coreprocessors.

Heeft u multi-coreprocessors nodig? Alledaagse reden

Bij het kiezen van een verwerker voor een computer (namelijk als u nadenkt over het aantal kernen), moet u de belangrijkste soorten taken bepalen die deze zal uitvoeren.

Om uw kennis op het gebied van computerhardware te verbeteren, kunt u het materiaal erover lezen processoraansluitingen .

Dual-core processors kunnen het startpunt worden genoemd, omdat het geen zin heeft om terug te keren naar single-core oplossingen. Maar dual-coreprocessors zijn anders. Dit is misschien niet de “meest” recente Celeron, maar het kan een Core i3 op Ivy Bridge zijn, net als AMD’s Sempron of Phenom II. Uiteraard zullen hun prestaties vanwege andere indicatoren heel anders zijn, dus je moet alles uitgebreid bekijken en multi-core met anderen vergelijken processorkarakteristieken.

Core i3 op Ivy Bridge beschikt bijvoorbeeld over Hyper-Treading-technologie, waarmee je 4 threads tegelijkertijd kunt verwerken (het besturingssysteem ziet 4 logische kernen, in plaats van 2 fysieke). Maar dezelfde Celeron pocht hier niet op.

Maar laten we direct terugkeren naar de gedachten over de vereiste taken. Als een computer nodig is voor kantoorwerk en surfen op internet, dan is een dual-coreprocessor voldoende.

Als het op gamingprestaties aankomt, hebben de meeste games 4 cores of meer nodig om comfortabel te zijn. Maar hier komt hetzelfde addertje onder het gras: niet alle games hebben geoptimaliseerde code voor 4-coreprocessors, en als ze geoptimaliseerd zijn, zijn ze niet zo efficiënt als we zouden willen. Maar in principe is voor games nu de optimale oplossing een 4-coreprocessor.


Tegenwoordig zijn dezelfde 8-core AMD-processors redundant voor games, het is het aantal cores dat redundant is, maar de prestaties zijn niet op peil, maar ze hebben andere voordelen. Deze zelfde 8 kernen zullen enorm helpen bij taken waarbij krachtig werk met hoogwaardige multi-threaded werklast vereist is. Dit omvat bijvoorbeeld videoweergave (berekening) of servercomputers. Daarom vereisen dergelijke taken 6, 8 of meer kernen. En binnenkort zullen games efficiënt 8 of meer cores kunnen laden, dus in de toekomst is alles heel rooskleurig.

Vergeet niet dat er nog steeds veel taken zijn die een belasting met één thread creëren. En het is de moeite waard om jezelf de vraag te stellen: heb ik deze 8-nucleaire eenheid nodig of niet?

Samenvattend zou ik nogmaals willen opmerken dat de voordelen van multi-cores zich manifesteren tijdens ‘zwaar’ computationeel multi-threaded werk. En als je geen games speelt met torenhoge eisen en geen specifieke soorten werk doet waarvoor goede rekenkracht nodig is, dan heeft het simpelweg geen zin om geld uit te geven aan dure multi-core processors (

Tegenwoordig verras je niemand meer met multi-core processors. Integendeel, iedereen probeert zijn computer zoveel mogelijk cores te laten ondersteunen en daardoor sneller te laten werken, en dat klopt.
Als het om processors gaat, zijn er lange tijd slechts twee fabrikanten op de markt geweest: Intel en AMD. En als de laatste het hebben over hun 8- en 10-coreprocessors (wat betekent dat er veel zijn, wat betekent dat ze krachtiger zijn), dan hebben de eerstgenoemden 2 en 4 cores, maar concentreren ze zich op hun threads (het is niet nodig om boos te schrijven merkt op dat er ook meer cores zijn aangezien processors voor thuisgebruik hierna worden beschreven).

En als je naar de vergelijkende grafieken van de processorprestaties kijkt, zie je dat een 4-coreprocessor (niet alle) van Intel beter zal presteren dan een 8-coreprocessor van AMD. Waarom is dit zo? 4 is tenslotte minder dan 8, wat betekent dat het zwakker zou moeten zijn... Maar als je dieper graaft (niet rechtstreeks naar caches, frequentie, bus, enz.), kun je een interessant woord tegenkomen dat vaak wordt gebruikt om Intel te beschrijven verwerkers - Ondersteuning voor hyperthreading.

Hyperthreading-technologie (“hypertrending” in het gewone taalgebruik) is uitgevonden door Intel en wordt alleen in hun processors gebruikt (niet in alle). Ik zal niet te diep ingaan op de details, als je wilt, kun je er verder over lezen. Deze technologie maakt het mogelijk om elke kern in tweeën te splitsen en als resultaat hebben we in plaats van één fysieke kern twee logische (of virtuele) kernen, en het Windows-besturingssysteem denkt dat er twee zijn geïnstalleerd in plaats van één.

Hoe kom ik erachter hoeveel threads er in de processor zitten?

Als je meer wilt weten over een specifieke processor, dan geven ze in de beschrijving in de winkels meestal ondersteuning voor Hyper-threading aan, door deze zin in te voegen of gewoon door de afkorting HT. Als een dergelijke beschrijving niet bestaat, kunt u altijd de meest waarheidsgetrouwe informatie gebruiken op de officiële pagina van Intel http://ark.intel.com/ru/search/advanced/?s=t&HyperThreading=true
Ik raad aan alleen deze informatie te gebruiken, omdat deze de meest nauwkeurige is.

Als u wilt weten hoe u al in het systeem zit en precies wilt weten hoe deze zelfde threads in uw systeem worden gebruikt, dan is er niets eenvoudiger.

Start het op elke handige manier (de gemakkelijkste manier is de sneltoetscombinatie Ctrl + Shift + Esc) waar dan ook (zelfs tijdens het lezen van dit artikel) en, als je Windows 7 hebt, ga naar het tabblad Prestaties.


Let op de bovenste regel met processorbelasting en specifiek op het aantal “vierkantjes”. Dat is precies hoeveel er zullen zijn - dat is hoeveel kernen er zullen zijn, inclusief alle threads. Om precies te zijn: alle logische/virtuele kernen worden hier weergegeven, en dat is wat threads zijn.

Als u Windows 8, 8.1 of 10 heeft, is er geen dergelijk tabblad, maar wel Prestaties.


Hier heb ik aangegeven waar je op moet letten. Het was overigens niet voor niets dat ik met de rechtermuisknop op deze grafiek klikte, want als je Logische processen selecteert, zal de grafiek veranderen en vergelijkbaar zijn met die in Windows 7, d.w.z. Er zullen 8 “vierkanten” en belastinggrafieken zijn voor elke kern.
Als u het tegenovergestelde beeld heeft, d.w.z. Er worden niet één, maar meerdere grafieken weergegeven, wat betekent dat dit item is geselecteerd in de eigenschappen van de grafiek zelf.

Natuurlijk zijn er verschillende andere manieren om dit te doen, en in dit geval streams.

U kunt bijvoorbeeld de systeemeigenschap oproepen (sneltoets Win + R en systeeminfo invoeren) en daar kijken.

* Er zijn altijd prangende vragen over waar je op moet letten bij het kiezen van een processor, om geen fouten te maken.

Ons doel in dit artikel is om alle factoren te beschrijven die van invloed zijn op de processorprestaties en andere operationele kenmerken.

Het is waarschijnlijk geen geheim dat de processor de belangrijkste rekeneenheid van een computer is. Je zou zelfs kunnen zeggen: het belangrijkste onderdeel van de computer.

Hij is het die bijna alle processen en taken verwerkt die in de computer plaatsvinden.

Of het nu gaat om het bekijken van video's, muziek, surfen op internet, schrijven en lezen in het geheugen, het verwerken van 3D en video, games. En nog veel meer.

Daarom kiezen C centraal P processor, moet u er zeer voorzichtig mee omgaan. Het kan gebeuren dat je besluit een krachtige videokaart en een processor te installeren die niet bij het niveau past. In dit geval zal de processor het potentieel van de videokaart niet onthullen, wat de werking ervan zal vertragen. De processor zal volledig geladen zijn en letterlijk koken, en de videokaart zal op zijn beurt wachten en op 60-70% van zijn mogelijkheden werken.

Daarom moet u bij het kiezen van een gebalanceerde computer Niet kosten verwaarloos de processor ten gunste van een krachtige videokaart. De processorkracht moet voldoende zijn om het potentieel van de videokaart te ontketenen, anders is het gewoon weggegooid geld.

Intel versus AMD

*voor altijd inhalen

Bedrijf Intel, beschikt over enorme menselijke hulpbronnen en vrijwel onuitputtelijke financiën. Veel innovaties in de halfgeleiderindustrie en nieuwe technologieën komen van dit bedrijf. Processoren en ontwikkelingen Intel, gemiddeld door 1-1,5 jaren vooruit op de prestaties van de ingenieurs AMD. Maar zoals u weet, moet u betalen voor de mogelijkheid om over de modernste technologieën te beschikken.

Prijsbeleid voor processors Intel, is op beide gebaseerd aantal kernen, hoeveelheid cache, maar ook op "frisheid" van de architectuur, prestatie per klokwatt,chipprocestechnologie. De betekenis van cachegeheugen, de “subtiliteiten van het technische proces” en andere belangrijke kenmerken van de processor worden hieronder besproken. Voor het bezit van dergelijke technologieën en een gratis frequentievermenigvuldiger moet u ook een extra bedrag betalen.

Bedrijf AMD, in tegenstelling tot het bedrijf Intel, streeft naar de beschikbaarheid van haar verwerkers voor de eindconsument en naar een competent prijsbeleid.

Dat zou je zelfs kunnen zeggen AMD– « Volksstempel" In de prijskaartjes vindt u wat u nodig heeft tegen een zeer aantrekkelijke prijs. Meestal een jaar nadat het bedrijf een nieuwe technologie heeft Intel, een analoog van technologie blijkt uit AMD. Als u niet de hoogste prestaties nastreeft en meer aandacht besteedt aan het prijskaartje dan aan de beschikbaarheid van geavanceerde technologieën, dan zijn de producten van het bedrijf AMD– alleen voor jou.

Prijsbeleid AMD, is meer gebaseerd op het aantal cores en heel weinig op de hoeveelheid cachegeheugen en de aanwezigheid van architectonische verbeteringen. In sommige gevallen moet je voor de mogelijkheid om cachegeheugen op het derde niveau te hebben een beetje extra betalen ( Fenomeen heeft een cachegeheugen met 3 niveaus, Athlon inhoud met slechts beperkt, niveau 2). Maar soms AMD verwent zijn fans mogelijkheid om te ontgrendelen goedkopere processors tot duurdere. U kunt de kernen of het cachegeheugen ontgrendelen. Verbeteren Athlon naar Fenomeen. Dit is mogelijk dankzij de modulaire architectuur en het ontbreken van enkele goedkopere modellen, AMD schakelt eenvoudigweg enkele blokken op de chip van duurdere (software) uit.

Kernen– blijven vrijwel ongewijzigd, alleen hun aantal verschilt (geldt voor processors 2006-2011 jaar). Vanwege de modulariteit van zijn processors doet het bedrijf uitstekend werk door afgekeurde chips te verkopen, die, wanneer sommige blokken worden uitgeschakeld, een processor worden uit een minder productieve lijn.

Onder de codenaam werkt het bedrijf al jaren aan een compleet nieuwe architectuur Bulldozer, maar op het moment van uitgave in 2011 Vorig jaar lieten de nieuwe processors niet de beste prestaties zien. AMD Ik gaf de besturingssystemen de schuld omdat ze de architectonische kenmerken van dual cores en ‘andere multithreading’ niet begrepen.

Volgens bedrijfsvertegenwoordigers moet je wachten op speciale fixes en patches om de volledige prestaties van deze processors te ervaren. Echter, in het begin 2012 Vorig jaar hebben bedrijfsvertegenwoordigers de release van een update ter ondersteuning van de architectuur uitgesteld Bulldozer voor de tweede helft van het jaar.

Processorfrequentie, aantal kernen, multi-threading.

Tijdens tijden Pentium4 en vóór hem - CPU-frequentie, was de belangrijkste prestatiefactor voor de processor bij het selecteren van een processor.

Dit is niet verrassend, want processorarchitecturen zijn speciaal ontwikkeld om hoge frequenties te behalen, en dit kwam vooral tot uiting in de processor Pentium4 op architectuur NetBurst. Hoge frequentie was niet effectief met de lange pijplijn die in de architectuur werd gebruikt. Zelfs Athlon XP frequentie 2GHz, in termen van productiviteit was hoger dan Pentium4 C 2,4 GHz. Het was dus pure marketing. Na deze fout heeft het bedrijf Intel besefte mijn fouten en keerde terug naar de kant van het goede Ik begon niet aan de frequentiecomponent te werken, maar aan de prestaties per klok. Van architectuur NetBurst Ik moest weigeren.

Wat hetzelfde voor ons geeft multicore?

Quad-coreprocessor met frequentie 2,4 GHz, in multi-threaded toepassingen, zal theoretisch bij benadering het equivalent zijn van een single-coreprocessor met een frequentie 9,6 GHz of 2-coreprocessor met frequentie 4,8 GHz. Maar dat is alleen theoretisch. Praktisch Twee dual-coreprocessors in een moederbord met twee sockets zullen echter sneller zijn dan één 4-coreprocessor bij dezelfde werkfrequentie. Beperkingen op de bussnelheid en geheugenlatentie eisen hun tol.

* onderworpen aan dezelfde architectuur en hoeveelheid cachegeheugen

Multi-core maakt het mogelijk om instructies en berekeningen in delen uit te voeren. U moet bijvoorbeeld drie rekenkundige bewerkingen uitvoeren. De eerste twee worden uitgevoerd op elk van de processorkernen en de resultaten worden toegevoegd aan het cachegeheugen, waar de volgende actie ermee kan worden uitgevoerd door een van de vrije kernen. Het systeem is zeer flexibel, maar zonder de juiste optimalisatie werkt het mogelijk niet. Daarom is optimalisatie voor multi-cores erg belangrijk voor de processorarchitectuur in een besturingssysteemomgeving.

Applicaties die "liefde" en gebruik multithreading: archiveringsmedewerkers, videospelers en encoders, antivirusprogramma's, defragmentatieprogramma's, grafische editors, browsers, Flash.

Tot de "liefhebbers" van multithreading behoren ook besturingssystemen als Windows 7 En Windows Vista, evenals velen Besturingssysteem kernel gebaseerd Linux, die merkbaar sneller werken met een multi-coreprocessor.

Meest spellen Soms is een 2-coreprocessor op een hoge frequentie voldoende. Nu komen er echter steeds meer games uit die zijn ontworpen voor multi-threading. Neem tenminste deze Zandbak spellen zoals GTA4 of Prototype, waarin op een 2-coreprocessor met een lagere frequentie 2,6 GHz– je voelt je niet op je gemak, de framesnelheid zakt onder de 30 frames per seconde. Hoewel in dit geval de reden voor dergelijke incidenten hoogstwaarschijnlijk de “zwakke” optimalisatie van games, gebrek aan tijd of “indirecte” handen is van degenen die games van consoles naar PC.

Wanneer je een nieuwe processor voor gaming koopt, moet je nu letten op processors met 4 of meer cores. Maar toch mag je 2-coreprocessors uit de “bovenste categorie” niet verwaarlozen. In sommige games voelen deze processors soms beter aan dan sommige multi-core processors.

Cachegeheugen van processor.

is een speciaal gebied van de processorchip waarin tussenliggende gegevens tussen processorkernen, RAM en andere bussen worden verwerkt en opgeslagen.

Het draait op een zeer hoge kloksnelheid (meestal op de frequentie van de processor zelf), heeft een zeer hoge bandbreedte en de processorkernen werken er rechtstreeks mee ( L1).

Vanwege haar tekort, kan de processor inactief zijn bij tijdrovende taken, wachtend tot nieuwe gegevens in de cache arriveren voor verwerking. Ook cachegeheugen dient voor registraties van vaak herhaalde gegevens, die indien nodig snel kunnen worden hersteld zonder onnodige berekeningen, zonder dat de processor daar opnieuw tijd aan hoeft te verspillen.

De prestaties worden ook verbeterd doordat het cachegeheugen uniform is en alle kernen er in gelijke mate gegevens uit kunnen gebruiken. Dit biedt extra mogelijkheden voor multi-threaded optimalisatie.

Deze techniek wordt nu gebruikt voor Niveau 3-cache. Voor verwerkers Intel er waren processors met uniform cachegeheugen van niveau 2 ( C2D E 7***,E 8***), waardoor deze methode de multi-threaded prestaties leek te verbeteren.

Bij het overklokken van een processor kan het cachegeheugen een zwak punt worden, waardoor de processor niet zonder fouten overklokt kan worden boven de maximale werkfrequentie. Het voordeel is echter dat deze op dezelfde frequentie werkt als de overgeklokte processor.

Over het algemeen geldt: hoe groter het cachegeheugen, hoe groter de sneller CPU. In welke toepassingen precies?

Alle toepassingen die veel drijvende-kommagegevens, instructies en threads gebruiken, maken intensief gebruik van het cachegeheugen. Cachegeheugen is erg populair archiveringsdiensten, video-encoders, antivirusprogramma's En grafische editors enz.

Een grote hoeveelheid cachegeheugen is gunstig spellen. Vooral strategieën, autosimulators, RPG's, SandBox en alle games met veel kleine details, deeltjes, geometrische elementen, informatiestromen en fysieke effecten.

Cachegeheugen speelt een zeer belangrijke rol bij het ontsluiten van de mogelijkheden van systemen met twee of meer videokaarten. Een deel van de belasting ligt immers op de interactie van de processorkernen, zowel onderling als voor het werken met streams van verschillende videochips. In dit geval is de organisatie van het cachegeheugen belangrijk, en een groot cachegeheugen van niveau 3 is erg handig.

Cachegeheugen is altijd voorzien van bescherming tegen mogelijke fouten ( ECC), indien gedetecteerd, worden ze gecorrigeerd. Dit is erg belangrijk, omdat een kleine fout in de geheugencache, wanneer deze wordt verwerkt, kan uitmonden in een gigantische, voortdurende fout die het hele systeem zal laten crashen.

Eigen technologieën.

(hyperthreading, HT)–

de technologie werd voor het eerst gebruikt in processors Pentium4, maar het werkte niet altijd correct en vertraagde de processor vaak meer dan dat het versnelde. De reden was dat de pijplijn te lang was en dat het vertakkingsvoorspellingssysteem nog niet volledig was ontwikkeld. Gebruikt door het bedrijf Intel, er zijn nog geen analogen van de technologie, tenzij je het als een analoog beschouwt? wat de ingenieurs van het bedrijf hebben geïmplementeerd AMD in de architectuur Bulldozer.

Het principe van het systeem is dat er voor elke fysieke kern één is twee computerthreads, in plaats van één. Dat wil zeggen, als je een 4-coreprocessor hebt HT (Kern ik 7), dan heb je virtuele threads 8 .

De prestatiewinst wordt bereikt doordat gegevens al halverwege de pijplijn kunnen binnenkomen, en niet noodzakelijkerwijs aan het begin. Als sommige processorblokken die deze actie kunnen uitvoeren inactief zijn, ontvangen ze de taak ter uitvoering. De prestatiewinst is niet hetzelfde als die van echte fysieke cores, maar vergelijkbaar (~50-75%, afhankelijk van het type toepassing). Het komt vrij zelden voor dat bij sommige toepassingen HT heeft een negatieve invloed voor prestaties. Dit komt door de slechte optimalisatie van toepassingen voor deze technologie, het onvermogen om te begrijpen dat er “virtuele” threads zijn en het gebrek aan begrenzers voor de gelijkmatige belasting van threads.

TurboBoost – een zeer nuttige technologie die de werkfrequentie van de meest gebruikte processorkernen verhoogt, afhankelijk van hun belastingsniveau. Het is erg handig als de applicatie niet alle vier de kernen weet te gebruiken en er slechts één of twee laadt, terwijl hun werkfrequentie toeneemt, wat de prestaties gedeeltelijk compenseert. Het bedrijf heeft een analoog van deze technologie AMD, is technologie Turbokern.

, 3 weet niet! instructies. Ontworpen om de processor te versnellen multimediaal computergebruik (video, muziek, 2D/3D graphics, enz.), en versnelt ook het werk van programma's zoals archiveringsprogramma's, programma's voor het werken met afbeeldingen en video (met de ondersteuning van instructies van deze programma's).

3weet niet! – vrij oude technologie AMD, dat naast aanvullende instructies voor het verwerken van multimedia-inhoud bevat SSE eerste versie.

*Specifiek de mogelijkheid om reële getallen met enkele precisie te streamen.

Het hebben van de nieuwste versie is een groot pluspunt; de processor begint bepaalde taken efficiënter uit te voeren met de juiste software-optimalisatie. Verwerkers AMD hebben vergelijkbare namen, maar enigszins verschillend.

* Voorbeeld - SSE 4.1 (Intel) - SSE 4A (AMD).

Bovendien zijn deze instructiesets niet identiek. Dit zijn analogen met kleine verschillen.

Koel en stil, SnelheidStep CoolCore Betoverd Half Staat(C1E) EnT. D.

Deze technologieën verminderen bij lage belasting de processorfrequentie door de vermenigvuldiger en de kernspanning te verlagen, een deel van de cache uit te schakelen, enz. Hierdoor wordt de processor veel minder warm, verbruikt hij minder energie en maakt hij minder geluid. Als er stroom nodig is, keert de processor binnen een fractie van een seconde terug naar de normale status. Over standaardinstellingen Bios Ze zijn bijna altijd ingeschakeld; indien gewenst kunnen ze worden uitgeschakeld om mogelijke “bevriezingen” te verminderen bij het overschakelen naar 3D-games.

Sommige van deze technologieën regelen de rotatiesnelheid van ventilatoren in het systeem. Als de processor bijvoorbeeld geen verhoogde warmteafvoer nodig heeft en niet is belast, wordt de ventilatorsnelheid van de processor verlaagd ( AMD Cool'n'Quiet, Intel SpeedStep).

Intel-virtualisatietechnologie En AMD-virtualisatie.

Deze hardwaretechnologieën maken het mogelijk om met behulp van speciale programma's meerdere besturingssystemen tegelijk te gebruiken, zonder noemenswaardig prestatieverlies. Het wordt ook gebruikt voor de goede werking van servers, omdat er vaak meer dan één besturingssysteem op is geïnstalleerd.

Uitvoeren Uitzetten Beetje EnNee uitvoeren Beetje technologie die is ontworpen om een ​​computer te beschermen tegen virusaanvallen en softwarefouten waardoor het systeem kan crashen bufferoverloop.

Intel 64 , AMD 64 , EM 64 T – deze technologie zorgt ervoor dat de processor zowel in een besturingssysteem met een 32-bits architectuur als in een besturingssysteem met een 64-bits architectuur kan werken. Systeem 64 bits– vanuit het oogpunt van voordelen verschilt het voor de gemiddelde gebruiker doordat dit systeem meer dan 3,25 GB RAM kan gebruiken. Op 32-bits systemen gebruikt u b O Een grotere hoeveelheid RAM is niet mogelijk vanwege de beperkte hoeveelheid adresseerbaar geheugen*.

De meeste applicaties met een 32-bits architectuur kunnen worden uitgevoerd op een systeem met een 64-bits besturingssysteem.

* Wat kun je doen als in 1985 niemand zelfs maar kon denken aan zulke gigantische, naar de maatstaven van die tijd, volumes RAM.

Aanvullend.

Een paar woorden over.

Dit punt is de moeite waard om goed op te letten. Hoe dunner het technische proces, hoe minder energie de processor verbruikt en daardoor minder warm wordt. En het heeft onder andere een hogere veiligheidsmarge voor overklokken.

Hoe verfijnder het technische proces, hoe meer je in een chip kunt 'verpakken' (en niet alleen) en de mogelijkheden van de processor kunt vergroten. Warmtedissipatie en energieverbruik worden ook proportioneel verminderd, dankzij lagere stroomverliezen en een verkleining van het kernoppervlak. Je kunt een tendens waarnemen dat bij elke nieuwe generatie van dezelfde architectuur op een nieuw technologisch proces het energieverbruik ook toeneemt, maar dit is niet het geval. Het is alleen zo dat fabrikanten op weg zijn naar nog hogere prestaties en verder gaan dan de warmtedissipatielijn van de vorige generatie processors vanwege een toename van het aantal transistors, wat niet evenredig is aan de vermindering van het technische proces.

Ingebouwd in de processor.

Als je geen ingebouwde videokern nodig hebt, moet je er geen processor bij kopen. Je krijgt alleen maar slechtere warmteafvoer, extra verwarming (niet altijd), slechter overklokpotentieel (niet altijd) en te veel betaald geld.

Bovendien zijn de kernen die in de processor zijn ingebouwd alleen geschikt voor het laden van het besturingssysteem, surfen op internet en het bekijken van video's (en niet van enige kwaliteit).

Markttrends zijn nog steeds aan het veranderen en de mogelijkheid om een ​​krachtige processor te kopen is nog steeds aanwezig Intel Zonder videokern valt het steeds minder uit. Het beleid van gedwongen oplegging van de ingebouwde videokern verscheen bij processors Intel onder de codenaam Zandige brug, waarvan de belangrijkste innovatie de ingebouwde kern van hetzelfde technische proces was. De videokern bevindt zich samen met processor op één chip, en niet zo eenvoudig als bij eerdere generaties processors Intel. Voor degenen die er geen gebruik van maken, zijn er nadelen in de vorm van enige overbetaling voor de processor, de verplaatsing van de verwarmingsbron ten opzichte van het midden van het warmteverdelingsdeksel. Er zijn echter ook voordelen. Uitgeschakelde videokern, kan worden gebruikt voor zeer snelle videocoderingstechnologie Snelle synchronisatie gekoppeld aan speciale software die deze technologie ondersteunt. In de toekomst, Intel belooft de horizon van het gebruik van de ingebouwde videokern voor parallel computergebruik te verbreden.

Sockets voor processors. Levensduur van het platform.


Intel heeft een streng beleid voor zijn platforms. De levensduur van elk (de begin- en einddatum van de processorverkoop ervoor) bedraagt ​​gewoonlijk niet meer dan 1,5 - 2 jaar. Daarnaast beschikt het bedrijf over verschillende parallelle ontwikkelplatforms.

Bedrijf AMD, voert het tegenovergestelde beleid van compatibiliteit. Op haar platform op AM 3, alle processors van de toekomstige generatie die ondersteuning bieden DDR3. Zelfs als het platform reikt BEN 3+ en later nieuwe processors voor AM 3, anders zullen nieuwe processors compatibel zijn met oude moederborden, en zal het mogelijk zijn om een ​​pijnloze upgrade voor uw portemonnee uit te voeren door alleen de processor te veranderen (zonder het moederbord, RAM, enz. te veranderen) en het moederbord te flashen. De enige nuances van incompatibiliteit kunnen optreden bij het veranderen van het type, omdat een andere geheugencontroller ingebouwd in de processor nodig zal zijn. De compatibiliteit is dus beperkt en wordt niet door alle moederborden ondersteund. Maar over het algemeen is de keuze voor een processorfabrikant duidelijk voor een prijsbewuste gebruiker of voor degenen die niet gewend zijn om het platform elke twee jaar volledig te veranderen: AMD.

CPU-koeling.

Standaard geleverd met processor DOOS-een nieuwe koeler die zijn taak eenvoudig aankan. Het is een stuk aluminium met een niet erg hoog verspreidingsgebied. Efficiënte koelers met daaraan bevestigde heatpipes en platen zijn ontworpen voor een zeer efficiënte warmteafvoer. Als je geen extra geluid van de ventilator wilt horen, koop dan een alternatieve, efficiëntere koeler met heatpipes, of een gesloten of open vloeistofkoelsysteem. Dergelijke koelsystemen bieden bovendien de mogelijkheid om de processor te overklokken.

Conclusie.

Er is rekening gehouden met alle belangrijke aspecten die van invloed zijn op de prestaties en prestaties van de processor. Laten we herhalen waar u op moet letten:

  • Fabrikant selecteren
  • Processorarchitectuur
  • Technisch proces
  • CPU-frequentie
  • Aantal processorkernen
  • Grootte en type processorcache
  • Technologie en instructieondersteuning
  • Hoogwaardige koeling

We hopen dat dit materiaal u zal helpen een processor te begrijpen en te beslissen over de keuze voor een processor die aan uw verwachtingen voldoet.

Nu we de theorie van multithreading hebben begrepen, laten we eens kijken naar een praktisch voorbeeld: de Pentium 4. Al in de ontwikkelingsfase van deze processor bleven Intel-ingenieurs werken aan het verbeteren van de prestaties zonder wijzigingen aan te brengen in de software-interface. Er werden vijf eenvoudigste methoden overwogen:

Verhoogde klokfrequentie;

Twee processors op één chip plaatsen;

Introductie van nieuwe functionele blokken;

Transportbandverlenging;

Multithreading gebruiken.

De meest voor de hand liggende manier om de prestaties te verbeteren is door de kloksnelheid te verhogen zonder andere parameters te wijzigen. In de regel heeft elk volgend processormodel een iets hogere kloksnelheid dan het vorige. Helaas worden ontwikkelaars bij het lineair verhogen van de kloksnelheid geconfronteerd met twee problemen: een hoger energieverbruik (wat belangrijk is voor laptops en andere computerapparaten die op batterijen werken) en oververhitting (wat de creatie van efficiëntere koellichamen vereist).

De tweede methode, het plaatsen van twee processors op een chip, is relatief eenvoudig, maar houdt wel een verdubbeling van de oppervlakte van de chip in. Als elke processor zijn eigen cache heeft, wordt het aantal chips op een wafer gehalveerd, maar dat betekent ook dat de productiekosten worden verdubbeld. Als beide processors een cachegeheugen delen, kan een aanzienlijke toename van het bezette gebied worden vermeden, maar in dit geval doet zich een ander probleem voor: de hoeveelheid cachegeheugen per processor wordt gehalveerd, en dit heeft onvermijdelijk invloed op de prestaties. Als professionele servertoepassingen bovendien in staat zijn om de bronnen van verschillende processors volledig te benutten, wordt in gewone desktopprogramma's in veel mindere mate intern parallellisme ontwikkeld.

Ook het introduceren van nieuwe functionele blokken is niet moeilijk, maar het is wel belangrijk om hier de balans in te bewaren. Wat heeft het voor zin om een ​​tiental ALU-blokken te hebben als de chip geen commando's aan de pijplijn kan geven met een snelheid waarmee je al deze blokken kunt laden?

Een pijplijn met een groter aantal fasen, die taken in kleinere segmenten kan verdelen en deze in korte tijd kan verwerken, verbetert enerzijds de prestaties, anderzijds vergroot het de negatieve gevolgen van onjuiste vertakkingsvoorspellingen, cache-missers, interrupts en andere gebeurtenissen die de normale stroomverwerkingsopdrachten in de processor verstoren. Om de mogelijkheden van de uitgebreide pijplijn volledig te realiseren, is het bovendien noodzakelijk om de klokfrequentie te verhogen, en dit leidt, zoals we weten, tot een verhoogd energieverbruik en warmteafvoer.

Ten slotte kunt u multithreading implementeren. Het voordeel van deze technologie is de introductie van een extra softwarethread waarmee hardwarebronnen die anders inactief zouden zijn, in gebruik kunnen worden genomen. Op basis van de resultaten van experimentele onderzoeken hebben Intel-ontwikkelaars ontdekt dat het vergroten van het chipoppervlak met 5% bij het implementeren van multithreading voor veel toepassingen een prestatieverbetering van 25% oplevert. De eerste Intel-processor die multithreading ondersteunde, was de Xeon uit 2002. Vervolgens werd vanaf 3,06 GHz multithreading geïntroduceerd in de Pentium 4-lijn. Intel noemt de implementatie van multithreading in de Pentium 4 hyperthreading.