OK, então isso é, na verdade, vários problemas.
A utilização de vários núcleos não seria muito difícil, isso poderia ser conseguido com um script de shell e bifurcação.
Aqui está um exemplo muito simples em zsh:
for f in *flac; do
sox $f ${f%%.flac}.mp3 &
done
É claro que você poderia otimizar isso para o número de seus núcleos e fazer as conversões em lotes.
Agora, preservar tags é uma coisa diferente, eu provavelmente começaria com SoX e veria se isso pode ajudar você. Se não, usaria metaflac para despejar os dados em um pequeno script, que definiria minhas tags do MP3 (meu programa favorito para isso é eyeD3 ). Eles precisam ser "traduzidos" por você mesmo como tags FLAC (que na verdade são apenas comentários do Vorbis) para tags ID3.
Algo parecido com isto:
for f in *flac; do
eyeD3 -a $(metaflac --show-tag-name=ARTIST $f) ${f%%.flac}.mp3
done
Isto é claro, apenas uma tag, etc., é apenas para demonstração. Você poderia combinar os dois trechos, é claro.
No entanto, não posso ajudá-lo a otimizar o problema a ser resolvido por uma GPU. Não vejo bem como isso ajudaria muito, já que as GPUs são otimizadas para o cálculo vetorial.