Domanda

Sto scrivendo un'applicazione altamente parallelo che è multithreaded. Ho già un accelerato classe thread SSE scritta. Se dovessi scrivere una accelerata classe thread MMX, quindi eseguire entrambi allo stesso tempo (un thread SSE e un thread MMX per core) sarebbe il rendimento migliorare notevolmente?

Vorrei pensare che questa impostazione avrebbe aiutato la latenza nascondere memoria, ma mi piacerebbe essere sicuri prima di iniziare versando tempo in esso.

È stato utile?

Soluzione

I set di istruzioni SSE e MMX condividono lo stesso insieme di unità di esecuzione elaborazione vettoriale nella CPU. Pertanto, l'esecuzione di una filettatura SSE ed una filettatura MMX avrà le stesse risorse disponibili ogni filo come se l'esecuzione di due filettature SSE (o due MMX fili). L'unica differenza è nelle istruzioni che esistono in SSE ma non MMX (dal SSE è un'estensione di MMX). Ma in quel caso la MMX è destinata probabilmente ad essere più lento, perché non ha tali istruzioni più avanzate di cui dispone.

Quindi la risposta è:. No, non sarebbe vedere un miglioramento delle prestazioni rispetto alla corsa due thread SSE

Altri suggerimenti

SSE e MMX utilizzano gli stessi registri, quindi non importa quale delle due si utilizza (tranne MMX succhiare SSE essere utile, ovviamente)

La domanda migliore è come SSE è implementata sul CPU di destinazione. Ha un unità di SSE per core? (Probabilmente) In caso affermativo, le istruzioni SSE allora si potrebbe anche funzionare su ogni thread.

Se si dispone di un'unità SSE condivisa tra i core poi diversi thread sarà la lotta su di esso quindi non ci sarà molto guadagnato eseguendo le istruzioni SSE in più thread. (Non so se tutte le CPU in realtà condividono l'unità SSE tra i thread, però, in modo da prendere questo come un caso ipotetico)

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