Articles of x86

Come eseguire l’inverso di _mm256_movemask_epi8 (VPMOVMSKB)?

L’intrinseco: int mask = _mm256_movemask_epi8(__m256i s1) crea una maschera, con i suoi 32 bit corrispondenti al bit più significativo di ogni byte di s1 . Dopo aver manipolato la maschera usando operazioni di bit ( BMI2 per esempio) vorrei eseguire l’inverso di _mm256_movemask_epi8 , cioè creare un vettore __m256i con il bit più significativo di […]

Modifica le impostazioni della CPU di destinazione in Visual Studio 2010 Express

Desidero modificare le impostazioni della CPU di destinazione da “Qualsiasi CPU” a “x86” in Visual Studio 2010. Ho letto su un altro sito Web che devo fare quanto segue: Vai al progetto di avvio del tuo programma. Apri la finestra delle proprietà. Fare clic sulla scheda di compilazione. Fai clic su opzioni di compilazione avanzate. […]

Cosa manca / non è ottimale in questa implementazione di memcpy?

Mi sono interessato a scrivere una memcpy() come esercizio educativo. Non scriverò un intero trattato su ciò che ho fatto e non ho pensato, ma ecco l’implementazione di un ragazzo : __forceinline //因为通常Size已知,内联后编译器可以优化掉大部分无用代码void* myMemcpy(char* Dst, const char* Src, size_t Size) { void* start = Dst; for ( ; Size >= sizeof(__m256i); Size -= sizeof(__m256i) ) […]

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.

Che setup fa REP?

Citando il manuale di riferimento sull’ottimizzazione delle architetture Intel® 64 e IA-32 , §2.4.6 “Miglioramento delle stringhe REP”: Le caratteristiche delle prestazioni dell’utilizzo della stringa REP possono essere attribuite a due componenti: sovraccarico di avvio e velocità di trasferimento dei dati. […] Per la stringa REP di trasferimento di granularità più ampio, con l’aumento del […]

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 […]

Come implementare atoi usando SIMD?

Mi piacerebbe provare a scrivere un’implementazione di atoi usando le istruzioni SIMD, da includere in RapidJSON (una libreria di lettori / scrittori JSON C ++). Attualmente ha alcune ottimizzazioni SSE2 e SSE4.2 in altri luoghi. Se si tratta di un guadagno di velocità, è ansible eseguire più risultati atoi in parallelo. Le stringhe provengono originariamente […]

Carichi non temporali e prefetcher dell’hardware, funzionano insieme?

Quando si esegue una serie di chiamate _mm_stream_load_si128() ( MOVNTDQA ) da posizioni di memoria consecutive, il pre-fetcher hardware può ancora kick-in, o dovrei usare il prefetching del software esplicito (con suggerimento NTA) per ottenere i benefici del prefetching mentre ancora evitando l’inquinamento della cache? Il motivo per cui lo chiedo è perché i loro […]

VT non supportato durante l’installazione di HAXM

Sto cercando di installare l’emulatore Android veloce che utilizza l’acceleratore emulatore Intel x86. Ho scaricato l’acceleratore tramite il gestore SDK ma quando ho provato a installarlo ho ricevuto il seguente messaggio di errore all’inizio dell’installazione: So che la mia CPU (i7-3520M) supporta la virtualizzazione VT-X, quindi sono passato al BIOS per assicurarmi che sia abilitato: […]