Pytania otagowane jako assembly

Pytania dotyczące programowania w asemblerze (ASM). UPEWNIJ SIĘ TAKŻE TAGOWAĆ procesor i / lub zestaw instrukcji, z którego korzystasz, a także asembler. OSTRZEŻENIE: W przypadku zestawów .NET użyj zamiast tego znacznika [.net-assembly]. W przypadku Java ASM użyj zamiast tego tagu [java-bytecode-asm].

12
Dlaczego GCC nie optymalizuje * a * a * a * a * a do (a * a * a) * (a * a * a)?
Robię optymalizację numeryczną w aplikacji naukowej. Zauważyłem tylko, że GCC zoptymalizuje wywołanie pow(a,2), kompilując je a*a, ale wywołanie pow(a,6)nie jest zoptymalizowane i faktycznie wywoła funkcję biblioteki pow, co znacznie spowalnia działanie. (Natomiast kompilator Intel C ++ , wykonywalny icc, wyeliminuje wywołanie biblioteki pow(a,6)). Jestem ciekaw co o to, że kiedy …

14
Czy <szybciej niż <=?
Jest if( a &lt; 901 )szybszy niż if( a &lt;= 900 ). Niezupełnie jak w tym prostym przykładzie, ale występują niewielkie zmiany wydajności w złożonym kodzie pętli. Podejrzewam, że ma to coś wspólnego z wygenerowanym kodem maszynowym, na wypadek, gdyby było to w ogóle prawdą.

10
Zastąpienie 32-bitowego licznika pętli 64-bitowym wprowadza szalone odchylenia wydajności od _mm_popcnt_u64 na procesorach Intel
Szukałem najszybszego sposobu na popcountduże tablice danych. Spotkałem bardzo dziwny efekt: zmiana zmiennej pętli z unsignedna uint64_tsprawiła, że ​​wydajność spadła o 50% na moim komputerze. Benchmark #include &lt;iostream&gt; #include &lt;chrono&gt; #include &lt;x86intrin.h&gt; int main(int argc, char* argv[]) { using namespace std; if (argc != 2) { cerr &lt;&lt; "usage: array_size …



4
Jak osiągnąć teoretyczne maksimum 4 FLOP na cykl?
Jak teoretyczną szczytową wydajność 4 operacji zmiennoprzecinkowych (podwójna precyzja) na cykl można uzyskać na nowoczesnym procesorze Intel x86-64? O ile rozumiem, potrzeba trzech cykli dla SSE add i pięciu cykli na mulukończenie większości współczesnych procesorów Intela (patrz na przykład „Tabele instrukcji” Agner Fog ). Ze względu na potokowanie można uzyskać …

30
Kiedy montaż jest szybszy niż C?
Jednym z podanych powodów znajomości asemblera jest to, że czasami można go użyć do napisania kodu, który będzie bardziej wydajny niż pisanie tego kodu w języku wyższego poziomu, w szczególności C. Jednak słyszałem też wielokrotnie, że chociaż nie jest to całkowicie fałszywe, przypadki, w których asembler może być rzeczywiście używany …
475 c  performance  assembly 


4
Dlaczego Java z włączonymi ciągłymi intami wydaje się działać szybciej z dodanymi przypadkami?
Pracuję nad kodem Java, który musi być wysoce zoptymalizowany, ponieważ będzie działał w gorących funkcjach, które są wywoływane w wielu punktach mojej logiki programu głównego. Część tego kodu polega na pomnożeniu doublezmiennych przez 10podniesione do dowolnych nieujemnych int exponent. Jeden szybki sposób (edit: ale nie najszybsze, patrz Aktualizacja 2 poniżej), …

10
Używasz GCC do stworzenia czytelnego zestawu?
Zastanawiałem się, jak użyć GCC na moim źródłowym pliku C do zrzucenia mnemonicznej wersji kodu maszynowego, aby zobaczyć, w jaki sposób mój kod jest kompilowany. Możesz to zrobić w Javie, ale nie byłem w stanie znaleźć sposobu w GCC. Próbuję ponownie napisać metodę C w asemblerze i zobaczenie, jak działa …
256 c  gcc  assembly 

3
Co to jest retpolina i jak działa?
Aby zminimalizować ryzyko ujawnienia pamięci jądra lub pamięci międzyprocesowej ( atak Spectre ), jądro Linux 1 zostanie skompilowane z nową opcją , -mindirect-branch=thunk-externwprowadzoną w gcccelu wykonywania wywołań pośrednich za pośrednictwem tak zwanej retpoliny . To wydaje się być nowo wynalezionym terminem, ponieważ wyszukiwarka Google pojawia się tylko bardzo niedawno (ogólnie …

10
Jak wygląda język asemblera?
Dawno, dawno temu, aby na przykład napisać asembler x86, miałbyś instrukcję mówiącą: „załaduj rejestr EDX wartością 5”, „zwiększ rejestr EDX” itp. W nowoczesnych procesorach, które mają 4 rdzenie (lub nawet więcej), na poziomie kodu maszynowego wygląda to tak, jakby były 4 oddzielne procesory (tj. Czy są tylko 4 różne rejestry …
243 assembly  x86  cpu  multicore  smp 

12
Czy „zmiana” jest szybsza niż „jeśli”?
Czy switchwyciąg jest rzeczywiście szybszy niż ifwyciąg? Uruchomiłem poniższy kod na kompilatorze x64 C ++ programu Visual Studio 2010 z /Oxflagą: #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;time.h&gt; #define MAX_COUNT (1 &lt;&lt; 29) size_t counter = 0; size_t testSwitch() { clock_t start = clock(); size_t i; for (i = 0; i …



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.