Articles of assembly

Come: pow (reale, reale) in x86

Sto cercando l’implementazione di pow(real, real) nell’assemblaggio x86. Inoltre mi piacerebbe capire come funziona l’algoritmo.

Algoritmo per trovare la più piccola potenza di due che è maggiore o uguale a un valore dato

Devo trovare la più piccola potenza di due che sia maggiore o uguale a un dato valore. Finora, ho questo: int value = 3221; // 3221 is just an example, could be any number int result = 1; while (result < value) result <<= 1; Funziona bene, ma sembra un po ‘ingenuo. C’è un algoritmo […]

Compilazione C # per 32/64 bit o per qualsiasi CPU?

Possibile duplicato: Visual Studio “Qualsiasi CPU” target Ho notato che durante la compilazione del codice C # in VS, ci sono tipicamente opzioni per la compilazione per sistemi a 32/64 bit, e ce n’è anche una per la compilazione per ogni CPU. Qual è la differenza tra le due opzioni? La scelta di una CPU […]

Vettorizzazione con buffer non allineati: utilizzando VMASKMOVPS: generazione di una maschera da un conteggio disallineamento? O non usare affatto quell’Inn

gcc 5.3 con -O3 -mavx -mtune=haswell per x86-64 rende il codice sorprendentemente ingombrante per gestire input potenzialmente disallineati per codice come: // convenient simple example of compiler input // I’m not actually interested in this for any real program void floatmul(float *a) { for (int i=0; i<1024 ; i++) a[i] *= 2; } clang utilizza […]

L’aggiunta di un’assegnazione ridondante accelera il codice quando viene compilato senza ottimizzazione

Trovo un fenomeno interessante: #include #include int main() { int p, q; clock_t s,e; s=clock(); for(int i = 1; i < 1000; i++){ for(int j = 1; j < 1000; j++){ for(int k = 1; k < 1000; k++){ p = i + j * k; q = p; //Removing this line can increase running […]

Differenza di prestazioni tra MSVC e GCC per codice di moltiplicazione della matrice altamente ottimizzato

Vedo una grande differenza di prestazioni tra codice compilato in MSVC (su Windows) e GCC (su Linux) per un sistema Ivy Bridge. Il codice fa una moltiplicazione densa della matrice. Sto ottenendo il 70% dei picchi di punta con GCC e solo il 50% con MSVC. Penso di aver isolato la differenza su come entrambi […]

Ottenimento della larghezza di banda massima su Haswell nella cache L1: ottenendo solo il 62%

Sto tentando di ottenere la larghezza di banda completa nella cache L1 per la seguente funzione sui processori Intel float triad(float *x, float *y, float *z, const int n) { float k = 3.14159f; for(int i=0; i<n; i++) { z[i] = x[i] + k*y[i]; } } Questa è la funzione della triade da STREAM . […]

In che modo Microsoft ha creato assiemi con riferimenti circolari?

Nel BCL .NET ci sono riferimenti circolari tra: System.dll e System.Xml.dll System.dll e System.Configuration.dll System.Xml.dll e System.Configuration.dll Ecco uno screenshot di .NET Reflector che mostra cosa intendo: Come Microsoft ha creato queste assemblee è un mistero per me. È necessario un processo di compilazione speciale per consentire questo? Immagino che qualcosa di interessante stia succedendo […]

Qual è lo scopo di XORare un registro con se stesso?

xor eax, eax sarà sempre impostato a zero, giusto? Quindi, perché MSVC ++ a volte lo inserisce nel codice del mio eseguibile? E ‘più efficiente quel mov eax, 0 ? 012B1002 in al,dx 012B1003 push ecx int i = 5; 012B1004 mov dword ptr [i],5 return 0; 012B100B xor eax,eax Inoltre, cosa significa fare in […]

Assembly Language (x86): come creare un loop per calcolare la sequenza di Fibonacci

Sto programmando il linguaggio assembly (x86) in MASM utilizzando Visual Studio 2013 Ultimate. Sto cercando di usare una matrice per calcolare una sequenza di Fibonacci per n elementi usando un array. In altre parole, sto cercando di passare a un elemento dell’array, ottenere i due elementi prima di esso, aggiungerli e archiviare il risultato in […]