Articles of x86

Qual è la velocità relativa dell’aggiunta in virgola mobile rispetto alla moltiplicazione in virgola mobile

Un decennio o due fa, valeva la pena scrivere codice numerico per evitare l’uso di moltiplicare e dividere e utilizzare invece addizione e sottrazione. Un buon esempio è usare le differenze in avanti per valutare una curva polinomiale invece di calcolare direttamente il polinomio. È ancora così, o le moderne architetture di computer sono avanzate […]

Spinlock inline-assembly più veloce

Sto scrivendo un’applicazione multithread in c ++, dove le prestazioni sono critiche. Ho bisogno di usare un sacco di blocchi durante la copia di piccole strutture tra i thread, per questo ho scelto di usare gli spinlock. Ho fatto alcune ricerche e test di velocità su questo e ho scoperto che la maggior parte delle […]

Come svuotare la cache della CPU per un’area di spazio indirizzo in Linux?

Sono interessato a svuotare la cache (L1, L2 e L3) solo per un’area di spazio indirizzo, ad esempio tutte le voci della cache dall’indirizzo A all’indirizzo B. Esiste un meccanismo per farlo in Linux, sia dall’utente che dallo spazio del kernel ?

Come verificare il valore EIP con linguaggio assembly?

Voglio ottenere il valore corrente del registro EIP con linguaggio assembly. È ansible?

Loop di srotolamento per raggiungere il massimo rendimento con Ivy Bridge e Haswell

Sto calcolando otto prodotti punto in una sola volta con AVX. Nel mio codice attuale faccio qualcosa del genere (prima di srotolare): Ivy-Bridge / Sandy-Bridge __m256 areg0 = _mm256_set1_ps(a[m]); for(int i=0; i<n; i++) { __m256 breg0 = _mm256_load_ps(&b[8*i]); tmp0 = _mm256_add_ps(_mm256_mul_ps(arge0,breg0), tmp0); } Haswell __m256 areg0 = _mm256_set1_ps(a[m]); for(int i=0; i<n; i++) { __m256 breg0 […]

Come generare codice assembly con clang nella syntax Intel?

Come mostra questa domanda , con g ++, posso fare g++ -S -masm=intel test.cpp . Inoltre, con clang, posso fare clang++ -S test.cpp , ma -masm=intel non è supportato da clang ( warning argument unused during compilation: -masm=intel ). Come posso ottenere la syntax Intel con clang?

Posso forzare la coerenza della cache su una CPU x86 multicore?

L’altra settimana ho scritto una piccola class thread e una pipe message unidirezionale per consentire la comunicazione tra thread (due pipe per thread, ovviamente, per comunicazioni bidirezionali). Tutto ha funzionato bene sul mio Athlon 64 X2, ma mi chiedevo se avrei avuto problemi se entrambi i thread guardavano la stessa variabile e il valore della […]

File di intestazione per x86 SIMD intrinseca

Quali file di intestazione forniscono gli elementi intrinseci per le diverse estensioni del set di istruzioni SIMX x86 (MMX, SSE, AVX, …)? Sembra imansible trovare una tale lista online. Correggimi se sbaglio.

Questo codice è corretto (numero più il numero, quindi stampa il risultato)

Voglio fare qualcosa di semplice in linguaggio assembly. aggiungere due numeri e stampare il risultato sullo schermo. Ho fatto quel codice: .Model SMALL .Stack 100h .Code start: MOV ax, 10 ADD ax, 5 MOV ah, 02h INT 21h MOV ah, 01h INT 21h MOV ah, 4ch INT 21h end start Dopo aver compilato il codice […]

ottenere la lunghezza della stringa in GNU Assembler in linea

Sto ri-imparando l’assemblatore che ho usato su macchine MS-DOS molto vecchie !!! Questa è la mia comprensione di come dovrebbe essere quella funzione. Compilare ma si blocca con un SIGSEGV quando si tenta di inserire 0xffffffff in ecx . Il codice viene eseguito in una VM con Debian 9. a 32 bit. Qualsiasi aiuto sarebbe […]