AMD:n päivitys GCC 9 -kääntäjälle paljasti ensimmäiset uudet käskyt Zen 2:ssa

Kaotik

Banhammer
Ylläpidon jäsen
Liittynyt
14.10.2016
Viestejä
21 583
GCC 9 -kääntäjän (GNU Compiler Collection) ominaisuudet tullaan lyömään lukkoon marraskuun loppuun mennessä ja nyt AMD on aloittanut omien päivitystensä lähettämisen hyväksyttäviksi mukaan.
Ensimmäisen päivityksen mukana kääntäjään lisätään perustason tuki Zen 2 -arkkitehtuurille lähinnä Zen 1:n tukea hyödyntäen. Phoronix on kuitenkin löytänyt joukosta myös kolme täysin uutta tuettua käskyä:
  • Cache Line Write Back (CLWB)
  • Read Processor ID (RDPID)
  • Write Back and Do Not Invalidate Cache (WBNOINVD)
Lähde: Phoronix
 
Liittynyt
12.12.2016
Viestejä
3 930
Voisi mainita kaikkien kyseisten käskyjen olevan myös Intelin prosessorien tukemia.
 

Kaotik

Banhammer
Ylläpidon jäsen
Liittynyt
14.10.2016
Viestejä
21 583
Voisi mainita kaikkien kyseisten käskyjen olevan myös Intelin prosessorien tukemia.
Varmasti olisi jos tuon olisi tiennyt etukäteen tai jos tämä olisi ollut etusivun uutinen mihin tehdään vähän eri tavalla taustatyötä kuin lyhyisiin.

edit:
Jos en ihan väärin vilkaissut niin WBNOINVD ei ole tuettuna Intelillä vielä vaan tulee vasta Icelaken mukana
 

rlame

Tukijäsen
Liittynyt
30.10.2016
Viestejä
624
Nostaako mikään näistä käskyistä IPC:tä vrt ryzen+?
 
Liittynyt
02.01.2017
Viestejä
1 566
Kertokaas asiasta vihkimättömälle mitä tarkoittaa käsky? Onko se tapa jolla prosessori käskyttää hexoja liikkumaan?
 

TheMeII

Übertaktungspotenzial
S Y N T H W A V E
Liittynyt
13.11.2016
Viestejä
7 009
Nostaako mikään näistä käskyistä IPC:tä vrt ryzen+?
Tällä hetkellä yks iso hidaste on joissakin käskyissä ryxzenillä menevä 10 kertainen aika intelin toteutukseen verrattuna. Noita jos on parannettu ei niitä muutoksia kääntäjältä saa selville. Yksikään käsky ei suoraan nosta tai laske IPC:tä. Sen toteutus ja miten sitä sovelluksissa käytetään on vaikuttavaa.
 
Liittynyt
21.05.2017
Viestejä
9
Kertokaas asiasta vihkimättömälle mitä tarkoittaa käsky? Onko se tapa jolla prosessori käskyttää hexoja liikkumaan?
Tämän kansantajuistaminen lienee haastava tehtävä asiantuntijallekin, mutta kun en sellainen ole, niin voin huoletta yrittää. Käsky on yksittäinen operaatio, siis pienin prosessorille annettava komento, jonka prosessori suorittaa yhdessä konejaksossa. Kunkin käskyn suorituksen aikana prosessori käy läpi käskysyklin Instruction cycle - Wikipedia . Yhden käskysyklin suoritukseen kuluu useampi kellojakso, kun ensin käsky ja mahdollisesti sen toinen operandi noudetaan keskusmuistista, käsky suoritetaan, ja tulos talletetaan rekisteriin.

Samoin kuin materia koostuu atomeista, niin tietokoneiden suorituksen voi ajatella koostuvan käskyistä, loputtoman pitkinä jonoina peräkkäisiä käskyjä, joista koostuu tämäkin käyttöliittymä, jolla tätä viestiä luemme. Käskyn ovat ohjelmien sovelluslogiikan pienempiä mahdollisia rakennuspalikoita.
 

mRkukov

Hrrrr...
Liittynyt
17.10.2016
Viestejä
7 722
Tällä hetkellä yks iso hidaste on joissakin käskyissä ryxzenillä menevä 10 kertainen aika intelin toteutukseen verrattuna. Noita jos on parannettu ei niitä muutoksia kääntäjältä saa selville. Yksikään käsky ei suoraan nosta tai laske IPC:tä. Sen toteutus ja miten sitä sovelluksissa käytetään on vaikuttavaa.
Sanoisin että Intel varmasti panostaa kaikkiin kääntäjiin varsinkin sellaisten käskyjen osalta, joita AMD prossut ei tue. Eli Optimoidaan kääntäjät omalle koodille niin hyvin kuin voidaan, varsinkin jos kilpailijan tuote näyttää silloin huonommalta.

En siis sano etteikö optimointeja pitäisi tehdä, mutta voi olla varma että Intelillä on kova joukko optimoimassa juuri niitä asioita joissa se on kilpailijaa parempi. Eli nyt kun Zen 2 tukeekin samoja käskyjä paremmin niin testiohjelmien "IPC" paranee verrattuna vanhaan. Yleensähän IPC:llä tarkoitetaan nopeutta samoilla kelloilla, eli jos kellojaksoja saadaan käytettyä tehokkaammin niin kyllä se IPC silloin paranee.

Onkohan näillä käskyillä tekemistä sen kanssa että Zen 2 on spekuloitu saavan jopa (up to) 13% IPC boostin? Toki normaaleissa ohjelmissa/peleissä pienempi vaikutus, mutta silti.
 
Liittynyt
14.12.2016
Viestejä
2 768
Tuo edellä mainittu on totta. Intelillä on suhteita ohjelmien kehittäjiin ja varmasti jokainen koodi optimoidaan Intelin prosessoreille. Eli periaatteessa uudet käskyt voivat nopeuttaa toimintaa niissä erityistapauksissa, joissa niitä voi hyödyntää, mutta saman käskyn/toiminnon voi tehdä niin eri tavoin että niiden paljous ei kerro kovin paljon IPC:stä.
Mutta jos AMD onnistuu tuossa 13%, joka on paljon parempi kuin itse odottelin ensimmäisen Ryzenin jälkeen, niin hieno homma. Kilpailu tasoittuu hetkeksi siltäkin osin. Toisaalta AMD on toisessa iteraatiossaan yleensä saanut potkua lisää esim Phenom vs Phenom2, mutta oletin että 2xxx sarja jo melkoisesti paransi IPC:tä ja Ryzen2 antaisi vain prosessihyödyn, mutta ovat siis optimoineet myös lisää, mistä pitää nostaa hattua!
 
Liittynyt
12.12.2016
Viestejä
3 930
mutta oletin että 2xxx sarja jo melkoisesti paransi IPC:tä ja Ryzen2 antaisi vain prosessihyödyn, mutta ovat siis optimoineet myös lisää, mistä pitää nostaa hattua!
Öh. Ryzen 2xxx-sarja ei arkkitehtuurin puolesta parantanut IPC:ta yhtäkään prosenttia ja taas Zen2:n pitikin tulla parannuksia. Minua ei huhuttu 13% parunnus yllätä, enkä suuremmastakaan parannuksesta yllättyisi koska (lukekaa väittelyketjusta jos kiinnostaa, turha keskustella enempää tässä vaiheessa).
 
Liittynyt
17.10.2016
Viestejä
162
Ne prosessorin käskyt, ne on yksinkertaisia. Niitä kutsutaan x86 tai x86/64 käskykannaksi ja muilla prosessoriarkkitehtuureilla joksikin muuksi kuten ARM käskykanta.
Tähän tapaan pseudokoodina

load x,y
store x,y
add x,y
sub x,y
multiply x,y
divide x,y
bitshift x,y
and x,y
or x,y
not x,y
test x,y
clearbit x,y
testbit x,y
compare x,y
branch x,y
jump x,y
jne.

jossa x ja y on operandeja, joko luku tai muistiosoite, mihin kirjoitetaan tai luetaan dataa.

Tämä on siis konekieltä, eli assemblya (symbolinen konekieli). Kaikki muut kielet, joka ikinen, käännetään ensin konekieliseksi,
joko valmiiksi tai vasta ajon aikana. Prosessori suorittaa näitä konekielisiä käskyjä, tosin x86 prossut jakaa ne sisäisesti vielä pienempiin
käskyihin, joita kutsutaan mikro-operaatioksi (micro-op), mutta niistä ei tarvitse tietää mitään, koska niitä ei koskaan itse pääse ohjelmoimaan suoraan.

Kiitos ja hyvää perjantain jatkoa :)
 

TheMeII

Übertaktungspotenzial
S Y N T H W A V E
Liittynyt
13.11.2016
Viestejä
7 009
Ne prosessorin käskyt, ne on yksinkertaisia. Niitä kutsutaan x86 tai x86/64 käskykannaksi ja muilla prosessoriarkkitehtuureilla joksikin muuksi kuten ARM käskykanta.
Tähän tapaan pseudokoodina

load x,y
store x,y
add x,y
sub x,y
multiply x,y
divide x,y
bitshift x,y
and x,y
or x,y
not x,y
test x,y
clearbit x,y
testbit x,y
compare x,y
branch x,y
jump x,y
jne.

jossa x ja y on operandeja, joko luku tai muistiosoite, mihin kirjoitetaan tai luetaan dataa.

Tämä on siis konekieltä, eli assemblya (symbolinen konekieli). Kaikki muut kielet, joka ikinen, käännetään ensin konekieliseksi,
joko valmiiksi tai vasta ajon aikana. Prosessori suorittaa näitä konekielisiä käskyjä, tosin x86 prossut jakaa ne sisäisesti vielä pienempiin
käskyihin, joita kutsutaan mikro-operaatioksi (micro-op), mutta niistä ei tarvitse tietää mitään, koska niitä ei koskaan itse pääse ohjelmoimaan suoraan.

Kiitos ja hyvää perjantain jatkoa :)
lisäksi niissä voi olla vaikka negate x tai negate x,y joista toinen ottaa x lyö miinusmerkin eteen ja tallentaa x:ään. toiinen taas ottaa x:n negatoi sen mutta tallentaa y:hyn. sitten erikseen esim multiply x,y ja multiply x,y,z näissä ero on se että toinen laskee x=x*y ja toinen z=x*y. Kaikki on sekavaa.
 
Liittynyt
21.12.2016
Viestejä
103
lisäksi niissä voi olla vaikka negate x tai negate x,y joista toinen ottaa x lyö miinusmerkin eteen ja tallentaa x:ään. toiinen taas ottaa x:n negatoi sen mutta tallentaa y:hyn. sitten erikseen esim multiply x,y ja multiply x,y,z näissä ero on se että toinen laskee x=x*y ja toinen z=x*y. Kaikki on sekavaa.
Ei muuten lyö, vaan negaatiossa tyypillisesti rauta (kahden komplementti) invertoi luvun bitit ja laskee +1 ( (luku^0xff)+1 ). Liukuluvuissa sitten on etumerkki, mitä voi flippailla miettimättä muuta lukuesitystä.

Koodi:
#include <stdio.h>

int main(void) {

    char luku  = 9;
    char luku2 = (luku^0xff)+1;

    printf("luku:     %2d\n", luku);
    printf("negaatio: %2d\n", luku2);

    return 0;
}
$ gcc testi.c -o testi
Koodi:
$ ./testi
luku:      9
negaatio: -9
$ objdump -d -M intel testi |grep " <main>:" -A 10
Koodi:
0000000000001165 <main>:
    1165:    55                       push   rbp
    1166:    48 89 e5                 mov    rbp,rsp
    1169:    48 83 ec 10              sub    rsp,0x10
    116d:    c6 45 fe 09              mov    BYTE PTR [rbp-0x2],0x9
    1171:    0f b6 45 fe              movzx  eax,BYTE PTR [rbp-0x2]
    1175:    f7 d8                    neg    eax
    1177:    88 45 ff                 mov    BYTE PTR [rbp-0x1],al
    117a:    0f be 45 fe              movsx  eax,BYTE PTR [rbp-0x2]
    117e:    89 c6                    mov    esi,eax
    1180:    48 8d 3d 7d 0e 00 00     lea    rdi,[rip+0xe7d]        # 2004 <_IO_stdin_used+0x4>
Huomattavaa on että jopa ilman optimointia gcc muutti tuon käyttämään neg-käskyä.
 
Toggle Sidebar

Statistiikka

Viestiketjut
240 390
Viestejä
4 200 284
Jäsenet
70 894
Uusin jäsen
JapPro

Hinta.fi

Ylös Bottom