Resursa informatică U SM. Două plăci video de gamă medie în loc de una de top

Dezbaterea „Pro și contra” așa-numitelor teste sintetice este la fel de veche ca lumea. Sau cel puțin ca testele sintetice în sine. Ideea principală pe care se bazează este evaluarea performanței generale sistem informatic, iar în teorie este o idee foarte grozavă.

Într-o lume ideală, rezultatul unui astfel de test îți poate oferi o idee clară și, mai important, realistă la ceea ce te-ai putea aștepta de la un computer, fie el desktop sau mobil, într-o varietate de scenarii practice - de la serviciu și navigarea pe internet la divertisment multimedia și jocuri. .

Din păcate, lucrurile perfecte nu există și tocmai din acest motiv testele sintetice, ca orice altceva, nu sunt perfecte. În special, cele mai populare și utilizate programe de referință din această clasă - 3DMark și PCMark de la Futuremark - au fost deja în epicentrul unei serii de scandaluri. Desigur, aceasta nu este vina dezvoltatorilor înșiși de la Futuremark - motivele, în primul rând, constă în abordările diferite ale producătorilor de a-și „optimiza” echipamentele, cu care exploatează în mod inteligent unele neajunsuri în procedurile de testare și implementează umflate artificial. rezultate, care, totuși, nu sunt apoi confirmate în practică.

Și deși creează pentru ei reputație rea, testele sintetice sunt încă populare. Cu toate acestea, ele sunt foarte rar folosite ca singurul indicator al performanței computerului. În schimb, acestea sunt adesea însoțite de o alternativă mai realistă pentru măsurarea vitezei, care este de obicei cele mai actuale jocuri cu un contor încorporat pentru unul dintre cei mai importanți indicatori pentru fiecare jucător - numărul de cadre pe secundă.

Cu toate acestea, în unele cazuri acest tip de test nu este aplicabil din punct de vedere pur pragmatic - de exemplu, când despre care vorbim despre sistemele de clasă business pentru care performanța în jocuri nu este de o importanță esențială. Motivul este că jocurile dau o impresie falsă atunci când vine vorba de o mașină destul de puternică, cum ar fi, de exemplu, Lenovo ThinkPad X1 Carbon sau HP EliteBook 1040. Astfel de dispozitive sunt destinate unui cerc complet diferit de utilizatori - oameni cărora nu le pasă dacă Battlefield 4 poate rula cu peste 60 de cadre pe secundă pe laptopul lor. În schimb, le pasă de lucruri precum rezistența structurală, securitatea fiabilă a informațiilor și durata maximă de viață a bateriei.

În astfel de cazuri, „sinteticele” vin în ajutor - cum ar fi PCMark, care măsoară performanța generalăîntreaga configurație. Totuși, acest lucru duce la unele avertismente cu privire la interpretarea corectă a rezultatelor, care diverse sisteme prezentate în test.

Studiu de caz: comparație directă laptop de gaming Lenovo Y50 și ultrabook-ul de afaceri HP EliteBook 1040 ar putea ridica sprâncene. Motivul este că rezultatele acestor două sisteme sunt similare, dar unul dintre ele se bazează pe destul de puternic placa video discreta(NVIDIA GeForce 860M), iar celălalt pe cel integrat solutie grafica(Intel HD Graphics 4400). Totuși, dacă comparăm performanțele lor de joc, devine rapid clar că, spre deosebire de Lenovo Y50, EliteBook 1040 nu poate oferi o experiență optimă de joc... Și nu ar trebui, deoarece în acest caz, vorbim despre o mașină mobilă cu un cu totul alt scop.

Dar, deoarece PCMark ia în considerare performanța generală, ambele mașini obțin rezultate similare. În esență, testul constă dintr-o serie de sarcini diferite al căror scop combinat este de a evalua cu acuratețe (pe cât posibil) capacitatea unui anumit computer de a gestiona scenarii comune, de sarcină de lucru de zi cu zi. De exemplu, PCMark are sarcini concepute pentru a măsura performanța unui computer în scenarii precum navigarea pe Internet, editor de text, editare digitală de imagini, chat video și jocuri casual.

Fiecare dintre aceste teste încarcă componentele sistemului în felul său, în timp ce performanța totală a sistemului testat este calculată folosind o formulă specială și este generat rezultatul final.

Cu toate acestea, dacă doriți să obțineți o imagine mai clară a capacităților computerului dvs., există două lucruri pe care trebuie să le faceți: În primul rând, uitați-vă la defalcarea detaliată a rezultatelor pe secțiuni. În al doilea rând, vizitați site-ul web Futuremark; acolo vei găsi sute de mii de configurații diferite și poți compara performanța sistemului tău cu o mașină cu parametri similari, mai mici sau mai mari.

Și permiteți-mi să repet în concluzie: rezultatele testelor sintetice, fie că este vorba de 3DMark sau PCMark, nu trebuie luate la propriu. Sunt doar un ghid bun, unul dintre multele instrumente pentru a evalua performanța unui computer, așa că nu ar trebui să puneți prea mult accent pe ele. Dacă aveți nevoie de informații detaliate și cuprinzătoare care să vă ajute să alegeți o anumită configurație, aveți răbdare și citiți întreaga recenzie a acesteia (sau mai bine, mai multe recenzii din surse diferite), în loc să derulați până la sfârșitul textului doar pentru a vedea rezultatele teste.

O zi bună!

Datorită începerii vânzărilor de procesoare AMD Ryzen 5 înainte de termen (11 aprilie), primele recenzii ale acestor procesoare apar acum. Am vorbit deja pe scurt despre performanța procesorului Ryzen 5 1400 cu 4 nuclee în testele sintetice și jocurile moderne. Acum, colegii noștri spanioli de la El Chapuzas Informatico au publicat o recenzie a 6-core procesor AMD Ryzen 5 1600.

Acest procesor are șase nuclee fizice, fiecare dintre ele având două fire de calcul, rezultând un total de douăsprezece fire. Frecvența de bază Viteza procesorului este de 3,2 GHz și poate crește dinamic la 3,6 GHz. Cache-ul total al treilea nivel al AMD Ryzen 5 1600 este de 16 MB (8+8 MB), iar fiecare nucleu are 512 kB de cache de al doilea nivel și 64 și, respectiv, 32 kB de cache de instrucțiuni și date de la primul nivel. Ca și alte procesoare Ryzen, acest cip este găzduit într-un pachet Socket AM4 și are un TDP de 64 W. Prețul recomandat al noului produs pentru piața din SUA este de 219 USD.

Configurația bancului de testare folosit de colegii noștri este reprezentată de următoarele componente:

  • Placa de baza: MSI X370 XPower Gaming Titanium;
  • RAM: G.Skill TridentZ DDR4 3600 MHz, care funcționează la 2400 MHz;
  • Placa video: MSI GeForce GTX 1070 Gaming Z;
  • Sursa de alimentare: Fii linistit! Dark Power Pro11 1200 V;
  • Unități cu stare solidă: Kingston SSDNow KC400 128 GB și Corsair LX 512 GB;
  • Sistem de racire: Wraith Spire;
  • Sistem de operare: Windows 10 64 biți.

Performanța unui singur nucleu al procesorului Ryzen 5 1600 nu este mult diferită de performanța unui singur nucleu al Ryzen 7 1700X, deoarece sunt construite pe aceleași cristale de siliciu, doar procesorul cu șase nuclee are două nuclee dezactivate. .

În testele multi-threaded CPU-Z și wPrime 2.1 (32M), noul produs a arătat rezultate destul de așteptate, demonstrând un nivel foarte bun de performanță.

În Cinebench 15, noul produs a depășit nu numai mai scumpul quad-core overclockat la 4,9 GHz și completat cu memorie mai rapidă (3600 MHz) Intel core i7-7700K, dar și Intel Core i7-5930K cu șase nuclee. Dar în codificarea video, aceasta din urmă s-a dovedit a fi mai rapidă.

Procesorul Ryzen 5 1600 nu funcționează deloc cu memorie în cel mai bun mod posibil, deși puțin mai bine în comparație cu Ryzen 7 1700X.

În unele teste sintetice, noul produs AMD arată scoruri de top, comparativ cu Ryzen 7 1700X, iar în unele cazuri este ușor inferior acestuia. În majoritatea testelor sintetice procesor Intel Core i7-6700K se dovedește a fi mai rapid decât ambii reprezentanți AMD.

În ceea ce privește performanța de joc, este destul de impresionantă. În majoritatea testelor în Rezoluție completă HD (1920 x 1080 pixeli), noul produs nu este cu mult în spatele mai scumpului Intel Core i7-6700K, iar în unele cazuri îl devansează. Este interesant de observat că în Doom (folosind OpenGL) și Rise of Tomb Raider (folosind DirectX 11), procesorul Ryzen 5 1600 este semnificativ înaintea Ryzen 7 1700X.

La rezoluția 4K UHD (3840 x 2160 pixeli) situația este aproximativ aceeași, iar în cazul majorității jocurilor totul se reduce la performanța plăcii video.

Co sistem standard răcire, frecvența procesorului a fost ridicată la 3,9 GHz, în timp ce tensiunea de bază a fost de 1,36 V. Va fi interesant de văzut cu cât de mult poate fi overclockat noul produs răcit cu lichid, și ce frecvențe va cuceri sub overclocking extrem.

Temperatura procesorului AMD Ryzen 5 1600 la inactiv este de 39 de grade Celsius, iar sub sarcină este de 62 – 65 de grade Celsius. Consumul sistemului bazat pe noul produs în jocuri a fost de 245 W, ceea ce este aproximativ egal cu consumul sistemului pe Bazat pe Intel Core i7-6700K, care este egal cu 250 W.

Teste sintetice

În recenzia originală, toate testele sunt pe pagini diferite, dar le voi combina pentru comoditate, dar le voi împărți în cele sintetice și de gaming.

Wprime 2.0

Un utilitar binecunoscut pentru testarea procesoarelor multi-core determină puterea acestora prin efectuarea anumitor calcule. Cu cât se petrece mai puțin timp pentru efectuarea testului, cu atât rezultatul este mai bun.

Cel mai rapid (ceea ce nu este surprinzător având în vedere frecvența de ceas) s-a dovedit a fi procesorul principal al testului de astăzi. A fost o surpriză neplăcută faptul că Core i5 2300 era cu aproape o secundă în spatele lui i5 760 (la aceeași frecvență). Probabil că dimensiunea mai mică a cache-ului de al treilea nivel a avut un efect.

Fritz Chess Benchmar

Și acesta este un test care determină performanța procesorului prin procesarea diverșilor algoritmi de șah. În acest benchmark, cu cât sunt mai multe puncte, cu atât rezultatul este mai bun.

„Vechiul” Core i5 760 a fost depășit de toți reprezentanții familiei Sandy Bridge.

WinRAR 3.92

Acest arhivator nu are nevoie de prezentare. Performanța va fi determinată de numărul de KB/s la comprimarea anumitor fișiere. Cu cât mai mare cu atât mai bine.


Imaginea este aceeași ca la primul test, 2500K este în frunte, urmat de un decalaj mare este al 760-lea, cu doi pași în spatele căruia este i5 2300.

7-Zip 9.13

Un alt arhivator cunoscut, pe care personal l-am recomandat multora (functioneaza mult mai bine decat RAR si ZIP, merge bine cu procesoare multi-coreși sistemul de operare x64, plus complet gratuit) în timp util. Performanța este calculată în același mod ca în testul precedent.


Testul a fost efectuat în moduri de compresie (primul grafic) și decompresie (al doilea) ale fișierelor. Se vede clar cine conduce și cu cât.

Adobe Photoshop CS5

Pachet de procesare faimos fisiere grafice. Nu am înțeles cum exact au fost testate procesoarele (dacă aveți idei, spuneți-mi), dar, totuși, să ne uităm la rezultate:


Aparent, rezultatul este în câteva secunde. Mai puțin este mai bine. „Sandy Bridges” sunt în frunte

POV-Ray 3.7

POV-Ray program popular Cu sursa deschisa pentru testarea procesoarelor în operațiuni cu virgulă mobilă. Numărul de puncte din test este numărul de pixeli randați pe secundă, cu cât sunt mai mulți, cu atât mai bine.


Se repetă situația din testul precedent. Observați ce avantaj are i5 2300 față de i5 760 (să vă reamintesc că viteza de ceas a ambelor procesoare este aceeași)! Cu siguranță noua arhitectură arată caracter. Sau modul Turbo ajută?

CineBench R11.5

„Cinebench” nu are nevoie de prezentare, un test excelent al performanței procesorului (atât în ​​modul single-thread, cât și în modul multi-thread) în condiții de randare 3D.


Imaginea este exact aceeași ca în mai multe teste anterioare. „Poduri” sunt înainte, 760 este în urmă. Iar avantajul noilor produse este foarte solid.

Codificator H.264 V2

Codificarea video este o sarcină pentru care sunt adesea folosite procesoare puternice. Cu cât este nevoie de mai puțin timp pentru a codifica materialul video în h264, cu atât mai bine.


Sărac 760! Sandy Bridge" și nu-i da șansa de câștig. Îmi doresc deja un astfel de procesor (doar un hexacor, cel puțin), mai bine overclockat imediat la 4,5-5 GHz. În rest, pe Atom și Q9550, codificarea video nu este la fel de bine veselă ca înainte

A trecut destul de mult timp de la lansarea blocului de operație sisteme Microsoft Windows Vistași API-ul DirectX 10 actualizat inclus în acesta. Apare treptat aplicații de jocuri cu sprijinul versiune noua Cu toate acestea, Direct3D 10 este încă doar o aplicație D3D 9 ușor modificată; nu utilizează în mod activ noile caracteristici ale D3D 10. Iar acele jocuri care au fost deja lansate surprind cu rezultate polare pe plăcile video ale celor doi producători principali de cipuri; bineînțeles, le puteți folosi în această formă pentru comparație, dar foarte atent...

De asemenea, nu există o abundență de pachete de teste sintetice și de jocuri cu suport pentru Direct3D 10, iar Futuremark nu a lansat încă un alt 3DMark. Dar site-ul are propriul pachet de teste sintetice și ne-am planificat de mult să actualizăm RightMark3D pentru a putea evalua performanța de vârf a acceleratoarelor D3D10 în sarcini diferite. Versiunea finală a RightMark3D 2.0, concepută pentru acceleratoarele compatibile Direct3D 10 sistem de operare MS Windows Vista a apărut recent și imediat începem să-l folosim în materialele noastre.

Unele teste cunoscute anterior ca parte a pachetului actualizat au fost rescrise pentru DX10, au fost adăugate noi tipuri de teste sintetice: teste modificate pixel shader rescrise pentru SM 4.0, teste geometry shader, teste de eșantionare a texturii din vertex shader. Acest articol va fi primul pe RightMark3D 2.0, include un set mare de plăci video testate, apoi vom începe să folosim noul test în materialele noastre de bază.

Trebuie remarcat faptul că toate testele noastre sunt pur sintetice; de ​​obicei folosesc doar anumite blocuri ale cipului video; impactul performanței altora este redus în mod deliberat la minimum. La toate testele CPU nu este implicat, totul este considerat exclusiv un cip video. Să începem testele mult așteptate DirectX 10!

Condiții de test

Versiunea pachetului de teste sintetice RightMark3D 2.0 cu care folosim descriere scurta teste disponibile pentru descărcare (4,5 MB)

RightMark3D 2.0 necesită pachetul instalat Runtime MS Visual Studio 2005, precum și cea mai recentă actualizare de rulare DirectX.

Notă: se afișează captura de ecran versiune speciala RightMark3D 2.0 cu capacitatea de a testa în modul lot. Este destinat pentru uz internși va fi disponibil mai târziu.

Configurația bancului de testare:

  • Computer bazat pe Intel Core 2 Duo (Socket 775)
    • procesor Intel Core 2 Duo Extreme X6800 (2930 MHz) (L2=4096K);
    • Placa de baza EVGA nForce 680i SLI Chipset Nvidia nForce 680i;
    • RAM 2 GB DDR2 SDRAM Corsair 1142MHz (CAS (tCL)=5; întârziere RAS către CAS (tRCD)=5; Row Precharge (tRP)=5; tRAS=15);
    • hard disk WD Caviar SE WD1600JD 160GB SATA;
    • sursa de alimentare Tagan 1100-U95 (1100W).
  • sala de operatie sistem Windows Vista Ultimate pe 32 de biți; DirectX 10;
  • Monitor Dell 3007WFP (30").
  • Driverele ATI CATALYST versiunea 8.3891; Nvidia ForceWare versiunea 158.45.

Testele sintetice au fost efectuate pe plăci video:

  • RADEON HD 2900XT cu parametri standard
  • RADEON HD 2600 XT cu parametri standard
  • RADEON HD 2600 PRO cu parametri standard (versiunea cu memorie video GDDR3)
  • RADEON HD 2400 XT cu parametri standard
  • GeForce 8800 Ultra cu parametri standard
  • GeForce 8800 GTX cu parametri standard
  • GeForce 8800 GTS cu parametri standard (versiunile cu 320 și 640 MB de memorie video prezintă performanțe similare)
  • GeForce 8600 GTS cu parametri standard
  • GeForce 8600 GT cu parametri standard
  • GeForce 8500 GT cu parametri standard

Pentru a compara plăcile video între ele, vor fi folosite perechi de modele AMD și Nvidia care se potrivesc cu poziționarea lor pe piață: HD2900XT GF8800GTS, HD2600XT GF8600GT, HD2600PRO GF8500GT. Unele dintre plăcile video nu sunt încă pe piață, iar dacă prețurile lor reale sunt diferite, trebuie făcute corecții la concluziile articolului. De asemenea, prețurile sunt în continuă schimbare, iar multe dintre concluziile articolului sunt valabile doar pentru momentul publicării acestuia. Desigur, acest lucru nu se aplică unei comparații teoretice a jetoanelor junior și senior de la o companie; evaluarea performanței lor relative nu depinde de prețuri.

Descrieri și rezultate ale testelor

Vă reamintim că rezultatele testelor sintetice ale arhitecturilor unificate DirectX 10 trebuie analizate cu atenție; încărcarea acestora se află adesea pe doar unul sau două tipuri de shadere: vertex, geometrie, pixel. Și dacă pe o arhitectură convențională, cu o sarcină echilibrată pe toate blocurile enumerate, performanța nu va scădea, atunci pe o arhitectură unificată, munca totală va cădea asupra tuturor deodată, iar viteza de randare va scădea.

Teste PS 4.0 pixel shader (texturare, bucle)

Noua versiune a RightMark3D 2.0 folosită în acest articol include două teste familiare PS 3.0, cele mai complexe dintre testele noastre sintetice de umbrire a pixelilor pentru Direct3D 9, precum și două teste complet noi. Primele au fost rescrise pentru DirectX 10, au adăugat, de asemenea, auto-umbrire și capacitatea de a activa supraeșantionarea, ceea ce mărește și mai mult încărcarea deja considerabilă a cipurilor video.

  • Blană shader procedural care redă blană
  • Maparea paralaxelor abrupte un tip „greu” de tehnică de cartografiere a paralaxei, nefolosită încă în jocuri, descrisă anterior în articol

Aceste două teste măsoară performanța pixel shader-urilor care rulează în bucle, cu un număr mare de mostre de textură (în modul cel mai greu, până la câteva sute de mostre per pixel!) și o încărcare ALU relativ mică. Cu alte cuvinte, ei măsoară viteza probelor de textură și eficiența ramurilor în pixel shader.

Primul nostru test de pixel shaders va fi Fur. La cele mai mici setări, folosește 15 până la 30 de mostre de textură din harta înălțimii și două mostre din textura principală. Modul de detaliu efect „High” crește numărul de eșantioane la 40-80, includerea supraeșantionării „shader” până la 60-120 de eșantioane, iar modul „High” împreună cu SSAA se caracterizează prin „greutate” maximă de la 160 la 320 de mostre de pe harta înălțimii. Arata cam asa:

Un test foarte dificil, chiar și judecând numai după descriere. Să vedem cum se descurcă toate plăcile video DirectX 10 disponibile pentru noi. Să verificăm mai întâi modurile fără supraeșantionarea activată; acestea sunt relativ simple, iar raportul rezultatelor în modurile „Scăzut” și „Ridicat” ar trebui să fie aproximativ același.

Primele teste de redare procedurală a blănii cu mai multe mostre de textură din shadere complexe cu bucle arată un avantaj uriaș al plăcilor video Nvidia față de soluțiile AMD. Chiar și cipurile Nvidia de gamă medie arată rezultate la egalitate cu soluția de top AMD, ca să nu mai vorbim de cardurile bazate pe cipuri G80, care nu au deloc concurenți. Deci, conform acestui test, toate soluțiile Nvidia sunt mai rapide decât plăcile lor video AMD corespunzătoare. Având în vedere că un astfel de decalaj nu ar trebui teoretic să existe, se poate presupune că driverele nedezvoltate sunt în mare parte vinovate pentru rezultatele slabe ale AMD.

Numerele afișate în moduri diferite, se corelează bine între ele rezultatele în „Ridicat” sunt de aproximativ o dată și jumătate mai mici decât în ​​„Scăzut”. În ceea ce privește raportul de performanță dintre cardurile de top-end și cardurile mid-range, putem spune că reducerea unităților de execuție lovește destul de greu jetoanele mid-range și mid-range. niveluri inferioare de la ambii producători, acest lucru se aplică în special soluțiilor Nvidia (și, de asemenea, AMD, dacă există o presupunere cu privire la deficiențe versiunile actuale driverul este corect) G84 rămâne în urmă cu G80 de trei ori, iar G86 arată rezultate de două ori mai mici. Judecând după aceste cifre, performanța acestui test depinde nu numai de numărul și viteza TMU-urilor, altfel diferența ar fi mai mică.

Să ne uităm la rezultatul aceluiași test, dar cu supraeșantionarea shader activată, ceea ce crește de patru ori cantitatea de lucru:

O astfel de complexitate a testului este posibilă numai pentru cipurile de vârf; ratele de cadre afișate pe secundă vorbesc elocvent despre acest lucru. În general, imaginea reiese aproximativ la fel ca în cazul precedent, dar este clar că, pe măsură ce complexitatea shader-ului și încărcarea pe cipul video crește, soluțiile AMD încep să ajungă din urmă. placi video Nvidia. GeForce 8600 nu mai depășește HD 2900 XT, deși este aproape de acesta, iar GeForce 8500 GT chiar începe să piardă puțin în fața concurentului său din gama de preț HD 2600 PRO.

Activarea supraeșantionării crește teoretic încărcarea de exact de patru ori, dar pe plăcile video din familia G8x reduce viteza de mai mult de 5 ori, iar pe R6xx doar cu puțin peste 3, datorită faptului că acestea din urmă obțin rezultate relative îmbunătățite sub astfel de conditii. Cel mai probabil, cu modificările corespunzătoare ale driverelor, Nvidia va putea reduce scăderea performanței atunci când SSAA este activat, dar AMD are și îmbunătățiri similare...

Al doilea test măsoară performanța pixelilor de nuanță complexe cu bucle cu un număr mare de mostre de textură Steep Parallax Mapping. La setări scăzute, folosește 10 până la 50 de mostre de textură din harta înălțimii și trei mostre din texturile principale. Când activați modul greu cu auto-umbrire, numărul de eșantioane se dublează (de la 20 la 100), supraeșantionarea de patru ori acest număr (de la 40 la 200 de eșantioane). Cel mai dificil modul de testare cu supraeșantionare și auto-umbrire utilizează de la 80 la 400 de mostre de textură, adică de opt ori mai multe decât în ​​modul simplu.

Același lucru verificați mai întâi opțiuni simple fără supraeșantionare:

Al doilea test este mai interesant cu punct practic viziune, deoarece varietăți de cartografiere paralaxă sunt deja folosite în jocuri, iar opțiunile grele, cum ar fi maparea noastră abruptă de paralaxă, vor fi utilizate în curând în ele. Și în acest test, pe lângă supraeșantionare, puteți activa auto-umbrirea, care dublează aproximativ sarcina pe cipul video. Acest mod se numește „High”, iar cel obișnuit se numește „Low”.

În testele noastre de cartografiere paralaxă Direct3D 9, soluțiile ATI (și apoi AMD) au fost în mod tradițional puternice, dar de data aceasta nu a existat niciun câștig; dimpotrivă, fără a permite supraeșantionarea, cipurile Nvidia fac față mai rapid sarcinii. Observăm imediat o scădere ceva mai mare a performanței atunci când trecem de la modul „Scăzut” la „Înalt” pentru plăcile video AMD. Modificarea rezultatelor atunci când auto-umbrirea este activată pentru soluțiile Nvidia este de aproximativ 1,5 ori, iar pentru AMD este de peste două ori. Din această cauză, rezultatele în modul „Înalt” pentru acesta din urmă se dovedesc a fi relativ scăzute. În general, pe baza rezultatelor testelor, putem remarca încă o dată victoria soluțiilor Nvidia în toate intervalele de preț, câștigul fiind remarcat mai ales în segmentul superior.

chips-uri mijlocii și inferioare intervale de preț la acest test au rezultate aproximativ la fel sau puțin mai bune: cei medii rămân în urmă cu cei de sus de mai mult de două ori, iar cei mai slabi sunt în urmă cu aceeași sumă. Să vedem ce diferență va face activarea supereșantionării; în testul anterior a provocat o scădere mai mare a vitezei pe Nvidia, iar acest lucru poate îmbunătăți situația plăcilor AMD.

Pe baza numerelor FPS, putem evalua din nou complexitatea sarcinilor noastre, chiar și pentru soluții high-end. Priviți rata de cadre pe secundă rezultată, cu supraeșantionarea și auto-umbrirea activate (ultimul grafic), activarea acestora împreună crește încărcarea de aproape opt ori, provocând o scădere catastrofală a performanței. Diferența dintre viteza plăcilor video de la diferite segmente de preț este salvat.

Activarea supraeșantionării are același efect ca în cazul precedent: cardurile bazate pe cipuri AMD R6xx își îmbunătățesc performanța față de Nvidia G8x. Este ciudat că Nvidia a primit o scădere de 4x (egal cu cea teoretică), în timp ce AMD a primit doar o scădere de 3x. În ciuda acestui fapt, AMD nu obține o victorie generală, cu excepția faptului că în segmentul de preț mai scăzut GeForce 8500 GT (G86) pierde de obicei în fața HD 2600 PRO (RV630). În perechile rămase, remarcăm o altă victorie pentru soluțiile Nvidia.

Teste PS 4.0 Pixel Shader (Calcul)

Următoarele două teste de pixel shader conțin un minim de mostre de textură, acest lucru se face pentru a reduce impactul vitezei blocurilor TMU asupra viteza totala. Dar se folosește o cantitate foarte mare operatii aritmetice(sin, cos, exponentiație etc.). Aceste teste măsoară în mod specific performanța matematică a cipurilor video, viteza de execuție a instrucțiunilor aritmetice într-un pixel shader. Influența tuturor celorlalte unități executive este redusă la minimum.

Primul test de matematică Mineral. Poate fi numit un test de texturare procedurală complexă, folosește doar două mostre din datele de textură și 65 de instrucțiuni sin și cos, pentru un total de peste o mie de instrucțiuni per pixel.

Conform rezultatelor cercetării noastre folosind versiunea anterioară a suitei de benchmark sintetice Direct3D 9, arhitectura AMD funcționează foarte bine în sarcini complexe din punct de vedere computațional, toate soluțiile lor fiind în fața concurenței. Dar Nvidia G8x nu este atât de departe. Da, soluțiile AMD sunt mai rapide în toate segmentele de preț, dar în high-end, care este cel mai important din punct de vedere strategic, lead-ul este mic, mai ales având în vedere că Nvidia are și soluții mai scumpe. În segmentele inferioare și mijlocii, soluția bazată pe cip G86 nu poate rezista atacului RV630 inferior și este aproximativ echivalentă cu soluția bazată pe RV610 și varianta rapida bazat pe G84 rămâne în urma RV630 de top. În general, dacă luăm în considerare prețurile reale și așteptate ale tuturor soluțiilor, victoria de data aceasta este pentru AMD.

Performanța soluțiilor de gamă medie de la ambii producători în acest test este de aproximativ două ori mai mică decât viteza celor mai apropiate cipuri de top-end; cipurile low-end sunt chiar de două ori mai proaste. Raportul tradițional a fost observat pentru a enesima oară, în deplină concordanță cu reducerea din punct de vedere teoretic, ținând cont de frecvențele de ceas. În general, nu totul este atât de rău cu DirectX 10 mid-range și niveluri inferioare... Deși, în orice caz, nu vorbim despre setări maxime viitoarele jocuri D3D 10, chiar și cărțile high-end vor avea dificultăți cu ele.

Al doilea test al acestui bloc se numește Foc și este și mai dificil pentru ALU. Are o singură textură, dar numărul de instrucțiuni precum sin și cos este crescut la 130, mai mult de o mie de instrucțiuni în total.

Să vedem ce s-a schimbat când sarcina a crescut:

Observăm imediat că o comparație completă în testul „Foc” nu este posibilă, există o eroare evidentă în driverele AMD, care nu permite produselor lor să arate rezultate corespunzătoare puterii reale. Să așteptăm remedierea driverului înainte de a trage concluzii.

Diferența dintre variantele mai tinere G80 și cele mai vechi G84 a fost din nou de puțin mai mult de două ori, ceea ce corespunde aproximativ diferenței de frecvențe și numărului de unități de execuție. Același lucru este valabil și pentru cip-ul low-end al Nvidia.

Teste geometrie shader

Pachetul RightMark3D 2.0 include două teste de viteză pentru geometrie shader conditii diferite. Prima opțiune se numește „Galaxy”, tehnica este similară cu „punct sprites” de la Versiuni anterioare Direct3D. Animă un sistem de particule pe GPU, un shader de geometrie din fiecare punct (de la 0,5 la 2,0 milioane în total) creează patru vârfuri care formează o particulă (expansiune quad). Aparent, algoritmi similari vor fi folosiți pe scară largă în viitoarele jocuri DirectX 10, așa că rezultatele prezentate în test sunt deosebit de interesante.

Este important de reținut că modificarea echilibrării în testele noastre de umbrire geometrie nu schimbă rezultatul vizual; în ambele cazuri, imaginea finală este absolut aceeași, se schimbă doar modul în care este procesată scena. Parametrul „GS load” determină ce calcule shader sunt efectuate în vârf sau geometrie, dar numărul de calcule în ambele cazuri este același.

Să ne uităm la prima versiune a testului Galaxy, cu calcule în vertex shader, pentru trei niveluri de complexitate geometrică:

Se poate observa că raportul vitezelor pentru diferite complexități geometrice a scenelor s-a dovedit a fi aproximativ același pentru toate condițiile, doar valorile absolute diferă. Performanța prezentată de toate soluțiile corespunde pe deplin numărului de puncte; cu fiecare pas, FPS-ul scade de aproximativ două ori. Plăcile video Nvidia se simt puțin mai bine în astfel de condiții, arătând rezultate mai bune la toate perechile comparate: GeForce 8800 GTS este mai rapid decât HD 2900 XT, GeForce 8600 GT este mai rapid decât HD 2600 XT, GeForce 8500 GT este mai rapid decât HD 2600 PRO. Diferența, deși mică, există.

Sarcina nu este atât de dificilă pentru plăcile video moderne; soluțiile de top sunt ușor înaintea plăcilor video de nivel mediu, diferența nu este nici măcar de două ori. Deși low-end rămâne în urmă cu mid-end de la fel de două ori. Poate că, atunci când o parte din calcule este transferată în geometrie shader, situația se va schimba, atât la compararea soluțiilor de la diferiți producători, cât și a segmentelor de preț. Vom verifica asta acum.

Într-adevăr, s-au produs unele schimbări. Acum, soluțiile bazate pe cipuri G8x nu depășesc întotdeauna soluțiile bazate pe R6xx în toate cazurile cu cantități diferite de geometrie. Deși GeForce 8600 GT este încă înaintea RADEON HD 2600 XT, iar GeForce 8500 GT este puțin înaintea HD 2600 PRO, placa video de sus AMD preia conducerea. Este interesant că nu există aproape nicio diferență între numerele GeForce 8800 GTX și GTS, deși numărul de unități de execuție active pentru aceste cipuri este diferit. Drept urmare, AMD continuă să piardă, ceea ce este puțin ciudat, având în vedere eficiența ridicată a execuției vertex shader de către cipurile lor, observată în testele noastre anterioare. Sa vedem, poate la al doilea test rezultatul se va schimba...

„Hyperlight” este cel de-al doilea test de umbrire geometrie din noua versiune a RightMark3D, care demonstrează utilizarea mai multor tehnici interesante simultan: instanță, ieșire de flux, încărcare tampon. Folosește creație dinamică geometrie prin desenarea în două tampoane, acest test folosește și noua oportunitate Ieșire flux DX10. Primul shader folosit generează direcția razelor, viteza și direcția creșterii acestora, aceste date sunt plasate într-un buffer, care este folosit de al doilea shader pentru desen. Pentru fiecare punct al razei, într-un cerc sunt construite 14 vârfuri, până la un milion de puncte de ieșire în total.

Un nou tip de programe shader este folosit pentru a genera „raze”, iar cu parametrul „GS load” setat la „Heavy”, de asemenea, pentru a le desena. Adică, în modul „Echilibrat”, umbritoarele de geometrie sunt folosite doar pentru a crea și „crește” raze, ieșirea se realizează folosind „instanțare”, iar în modul „Gre”, umbritorul de geometrie este, de asemenea, implicat în ieșire. Mai întâi ne uităm la modul ușor:

rezultate diferite plăci video Sunt practic la fel unul față de celălalt, indiferent de complexitatea geometrică a scenei. Performanța se scalează bine și aproape se potrivește cu parametrii teoretici, conform cărora fiecare nivel ulterior de „Număr de poligon” ar trebui să fie de două ori mai lent.

Marele avantaj al plăcilor video Nvidia se observă și de această dată, când încărcarea pe geometry shaders nu este atât de mare. RADEON HD 2900 XT este inferior chiar și GeForce 8600 GT, iar soluția inferioară Nvidia este puțin înaintea HD 2600 XT. Nu merită să vorbim despre G80 - sunt mult în față, iar performanța lor este clar limitată de altceva, deoarece nu câștigă prea mult în comparație cu G84.

Interesant este că performanța HD 2400 XT este aproape egală cu viteza HD 2600 PRO și ambele cifre sunt cu mult în urma HD 2600 XT, nu era cazul în vremurile anterioare. Toate aceste numere se pot schimba în următorul nostru test, unde umbritoarele de geometrie sunt utilizate și mai activ. Va fi deosebit de interesant să comparăm numerele obținute în modurile „Echilibrat” și „Gre” între ele.

De acord, situația s-a dovedit a fi cu totul alta! Se poate spune clar că cipurile din seria AMD R6xx efectuează această muncă mult mai rapid decât cipurile Nvidia G8x, având un avantaj de 2 ori sau chiar mai mult. Performanța acestor teste depinde foarte mult de complexitatea lucrării pentru geometrie shaders. Cipurile AMD nu fac doar treaba decizii mai rapide Nvidia, pe măsură ce geometria devine mai complexă, această diferență crește. Se pare că, cu cât munca pentru geometrie shader este mai complexă, cu atât R6xx va fi mai rapid în comparație cu G8x.

Dar, comparând rezultatele în diferite moduri, atunci când ieșirea este efectuată tipuri diferite shaders, trebuie remarcat că rezultatele Nvidia în „Balanced” au fost mai bune decât cele în „Heavy” de la AMD. În ciuda faptului că imaginea afișată nu este diferită. Acest lucru amenință încă o dată dezvoltatorii de aplicații 3D cu faptul că vor trebui să își optimizeze codul pentru două arhitecturi foarte diferite pentru a realiza performanță maximă de la amândoi.

Când treceți de la utilizarea „instanțelor” la un shader geometrie în timpul ieșirii, plăcile video Nvidia pierd mult din performanță, de la 2 la 6 ori. Mai mult, cu cât cip este mai tânăr, cu atât o mare diferentaîn viteza de redare între cele două moduri. Pentru AMD, opusul este adevărat: rezultatele în modul de utilizare a unui shader geometrie pentru ieșire sunt mai mari decât în ​​cazul „instanțării”, deși nu de câteva ori. Se dovedește că geometry shaders în sine, cu o creștere a muncii (numărul de vârfuri generate), funcționează mai bine pe cipurile AMD, dar realitatea diferă de testele sintetice prin faptul că dezvoltatorii sunt liberi să-și aleagă propria cale, iar dacă folosesc vertex shadere pentru că sarcinile lor sunt mai profitabile, s-ar putea să o facă.

Diferența dintre viteza în modurile „Echilibrat” și „Gre” pentru diferite jetoane din aceeași linie este, de asemenea, extrem de interesantă. Situația amuzantă cu comparația HD 2400 XT și HD 2600 PRO s-a înrăutățit - acum cipul mai tânăr îl depășește chiar pe cel mai vechi. Iar „vinovat” de aici este cel mai probabil mai mult frecventa inalta Soluție junior și configurarea triunghiului cu limita de viteză. Acest lucru nu se observă cu Nvidia; toate cipurile au arătat rezultate strict conform liniilor: G84 este de 2-3 ori mai lent decât G80, iar G86 este de 4-6 ori mai lent. Există un alt mister asociat cu HD 2600 PRO, care nu poate fi explicat - doar această placă video AMD își pierde performanța la schimbarea modului de la „Echilibrat” la „Gre” într-un mod cu multă geometrie.

De asemenea, trebuie menționat că există o eroare în driverele AMD, care apare doar pe HD 2900 XT, determinând absența unei imagini de ieșire în cel mai complex mod de testare „Hyperlight” și un rezultat anormal de ridicat care nu poate fi acceptat ca corect. Prin urmare, în ultima diagramă nu există niciun rezultat pentru această placă video.

Concluzia principală a acestei părți este că diferite teste de umbrire geometrie pot da rezultate diferite; în unele, soluțiile Nvidia vor conduce, în altele - AMD. Pe măsură ce complexitatea geometry shader crește, AMD iese înainte, dar trebuie să rețineți că toate acestea sunt teste sintetice, performanța reală poate fi judecată doar prin testele de joc, care, din păcate, sunt foarte puține până acum.

Viteza de preluare a texturii din vertex shaders

Testele Vertex Texture Fetch măsoară viteza unui număr mare de texturi din vertex shader. Testele sunt similare între ele, teoretic, raportul dintre vitezele testelor Pământului și Waves ar trebui să fie aproximativ același. În ambele teste este utilizat pe baza datelor de eșantionare a texturii. Diferența este că testul Waves folosește ramuri condiționate, în timp ce testul Pământ nu.

În primul test („Pământ”), 32 (pentru modul „Detaliu efect scăzut”) sau 48 („Detaliu efect ridicat”) sunt realizate probe de textură biliniară pentru fiecare vârf. Se poate modifica și numărul de vârfuri, pentru trei moduri posibile acestor numere corespund: 30.000, 124.000 și 280.000.

Luați în considerare modul „Detaliu efect scăzut”:

Toate cele trei grafice arată aproximativ aceeași imagine a performanței plăcilor video una față de cealaltă, cu excepția faptului că performanța GeForce 8500 GT, pe măsură ce sarcina crește, „scădeazà” mai repede decât performanța HD 2600 PRO concurent; „Low” câștigă prima placă video, apoi în „High” este deja înainte soluția AMD. Pentru perechea HD 2600 XT și GeForce 8600 GT, totul este exact invers: la sarcini mici soluția AMD este înainte, iar la „High” este deja puțin în urmă. Printre soluțiile de top, lupta nu a funcționat; toate variantele G80 sunt mai rapide decât R600.

Raportul dintre performanța soluțiilor de top și plăcile video mid și low-end rămâne același, de până la 2-3 ori între prima și de 2-3 ori între a doua. Singurul lucru interesant este că există prea multă diferență de performanță între HD 2600 PRO și HD 2600 XT; aceasta nu poate fi explicată prin numărul diferit de unități de textură (TMU), deoarece se folosesc aceleași cipuri. Rezultatele testelor pot fi afectate de debitului memorie, care este foarte diferită pentru variantele PRO și XT.

Să ne uităm la rezultatele aceluiași test cu un număr crescut de mostre de textură:

În această versiune placi video AMD Am pierdut puțin viteza în comparație cu rivalii noștri. În toate perechile concurente, câștigătorii sunt soluțiile Nvidia care au un număr mai mare de module de textură care funcționează eficient. Diferența dintre AMD și Nvidia în condițiile specificate este de până la 1,5-2 ori. Cipurile video Nvidia sunt în mod clar mai eficiente în preluarea datelor de textură, pe baza testelor atât pentru vertex, cât și pentru pixel shader.

Să ne uităm la rezultatele celui de-al doilea test VTF, mă întreb dacă acolo vor apărea probleme similare? Testul Waves are un număr mai mic de mostre, dar folosește salturi condiționate. Numărul de mostre de textură biliniară în acest caz este de până la 14 („Detaliu efect scăzut”) sau până la 24 („Detaliu efect ridicat”) per vârf. Complexitatea geometriei se modifică în mod similar cu testul anterior, numărul total de vârfuri putând fi de aproximativ 124000, 498000 și 1122000 pentru modurile de numărare a poligonelor Scăzut, Mediu și, respectiv, Înalt.

„Valurile” nu ne arată nimic nou, totul este aproximativ la fel ca în testul „Pământ” anterior. Se poate observa că unele cipuri Nvidia (G80 și G86) pierd cadre pe secundă odată cu creșterea complexității geometriei puțin mai repede decât concurenții de la AMD (R600 și RV630), dar soluțiile Nvidia sunt încă cele mai bune în majoritatea cazurilor.

Ultimele rezultate sunt și ele aproximativ în concordanță cu cele arătate în cazurile anterioare, doar avantajul soluțiilor Nvidia se vede puțin mai bine. În general, se vede clar că plăcile video bazate pe cipuri Nvidia G8x efectuează testele noastre de preluare a texturii din vertex shadere mai repede decât soluțiile AMD bazate pe arhitectura R6xx. Aceasta este concluzia principală din această serie de teste VTF.

Concluzii și concluzii privind testele sintetice

Deci, a avut loc debutul utilizării RightMark3D 2.0 pentru cercetare pe site-ul nostru web. Testele pe care le conține acoperă aproape toate aspectele inovațiilor din Direct3D 10; sunt configurate flexibil, permițându-ne să evaluăm performanță comparativă toate liniile de cipuri Direct3D 10 de la AMD și Nvidia. Ambele arhitecturi unificate ale acestor companii au funcționat destul de bine în noile noastre teste Direct3D 10; nu au fost găsite scăderi majore de performanță, cu excepția câtorva cazuri cu erori evidente în driverele AMD. Ambele familii R6xx și G8x se disting prin performanțe de calcul și textură ridicate, se descurcă bine cu shadere complexe de toate tipurile.

  • Dacă luăm rezultatele în ansamblu, atunci soluțiile Nvidia au un oarecare avantaj față de concurenții de la AMD, mai departe acest moment plăcile lor video ies înainte în majoritatea cazurilor. Dar în unele teste, cipurile AMD au rezultate mai bune, de exemplu, în testele de geometrie complexă și pixel shader. Avantajul cipurilor AMD în astfel de teste crește chiar și odată cu creșterea sarcinii. Deci, rezultatul bătăliei în jocurile DirectX 10 nu a fost încă determinat; este imposibil de spus cu siguranță care dintre adversari îl va câștiga. Putem doar presupune că vor exista rezultate similare cu ale noastre în cea mai mare parte a aplicațiilor R6xx și G8x vor fi aproape una de alta, în unele aplicații soluțiile bazate pe soluții vor fi în frunte Nvidia, în altele AMD. Și acest lucru va depinde în mare măsură de dezvoltatori și de metodele și algoritmii pe care îi folosesc.
  • Testele pentru pixel shaders versiunea 4.0 au arătat că cipurile video Nvidia se descurcă mai bine cu mai multe mostre de textură cu o încărcare ALU relativ mică. Soluțiile AMD, la rândul lor, sunt înaintea concurenților în testele computaționale ale pixel shaders. La una dintre ele, plăcile video bazate pe cipuri de arhitectură R6xx au dat rezultate foarte bune și au fost înaintea concurenților de la Nvidia, dar situația din al doilea test nu este încă clară din cauza erorilor din drivere.
  • După cum am observat deja, testele de geometrie și vertex shader dau rezultate diferite; în unele, soluțiile Nvidia sunt în frunte, în altele - AMD. Deoarece plăcile video AMD ies înainte pe măsură ce crește complexitatea muncii pentru geometry shader, putem presupune că în aplicațiile cu utilizare activă Umbritoarele geometrice, dacă vor apărea în viitorul apropiat, vor fi conduse de cipuri de la această companie.
  • Ultimele teste RightMark3D 2.0 testează viteza de recuperare a texturii din vertex shaders. Rezultatele afișate în ele indică în mod clar că plăcile video bazate pe cipuri Nvidia G8x efectuează testele noastre de preluare a texturii din vertex shadere mai rapid decât soluțiile AMD bazate pe arhitectura R6xx. Acest lucru se datorează echilibrului tradițional diferit între textura și capacitățile de calcul ale cipurilor de la două companii concurente.
  • „Reducerea” numărului de unități shader, TMU-uri și ROP-uri a avut un impact semnificativ asupra soluțiilor medii și joase, reducându-le semnificativ performanța. Plăcile video ieftine rămân de câteva ori în urma celor de top, cele mai bune de 2-3 ori (de la HD 2900 XT și GeForce 8800 GTS), iar cele de gamă inferioară chiar mai mult - de până la 4-8 ori. Acest lucru este confirmat de rezultatele testelor de joc, până acum doar Direct3D 9.
  • Judecând după rezultatele noastre, Drivere AMD pentru Vista sunt în mod clar mai slab dezvoltate în comparație cu Drivere Nvidia. Deși nu s-au găsit erori în produsele celei de-a doua companii din testele noastre, soluțiile AMD au avut două probleme evidente: întreaga linie de cipuri în cel de-al doilea test „computațional” de pixel shaders („Fire”), precum și soluția de top. HD 2900 XT în cel mai dificil mod de testare pentru viteza de eșantionare a texturii de la Earth vertex shaders. Chiar aș dori să cred că aceste neajunsuri vor fi eliminate în următoarele versiuni de drivere CATALYST.

Nu-mi place când cineva încearcă să folosească exemple de cod realizate manual pentru a evalua capacitățile unui analizor de cod static. Acum pe exemplu concret Voi demonstra de ce am o atitudine negativă față de testele sintetice.

Nu cu mult timp în urmă, Bill Torpey a scris o notă pe blogul său „Even Mo „Static”, unde a povestit cum, în opinia sa, instrumentele Cppcheck și PVS-Studio au funcționat la analiza proiectului itc-benchmarks. Proiectul itc-benchmarks este repere de analiză statică de la Toyota ITC.

Nu mi-a plăcut că, după ce am citit articolul, se pare că analizoarele Cppcheck și PVS-Studio sunt aproximativ egale în capacități. Din articol rezultă că un analizor are performanțe mai bune într-un domeniu, celălalt în altul, dar, în general, capacitățile lor de diagnosticare sunt similare.

Eu nu cred acest lucru. Părerea mea este că analizatorul nostru PVS-Studio este de câteva ori mai puternic decât Cppcheck. Și, în general, aceasta nu este o „opinie”, știu asta!

Cu toate acestea, din moment ce nu este evident din exterior că PVS-Studio este de 10 ori mai bun decât Cppcheck, atunci trebuie să încercăm să înțelegem motivul. Am decis să mă uit la aceleași criterii de referință itc și să-mi dau seama de ce PVS-Studio nu a funcționat cel mai bine pe această bază de testare.

Cu cât mă uitam mai departe, cu atât mă simțeam mai iritat. Și un exemplu m-a dezechilibrat complet și vă voi spune despre asta puțin mai jos. Concluziile mele sunt următoarele: nu am nicio plângere despre Bill Torpey. A scris un articol bun, sincer. Mulțumesc Bill. Dar am plângeri despre Toyota ITC. Părerea mea personală: lor baza de testare- rahat. Aceasta este, desigur, o declarație mare, dar cred că am suficiente calificări și experiență pentru a vorbi despre analizatorii de cod statici și despre cum să le evaluez. În opinia mea, itc-benchmark-urile nu pot fi utilizate pentru a evalua în mod adecvat capacitățile unui anumit analizor.

Și iată testul real care m-a dezechilibrat complet.

Deci, ce se întâmplă, este PVS-Studio mai slab decât Cppcheck în acest exemplu? Nu, doar e mai puternic!

Analizatorul PVS-Studio înțelege că acest cod a fost scris în mod deliberat și nu există nicio eroare aici.

Există situații în care este scris un cod similar special pentru a provoca o excepție să fie aruncată la dereferențierea unui pointer nul. Acest lucru poate fi găsit în teste sau în zone specifice de cod. Am văzut cod similar de multe ori. Iată, de exemplu, cum ar putea arăta într-un proiect real:

Void GpuChildThread::OnCrash() ( LOG(INFO)<< "GPU: Simulating GPU crash"; // Good bye, cruel world. volatile int* it_s_the_end_of_the_world_as_we_know_it = NULL; *it_s_the_end_of_the_world_as_we_know_it = 0xdead; }
Prin urmare, în analizorul PVS-Studio au fost implementate mai multe excepții în diagnosticul V522, pentru a nu înjurați un astfel de cod. Analizatorul vede asta null_pointer_001 nu este o funcție reală. În codul real, nu există erori în funcții atunci când un zero este scris la un pointer și imediat dereferențiat. Și numele funcției îi spune analizorului că „indicatorul nul” este acolo pentru un motiv.

Pentru astfel de cazuri, excepția A6 este implementată în diagnosticul V522. În aceasta se încadrează și funcția sintetică null_pointer_001. Iată cât de periculoasă este excepția A6:

Dereferința unei variabile este într-o funcție al cărei nume conține unul dintre cuvintele:

  • eroare
  • Mod implicit
  • prăbușire
  • nul
  • Test
  • încălcare
  • arunca
  • excepție
În acest caz, variabilei i se atribuie 0 în linia de mai sus.

Testul sintetic a îndeplinit pe deplin această excepție. În primul rând, numele funcției conține cuvântul „null”. În al doilea rând, alocarea lui zero unei variabile are loc exact pe linia anterioară. Excepția a detectat cod nevalid. Și codul chiar nu este real, este un test sintetic.

Din cauza nuanțelor ca acestea nu-mi plac testele sintetice!

Am și alte reclamații despre itc-benchmarks. De exemplu, totul în același fișier, putem vedea acest test:

Void null_pointer_006 () ( int *p; p = (int *)(intptr_t)rand(); *p = 1; /*Instrumentul ar trebui să detecteze această linie ca eroare*/ /*ERROR:NULL pointer dereference*/ )
Funcţie rand poate returna 0, care apoi se transformă în NULL. Analizorul PVS-Studio nu știe încă ce poate returna randși, prin urmare, nu vede nimic suspect în acest cod.

Le-am rugat colegilor să învețe analizatorul să înțeleagă mai bine ce este o funcție rand. Nu există încotro, va trebui să ascuți analizorul cu o pilă, astfel încât să funcționeze mai bine pe baza de test în cauză. Aceasta este o măsură necesară, deoarece seturi similare de teste sunt utilizate pentru evaluarea analizoarelor.

Dar nu-ți fie frică. Declar că vom continua să lucrăm la diagnostice foarte bune și nu să adaptăm analizorul la teste. Poate că vom retușa puțin PVS-Studio pentru itc-benchmark-uri, dar în fundal și doar în acele locuri care au măcar sens.

Vreau ca dezvoltatorii să înțeleagă că exemplul cu rand chiar nu evaluează nimic. Acesta este un test sintetic care a fost scos din aer. Nu așa sunt scrise programele. Nu există astfel de erori.

Apropo, dacă funcția rand va returna nu 0, dar 1400 nu va fi mai bun. Cu toate acestea, un astfel de indicator nu poate fi dereferențiat. Deci, dereferențiarea unui pointer nul este un caz special ciudat de cod complet incorect care a fost pur și simplu alcătuit și care nu apare în programele reale.

Cunosc problemele reale ale programatorilor. De exemplu, acestea sunt greșeli de tipar pe care le detectăm cu sute, să zicem, folosind diagnosticul V501. Interesant, nu am observat un singur test în itc-benchmarks care să verifice dacă analizorul ar putea detecta o greșeală de tipar precum „dacă (a.x == a.x)”. Nici un singur test!

Astfel, itc-benchmarks ignoră capacitatea analizorilor de a găsi greșeli de scriere. Și cititorii articolelor noastre știu cât de comune sunt aceste greșeli. Dar conține, după părerea mea, cazuri de testare stupide care nu se găsesc în programele reale. Nu îmi pot imagina că într-un proiect serios puteți întâlni cod ca acesta care duce la o matrice în afara limitelor:

Void overrun_st_014 () ( int buf; int index; index = rand(); buf = 1; /*Instrumentul ar trebui să detecteze această linie ca eroare*/ /*EROARE: buffer overrun */ sink = buf; )
Poate că acest lucru poate fi găsit doar în lucrările de laborator ale studenților.

În același timp, știu că într-un proiect serios este ușor să dai peste o greșeală de tipar precum:

Return (!strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1) && !strcmp (a->v.val_vms_delta.lbl1, b->v.val_vms_delta.lbl1));
Această eroare a fost detectată de analizorul PVS-Studio

  • Serghei Savenkov

    un fel de recenzie „scurtă”... de parcă s-ar grăbi undeva