Come fare in modo che GCC utilizzi più di due registri SIMD quando si utilizzano intrinseci?

StackOverflow https://stackoverflow.com/questions/124405

  •  02-07-2019
  •  | 
  •  

Domanda

Sto scrivendo un po 'di codice e sto provando ad accelerarlo usando SIMD intrinsics SSE2 / 3. Il mio codice è di tale natura che devo caricare alcuni dati in un registro XMM e agire su di esso molte volte. Quando guardo il codice assembler generato, sembra che GCC continui a scaricare nuovamente i dati nella memoria, al fine di ricaricare qualcos'altro in XMM0 e XMM1. Sto compilando per x86-64, quindi ho 15 registri. Perché GCC ne utilizza solo due e cosa posso fare per chiedere di usarne di più? C'è un modo in cui posso " pin " qualche valore in un registro? Ho aggiunto il "registro" parola chiave per la mia definizione variabile, ma il codice assembly generato è identico.

È stato utile?

Soluzione

Sì, puoi. Explicit Reg Vars parla della sintassi che devi aggiungere variabile per un registro specifico.

Altri suggerimenti

Se stai arrivando al punto in cui stai specificando i singoli registri per ogni intrinseco, potresti anche semplicemente scrivere la directory dell'assembly, specialmente data la cattiva abitudine di gcc di pessimizzare gli intrinseci inutilmente in molti casi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top