C++ i x64 ASM

1

C++ i x64 ASM

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

Postavio sam temu ovde jer je reč o C++-u, tj. unutar njega koristim asm pa me zanima da li se program brže obrađuje, tipa, kad imam promenljivu pisanu u Asembleru (dakle kod već ima promenljivu u Asembleru, samo ispis je u C++ jeziku). Na nešto ovako sam mislio:

int dobijVrednost() { _asm {          mov eax, 39          } } int main() { std::cout << "Vrednost je: " << dobijVrednost() << std::endl; _getch(); return 0; }

U suštini, da li se isplati koristiti Asembler unutar C++ radi povećanja brzine obrađivanja programa od strane procesora ili brzina i dalje ostaje skoro ista?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12488
  • Gde živiš: Južni pol

Citat: U suštini, da li se isplati koristiti Asembler unutar C++ radi povećanja brzine obrađivanja programa od strane procesora ili brzina i dalje ostaje skoro ista?

Nećeš "ubrzati" program na ovakvim sitnicama. Čak i kad su u pitanju ozbiljnije optimizacije, treba imati na umu da moderni kompajleri već dosta optmizuju kod i to obično pametnije nego što bi to najveći deo ljudi mogao ručno. Da bi se postiglo neko ubrzanje je zaista potrebno poznavati svoje razvojno okruženje i znati tačno šta želiš da postigneš. Baci pogled ovde za koju informaciju više:
http://www.fefe.de/source-code-optimization.pdf

Povećanje brzine obrađivanja programa na modernim više-jezgarnim procesorima možeš postići i boljom optimizacijom za višenitni rad i paralelno izvršavanje procesa. A u poslednje vreme je popularna i "zloupotreba" GPU u te svrhe.



offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

Ovaj lik objašnjava kako podesiti Visual Studio 2010 za x64 asembler, ali ja imam Visual Studio 2012, a SDK koliko sam pročitao je kompatibilan sa VS2005-VS2010.

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Tebi SDK ne treba jer ga već imaš. Ostatak tutorijala bi trebalo da propratiš bez problema.

Da potvrdim sve ono što je bocke rekao, ovakvim pristuom nećeš dobiti nikakvo merljivo ubrzanje, izgubićeš tonu vremena da napraviš da sve radi kako želiš, a nakon toga još više vremena da održavaš taj kod.
Korišćenje asemblera danas za većinu stvari ne donosi nikakvo ubrzanje. Uz to, da bi tvoj program bio kompatibilan sa što većim brojem računara, morao bi da pišeš asemblerski kod za svaku porodicu procesora, pošto se te napredne stvari koje donose ubraznje ne koriste na isti način na različitim procesorima.

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

Srki_82 ::Korišćenje asemblera danas za većinu stvari ne donosi nikakvo ubrzanje.

Kako ne donosi kada je asembler najbliži procesoru (posle mašinskog koda) Shocked Ne mislim ja da distribuiram taj program dalje, samo testiram Smile

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Nije stvar do jezika nego do programera. Niko ti ne brani da pises asm, samo neces daleko dogurati (no offence) i potrositi vreme uzalud.

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

@morando znam to, ne nameravam da programiram u asm , jedva nalazim vremena za C++, kamoli da učim i asm Bebee Dol

BTW, hvala na odgovoru Ziveli

offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12488
  • Gde živiš: Južni pol

Napisano: 10 Sep 2013 20:48

Generalno, postoje slučajevi kad asm može koristiti. Ali obično se ASM kod kombinuje sa C/C++. Naravno, mogu se pisati i čiste ASM aplikacije, ali kao što je srki napisao kod će biti ograničen na jednu platformu. Ovo se može delimično rešiti korišćenjem makroa, ali i dalje postoje ograničenja.

Kako to kombinovanje ide u praksi? Obično se uz C/C++ implementaciju nekog algoritma (recimo za pretragu) ponude i platformski specifična i "optimizovana" varijanta u ASM (ali videti linkovani PDF u mom prethodnom postu). Problem je u tom što postoje različiti ASM dijalekti, nezavisno od same platforme. Na primer kod za GAS (GNU), TASM (Borland/Embarcadero), MASM (Microsoft), NASM, i recimo FASM, se razlikuje. Naravno tu je i AT&T vs. Intel sintaksa, ali i činjenica da neretko postoje razlike i između različitih implementacije Intel sintakse. Tako da je pored platformskog ograničenja, asm kod ograničen i na specifičan (ili ređe: sintaksno kompatibilan) asembler.

Dakle ASM ima svoje mesto. Ali zaista moraš znati pro et contra (tj. šta time dobijaš). Obično se ASM koristi za ubrzavanje pojedinih numeričkih operacija ili procesorski intezivnih operacija. Ali je optimizacija ograničena programerovim poznavanjem ciljne platforme i programskog okruženja.

Dopuna: 10 Sep 2013 20:53

A kad smo već kod optimizacije, mogle bi postojati razlike između pojedinih AMD i Intel instrukcija koje se mogu koristiti za optimizaciju (recimo: tradicionalno 3dnow vs sse). Uz to verovatno postoje i specifičnosti mobilnih x86_64 platformi.

offline
  • Programer
  • Pridružio: 23 Maj 2012
  • Poruke: 4575

Bocke, hvala na detaljnom odgovoru, inače sam nalazio informaciju da se Asembler koristi i za aplikacije u kojima je vreme kritičan faktor, za kontrolu hardvera, operativne sisteme, čak i za neke brauzere poput Google Chrome-a naprimer, naravno sve je to minimalno pretpostavljam jer se inače te stvari nebi mogle pokretati na različitim platformama Smile

offline
  • bocke  Male
  • Moderator foruma
  • Glavni moderator Linux foruma
  • Veliki Pingvin
  • Guru
  • Pridružio: 16 Dec 2005
  • Poruke: 12488
  • Gde živiš: Južni pol

Jes, mislim da neka komponenta Google Chromea koristi asm. Možda webkit i JS engine. Ali u kom vidu ne znam. Nisam to istraživao, niti me je nešto posebno interesovalo. Smile

Mada je webkit dostupan i za mobilne platforme (ie: simbian ili bada) tako da mi je čudno da postoje asm optimizacije. Možda samo na x86* platformama?

Ne znam. Možda je neko drugi upućeniji. Wink

Ko je trenutno na forumu
 

Ukupno su 1379 korisnika na forumu :: 56 registrovanih, 11 sakrivenih i 1312 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, Aleksandar Tomić, amstel, Atomski čoban, Ben Roj, bladesu, bojcistv, bokisha253, Boris90, brundo65, ccoogg123, cenejac111, comi_pfc, Doca, Dorcolac, dozorni, dule10savic, Faki-Valjevo, GandorCC, gomago, hatman, hologram, ikan, JimmyNapoli, Joco Skljoco, Karla, kokodakalo, Krusarac, Kubovac, kunktator, kybonacci, Litostroton, Luka Blažević, mercedesamg, mile23, MILICAT, nemkea71, oldtimer, panzerwaffe, raptorsi, rasok, rovac, ruma, ruso, ser.hill, solic, SR-3m, Srle993, Stoilkovic, t84dar, vathra, virked, vlad4, Vladko, Wrangler, Zimbabwe