Ce este ratingul AnTuTu? Cum să înțelegeți rezultatele testelor sintetice

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 mai departe 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 au funcționat, în opinia sa, instrumentele Cppcheck și PVS-Studio la analiza proiectului itc-benchmarks 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, în cele din urmă, m-a dezechilibrat.

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 sunt 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ă există un motiv pentru „indicatorul nul”.

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
  • 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 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 nu prea evalueaza 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 adevăratele probleme ale programării. 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


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, folosind un 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 au funcționat, în opinia sa, instrumentele Cppcheck și PVS-Studio la analiza proiectului itc-benchmarks 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ă: baza lor de testare este o porcărie. 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, în cele din urmă, m-a dezechilibrat.

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 cod similar este scris special pentru a provoca o excepție atunci când un pointer nul este dereferențiat. 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 că 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ă există un motiv pentru „indicatorul nul”.

Pentru astfel de cazuri, excepția A6 este implementată în diagnosticul V522. Funcția sintetică null_pointer_001 se încadrează, de asemenea, în această categorie. 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
  • 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 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ția rand poate returna 0, care devine apoi NULL. Analizatorul PVS-Studio nu știe încă ce rand poate returna și, prin urmare, nu vede nimic suspect în acest cod.

Le-am rugat colegilor să-i învețe pe analizor să înțeleagă mai bine ce este funcția 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 rand nu evaluează de fapt 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 returnează nu 0, ci 1400, nu va fi mai bine. Totuși, 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));

Analizatorul PVS-Studio a găsit această eroare în codul compilatorului GCC. Aceleași șiruri sunt comparate de două ori.

Se pare că există teste pentru găsirea codului exotic cu rand, dar nu și pentru greșelile clasice de scriere.

Sugerez tuturor să instaleze și să încerce cel mai puternic analizor de cod PVS-Studio.

  • O bază de date cu erori reale găsite folosind PVS-Studio în proiecte open-source.
  • Mituri despre analiza statică. Mitul numărul cinci: puteți scrie un mic program pentru a evalua un instrument.

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, folosind un 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 au funcționat, în opinia sa, instrumentele Cppcheck și PVS-Studio la analiza proiectului itc-benchmarks 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ă: baza lor de testare este o porcărie. 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, în cele din urmă, m-a dezechilibrat.

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 sunt 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ă există un motiv pentru „indicatorul nul”.

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
  • 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 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 nu prea evalueaza 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 adevăratele probleme ale programării. 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

Probabil că am auzit despre un anume " Evaluare AnTuTu" Vestea că un alt record în acest rating bătuți de un produs nou lansat recent - sunt publicate destul de des. Aproape fiecare revizuire pentru a determina performanța dispozitivului, în plus față de jocuri și teste software, se folosește același AnTuTu.

Din păcate, nu toți utilizatorii știu care este ratingul AnTuTu, de ce este necesar și ce înseamnă datele din tabelele sale. Între timp, aceste informații sunt foarte utile și vă pot ajuta ajutor real atunci când alegeți un dispozitiv nou. Care este ratingul AnTuTu, cum se folosește și ce spun rezultatele testelor - vă vor spune experții KNOW-HOW, să mergem!

În primul rând, să vedem ce sunt „testele sintetice” și pentru ce sunt necesare. Aplicații similare reprezenta programe de testare. Le puteți descărca complet gratuit în magazinele de aplicații de marcă pentru cele mai populare sisteme de operare mobile - Android și iOS.

În timpul testării, „sinteticele” dă sarcina maxima pe hardware-ul dispozitivului, simulând cele mai severe scenarii de operare ale dispozitivului. O sarcină similară este rareori atinsă chiar și atunci când rulați simultan mai multe aplicații și jocuri complexe grafic. Prin urmare, în timpul unor astfel de teste, dispozitivul funcționează la limita capacităților sale și arată nivelul real de performanță.

Rezultatele testului sunt afișate în puncte; performanță mai bună dispozitiv specific și, în consecință, cu cât este mai mare poziția sa în evaluarea generală a dispozitivelor.

Punctele sunt grozave, dar apare destul de mult întrebare logică– cum puteți determina performanța aproximativă a unui dispozitiv în funcție de numărul acestora?

De fapt, totul este foarte simplu - doar uită-te la liniile de sus rating. Dispozitivele emblematice, liderii de necontestat în performanță, își ocupă ferm pozițiile acolo. Da, ratingul este actualizat regulat, rezultatele se îmbunătățesc, dar acest lucru nu vă împiedică să vă concentrați asupra numerelor indicate.

Desigur, cu cât performanța unui dispozitiv este mai bună, cu atât costul acestuia este mai mare, nu degeaba soluțiile emblematice ocupă TOP 10 al ratingului. Există însă și alte categorii de dispozitive, inclusiv cele bugetare, care oferă performanțe optime pentru aproape orice sarcină.

În mod convențional, putem distinge mai multe categorii pe baza rezultatelor testării, exprimate în intervalele de scor AnTuTu, care sunt prezentate în tabelul de mai jos.

Tabel rezumat al scorurilor și performanței AnTuTu

Rezumând

Testarea sintetică și evaluarea dispozitivelor AnTuTu este simplă și foarte instrumente convenabile, care vă permit să determinați performanța și capacitățile reale dispozitiv specific. Aceste date vor fi foarte utile în procesul de alegere a unui nou smartphone sau tabletă.

Să presupunem că alegi între două opțiuni - un smartphone este mai scump, celălalt este mai ieftin, dar performanță model specific este primul pentru tine. ÎN în acest caz, uitați-vă doar la evaluare pentru a înțelege ce dispozitiv are mai mult performante ridicate si satisface nevoile dumneavoastra.

Pe lângă AnTuTu, există și alte teste sintetice pentru a verifica capacitățile gadgeturilor. Dar AnTuTu este cea mai populară opțiune dintre programe similare, datorită simplității, versatilității, accesibilității și baza de date uriasa datele utilizatorilor, pe baza cărora tabelele de rating sunt ajustate în mod regulat. Prin urmare, dacă trebuie să cunoașteți performanța reală a dispozitivului - sintetic Testul AnTuTu va deveni cea mai buna alegere pentru a verifica capacitățile dispozitivului.

Ți-a plăcut?
Spune-le prietenilor tăi!

Metodologia de testare

Setări AMD Controlul catalizatorului Centru
Antialiasing Utilizați setările aplicației
Filtrare anizotropă Utilizați setările aplicației
Teselație Utilizați setările aplicației
Catalyst A.I., Texture Filtering Quality Calitate, activați optimizarea formatului de suprafață
Nivel de detaliu Mipmap Calitate
Așteptați V-Sync Dezactivat, cu excepția cazului în care aplicația specifică
Modul Anti-Aliasing Multi-probă AA
Setări Direct3D, Activați Instanțarea Geomery Pe
Triplu tampon Oprit
Setări Control NVIDIA Panou
Ocluzie ambientală Oprit
Filtrare anizotropă Controlat de aplicație
Antialiasing - Corecție gamma Pe
Antialiasing - Mod Controlat de aplicație
Antialiasing - Setări Controlat de aplicație
Antialiasing - Transparență Oprit
CUDA - GPU-uri Toate
Numărul maxim de cadre pre-redate 3
Accelerare multi-display/mixte GPU Modul de performanță cu afișare multiplă
Modul de gestionare a energiei Adaptiv
Filtrarea texturii — Optimizarea probelor anizitropice Oprit
Filtrarea texturii - părtinire LOD negativă Permite
Filtrarea texturii - Calitate Calitate
Filtrarea texturii - Optimizare triliniară Pe
Optimizare threaded Auto
Triplu tamponare Oprit
Sincronizare verticală Utilizați setările aplicației 3D
Set de repere
Program API Setări Modul de testare Permisiune
3DMark 2011 DirectX 11 Profil extrem - -
3DMark DirectX 11 Test de lovire de foc (nu extrem) - -
Unigine Heaven 2 DirectX 11 DirectX 11, max. calitate, teselație în modul Extreme AF 16x, MSAA 4x 1920x1080 / 2560x1440
Crysis Warhead + Framebuffer Crysis Warhead Benchmarking Tool DirectX 10 DirectX 10, max. calitate. Frost Flythrough Demo AF 16x, MSAA 4x 1920x1080 / 2560x1440
Metro 2033 + Metro 2033 Benchmark DirectX 11 DirectX 11, max. setări, DOF, teselație, NVIDIA PhysX oprit AF 16x, MSAA 4x 1920x1080 / 2560x1440
Instrumentul de referință Crysis 2 + Adrenaline Crysis 2 DirectX 11 DirectX 11, max. calitate, texturi rezoluție înaltă. Misiune O plimbare în parc AF 16x, Post MSAA + Edge AA 1920x1080 / 2560x1440
Far Cry 3 + FRPS DirectX 11 DirectX 11, max. calitate, HDAO. Începutul misiunii Secure the Outpost AF, MSAA 4x 1920x1080 / 2560x1440
Battlefield 3 + FRPS DirectX 11 Max. calitate. Începutul misiunii Going Hunting AF 16x, MSAA 4x + FXAA 1920x1080 / 2560x1440
Crysis 3 + FRAPS DirectX 11 Max. calitate. Începutul misiunii Post Human AF 16x, MSAA 4x 1920x1080 / 2560x1440
Batman: Arkham City. Benchmark încorporat DirectX 11 Max. calitate AF, MSAA 4x 1920x1080 / 2560x1440
Confruntare DiRT. Benchmark încorporat DirectX 11 Max. calitate, Iluminare globală incl. Circuitul Shibuya, 8 mașini AF, AA 4x 1920x1080 / 2560x1440

⇡ Performanță, teste sintetice

  • Rezultatele tuturor celor patru configurații experimentale au fost neașteptat de bune.
  • O pereche de Radeon HD 7850 a reușit să depășească performanța Radeon HD 7970 GHz Edition.
  • Și chiar și tandemul HD 7790 a funcționat mai repede decât HD 7950, aproape la același nivel cu HD 7970.
  • Ambele cupluri placi video NVIDIA s-a dovedit a fi mai productiv decât rivalii de la AMD.
  • Două GTX 650 Ti BOOST sunt suficiente pentru a le bate rezultat GTX 680, iar tandemul GTX 660 a făcut față chiar și GTX 770 și se apropie de GTX 780!

  • În ceea ce privește Graphics Score, perechea Radeon HD 7790 nu este cu mult în urma singurei Radeon HD 7970 GHz Edition, lăsând în urmă versiunea de bază a acestei plăci.
  • Tandemul HD 7850 a repetat acest rezultat cu un avans mult mai mare față de ediția HD 7970 GHz.
  • Sistemul bazat pe două 650 Ti BOOST a demonstrat un avantaj slab față de o pereche de HD 7790, în ciuda dimensiunii de două ori a memoriei tampon. Dar el câștigă cu încredere GeForce GTX 680.
  • Diferența de rezultate între o pereche de GTX 660 și HD 7850 este, de asemenea, minimă, deși în favoarea GTX 660. Încă o dată, această configurație face de rușine singurul GTX 770, apropiindu-se de GTX 780.

Unigine Heaven 2 (DirectX 11)

  • Testul Unigine Heaven a adăugat noi realizări activelor sistemelor „cu două capete”. Două HD 7790 sunt nu mai puțin rapide decât o ediție HD 7970 GHz.
  • Și o pereche de HD 7850 este și mai rapidă, și mult mai rapidă, la egalitate cu GeForce GTX 770 (care depășește cardul emblematic AMD aici).
  • Plăcile video NVIDIA s-au dovedit a fi chiar mai eficiente decât concurenții de la AMD. Două GTX 650 Ti BOOST au depășit sistemul bazat pe HD 7850, precum și un singur GeForce GTX 770.
  • Tandemul GTX 660 a ocupat o poziție între GTX 770 și GTX 780.

⇡ Performanță, teste de jocuri

Crysis Warhead (DirectX 10)

  • Construcția HD 7790 a fost dezamăgită de cantitatea mică de memorie de la bord. La o rezoluție de 1920x1080 a reușit să învingă Radeon HD 7950, dar în modul 2560x1440 performanța nici măcar nu atinge nivelul GeForce GTX 670.
  • Doi gigabytes de memorie și putere de calcul GPU-ul de pe plăcile Radeon HD 7850 este suficient pentru a triumfa asupra Radeon HD 7970 GHz Edition. Acest sistem nu este departe de GeForce GTX 780.
  • Tandemul GeForce GTX 650 Ti BOOST este inferior celor două HD 7850 în modul CrossFireX. Dar asta nu îl împiedică să aibă performanțe mai bune decât un singur GTX 770.
  • GTX 660 în SLI au rezultate apropiate de cele ale Radeon HD 7850. Și, în consecință, diferă puțin de GeForce GTX 780.

Metro 2033 (DirectX 11)

  • Tandemul HD 7790 a suferit o înfrângere zdrobitoare și toate din același motiv - memorie video insuficientă. Chiar și la o rezoluție de 1920x1080, performanța combinată a două astfel de plăci video îi permite să atingă doar nivelul unui singur GeForce GTX 670. La o rezoluție de 2560x1440, frame rate nu depășește 1 FPS.
  • Un sistem bazat pe Radeon HD 7850 nu are această limitare și învinge cu ușurință o singură ediție Radeon HD 7970 GHz împreună cu o GeForce GTX 770.
  • Tandemul GeForce GTX 650 Ti BOOST este mai puternic decât ambele „cu două capete” Configurații AMD, precum și un singur Radeon HD 7970 GHz Edition și GeForce GTX 770.
  • O pereche de GTX 660-uri sunt capabile să provoace un singur GeForce GTX 780.

Crysis 2 (DirectX 11)

  • Datorită faptului că la o rezoluție de 1920x1080, rata de cadre a majorității participanților la test a atins limita de 100 FPS inerentă acestui joc, toate comentariile ulterioare se referă la teste în modul 2560x1440.
  • Aici versiunea HD 7790 este mai rapidă decât HD 7950, dar nici măcar nu atinge nivelul versiunea de bază Radeon HD 7970, ca să nu mai vorbim de HD 7970 GHz Edition.
  • Două HD 7850 sunt deja capabile să detroneze placa grafică emblematică a AMD.
  • GeForce GTX 650 Ti BOOST a obținut aproximativ același rezultat ca și HD 7850. Apropo, acesta este nivelul GeForce GTX 770.
  • Două GTX 660-uri în configurație SLI amenință încă o dată hegemonia GeForce GTX 780.

Far Cry 3 (DirectX 11)

  • Tandem-ul Radeon HD 7790 suferă din nou de RAM insuficientă. La o rezoluție de 1920x1080, performanța acestei configurații depășește nivelul Radeon HD 7950 și se apropie de nivelul HD 7970. Dar în modul 2560x1440, pe ecran este afișat un slide show.
  • Două HD 7850 sunt din nou superioare unei singure Radeon HD 7970 GHz Edition.
  • Construcția GeForce GTX 650 Ti BOOST este puțin mai rapidă decât o pereche de Radeon HD 7850. Și chiar și aceste două plăci sunt suficiente pentru a învinge un singur GeForce GTX 770.
  • Și s-a întâmplat: grupul de GeForce GTX 660 a reușit în sfârșit să învingă GeForce GTX 780.

Crysis 3 (DirectX 11)

  • În Crysis 3 avem o defecțiune complet previzibilă a tandemului Radeon HD 7790 la o rezoluție de 2560x1440 și o performanță dezamăgitoare la 1920x1080.
  • Două Radeon HD 7850 împreună au depășit încă o dată Radeon HD 7970 GHz Edition.
  • Rezultatele pentru sistemele duale bazate pe NVIDIA sunt din nou la vârf. O pereche de GeForce GTX 650 Ti BOOST a depășit GeForce GTX 770.
  • Două GeForce GTX 660 sunt aproape la fel de bune ca o singură GeForce GTX 780.

Battlefield 3 (DirectX 11)

  • Tandemul HD 7790 nu este rău pentru gaming în modul 1920x1080, unde nu este inferior Radeon HD 7970. Dar la o rezoluție de 2560x1440, performanța scade catastrofal.
  • O pereche de HD 7850 este o construcție suficient de puternică pentru a învinge atât Radeon HD 7970 GHz Edition, cât și GeForce GTX 770.
  • Același lucru este valabil și pentru sistemul bazat pe GeForce GTX 650 Ti BOOST, ale cărui rezultate sunt apropiate de rezultatele celui precedent.
  • Tandem-ul GeForce GTX 660 s-a remarcat din nou, arătând performanță la nivelul unui singur GeForce GTX 780.

Batman: Arkham City (DirectX 11)

  • În Batman: sistemele AC sunt învinse de Platforma AMD a fost predeterminat, deoarece tehnologia CrossFireX pur și simplu nu funcționează în acest joc.
  • Combinația GeForce GTX 650 Ti BOOST nu are performanțe mai slabe decât Radeon HD 7970 GHz Edition. Dar GeForce GTX 680 deține liderul în modul 1920x1080.
  • Perechea GTX 660 a atins nivelul GTX 770 la o rezoluție de 2560x1440, dar este inferioară acestuia din urmă la o rezoluție de 1920x1080.

DiRT Showdown (DirectX 11)

  • Două HD 7790 în modul 2560x1440 nu sunt inferioare modelului HD 7970, iar în modul 1920x1080 sunt comparabile cu HD 7970 GHz Edition.
  • Cu o ușoară întindere, tandemul HD 7850 poate fi considerat egal cu Ediția HD 7970 GHz la 2560x1440, iar la 1920x1080 este clar mai rapid decât o singură placă video.
  • Motorul DiRT Showdown favorizează în mod clar GPU-urile AMD, lăsând ambele configurații NVIDIA dual-GPU în spatele concurenților lor bazați pe AMD.
  • Combinația GeForce GTX 650 Ti BOOST nu poate face față nici măcar unui singur Radeon HD 7950. Dar este înaintea GeForce GTX 770.
  • Ei bine, tandemul GTX 660 este situat între HD 7950 și HD 7970 și, de asemenea, diferă puțin de GeForce GTX 780.

⇡ Consumul de energie

  • Combinația Radeon HD 7790 s-a dovedit a fi o opțiune mai economică decât singurul adaptor Radeon HD 7950, care pierde constant în fața acestuia, cu condiția ca testul să nu limiteze cantitatea de memorie video.
  • Sistemul bazat pe HD 7850 a adus și el o surpriză, s-a dovedit a fi mai puțin solicitant atât decât HD 7970, cât și HD 7970 GHz Edition. Chiar și GeForce GTX 680, care este relativ modestă în ceea ce privește consumul de energie, a arătat o putere mare.
  • Un sistem încărcat cu două GTX 650 Ti BOOST sau două GTX 660 are un consum de energie constant. Ceea ce nu este surprinzător, deoarece aceste plăci video folosesc același GPU care funcționează la aceeași frecvență. Ambele configurații putere maxima superioară plăcilor video consumatoare de energie precum Radeon HD 7970 GHz Edition, GeForce GTX 770 și GTX 780.

⇡ Concluzii

Măsurătorile practice ale performanței sistemelor cu două plăci video de clasa medie în modul SLI sau CrossFireX ne-au surprins serios. Sincer să fiu, testarea a fost concepută inițial doar ca un experiment curios, lipsit de orice semnificație practică. Și s-a dovedit că mijloacele de paralelizare a încărcăturii pe mai multe GPU-uri în timpul redării 3D sunt deja atât de șlefuite încât două plăci video de la categorie de pret pentru jucătorii cu pumnii strânși, aceștia depășesc cu ușurință un adaptor video puternic emblematic (sau recent fost).

Combinația unei perechi de Radeon HD 7790 părea cu siguranță sortită eșecului. Ei bine, ce se pot opune adaptoarelor emblematice două GPU-uri Bonaire, în care numărul total de procesoare de flux și module de textură este mai mic decât cel al HD 7970 cu cipul Tahiti XT și chiar cu un bus de memorie modest de 128 de biți? Se dovedește că două HD 7790 au suficient praf de pușcă pentru a arunca HD 7950 și a lupta în condiții egale cu HD 7970. Dar numai cu unul condiție importantă, că jocul are nevoie doar de un frame buffer modest de 1 GB (rețineți, în CrossFireX, ca și în SLI, capacitățile de memorie a două plăci video nu se adună). Pentru că, dacă nu este suficient, atunci tot avantajul de la al doilea GPU este anulat de necesitatea de a conduce date din memorie de sistem De Autobuz PCI-Express, chiar și versiunea 3.0

Adaptoarele Radeon HD 7850 sunt lipsite de un astfel de jug, deoarece, conform specificațiilor oficiale, sunt echipate cu 2048 MB de RAM. Acest volum este încă suficient pentru a juca cu cele mai multe setări hardcore la o rezoluție de 2560x1440, deși abia este suficient. Ca rezultat, în majoritatea benchmark-urilor, indiferent de rezoluție, o combinație de două HD 7850 este cel puțin echivalentă cu unul singur. Card Radeon Ediție HD 7970 GHz. Acesta nu este doar un rezultat complet neașteptat, ci și o oportunitate de a economisi bani cu adevărat. Zece mii de ruble pentru cele mai ieftine două versiuni ale HD 7850 este, vedeți, considerabil mai puțin de 14 mii pentru HD 7970 GHz Edition. În plus, în mod ciudat, tandemul consumă mai puțină energie în comparație cu un singur flagship AMD.

Rezultatele configurațiilor „dual-headed” pe platforma NVIDIA nu sunt mai puțin impresionante. Un ansamblu de două GeForce GTX 650 Ti BOOST nu este aproape niciodată inferior fostului flagship NVIDIA - GTX 680 - și ajunge adesea la nivelul GeForce GTX 770. Cu toate acestea, GTX 650 Ti BOOST se află într-o poziție mai avantajoasă decât cel mai apropiat rival al său. de la AMD - Radeon HD 7790: în ceea ce privește numărul de nuclee CUDA și unități de textură, aceasta este exact jumătate din cipul GK104 care stă la baza GTX 680 și GTX 770, magistrala de memorie este de 192 de biți, iar volumul este de 2 GB. Din nou, puteți economisi o sumă mică cumpărând două GTX 650 Ti BOOST (aproximativ 10.500 de ruble) în loc de un singur GTX 680 sau chiar mai mult un GTX 770.

Două GeForce GTX 660 în modul SLI arătau ca cele mai viabile dintre toate cele patru combinații de testare, deoarece împreună două nuclee GK106 cu unități de calcul complet funcționale au o marjă de performanță teoretică bună în comparație cu GTX 680. Dar din moment ce combinațiile și mai slabe au concurat serios cu plăcile video individuale cea mai înaltă categorie, nu este de mirare că tandemul GTX 660 este constant înaintea GeForce GTX 770 și a ajuns din urmă cu GeForce GTX 780 de mai multe ori. Din păcate, înlocuirea unui adaptor puternic cu două GTX 660 va trebui să sacrifice eficiența energetică, deoarece două astfel de modele. plăcile video consumă mai mult. Și, prin urmare, se încălzesc mai mult și probabil fac mai mult zgomot.

Pe de o parte, pentru rezultate atât de impresionante trebuie să le mulțumim programatorilor care ascuți neobosit și clarifică driverele GPU și motoare de joc pentru SLI și CrossFireX. Pe de altă parte, un factor în succesul sistemelor „dual-headed” ar putea fi o caracteristică pur hardware asociată cu magistralele de memorie. Deoarece două GPU-uri funcționează în tandem cu copii ale acelorași date, ele pot fi asemănate cu un procesor cu un număr de unități de calcul aproximativ corespunzător cu cel al cipurilor mai mari de la același producător. Dar dacă GPU-ul Tahiti are o magistrală de memorie de 384 de biți, atunci cele două GPU-uri Pitcairn au deja 512 biți combinați. Sau luați GK104 de la NVIDIA. Are o magistrală de 256 de biți, iar două GK106 împreună oferă 384 de biți. Cu toate acestea, autorul articolului nu se angajează să susțină că o astfel de reprezentare este de fapt corectă din punctul de vedere al arhitecturii SLI sau CrossFireX.

Revenind la partea practică a problemei, încă nu îndrăznim să recomandăm două plăci video de buget ca înlocuitor universal pentru adaptoarele video din categoria „entuziaști”. Utilizarea SLI sau CrossFireX încă nu garantează o scalare egală a performanței în toate jocurile. Aruncă o privire la diagrama Batman: Arkham City, unde CrossFireX nu funcționează nici din motive tehnologice, nici politice. Cu siguranță există exemple opuse, când SLI nu mai funcționează. În plus, există probleme neplăcute, specific CrossFireX (variație mare a ratei de cadre și ruperea imaginii), cu care AMD încă se luptă. Dar dacă doriți să vă asumați puțin risc, încercați o combinație neobișnuită de hardware și economisiți câteva mii de ruble pe parcurs, apoi continuați. Și, bineînțeles, cumpărarea unui al doilea adaptor de buget în plus față de cel vechi deschide perspective tentante pentru jucătorii care au grijă de buget să facă upgrade cu cheltuieli mici.

  • Serghei Savenkov

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