Rédacteur d'assembly vs compilateur dans l'architecture VLIW

8

J'ai lu cette phrase dans un livre:

Dans l'architecture VLIW, le compilateur / et / ou l'assembleur rédige des instructions qui peuvent être exécutées en parallèle.

Quelle est la différence entre le rédacteur d'assemblage et le compilateur? Un rédacteur d'assemblage signifierait-il également la même chose qu'un assembleur?

Dasha Sham
la source

Réponses:

33

Le "rédacteur d'assemblage" dans ce livre est un développeur de logiciel humain qui écrit du code en langage assembleur.

gnasher729
la source
15
1. l'interpréteur ne convertit rien en langage assembleur. 2. Tout outil qui convertit le code source en langage assembleur est par définition un compilateur.
gnasher729
4
@ KellyS.French un assembleur convertit le code du langage assembleur en code machine, donc avec cette définition ce n'est pas un compilateur. Si, toutefois, vous disposez d'un outil qui convertit un langage d'assemblage en un autre (par exemple ARBfp1.0 en langage d'assemblage natif d'un GPU moderne), cet outil est un compilateur (avec cette définition).
Ruslan
1
@ gnasher729 - nitpick: selon la plupart des définitions, la partie "langage d'assemblage" de (2) n'est pas nécessaire (notamment, des choses comme le compilateur dactylographié ou le compilateur java, qui ne compilent ni la source à l'assembly, mais la compilent en javascript ou en java bytecode respectivement). Plus récemment, cela signifie généralement tout outil qui compile un langage de programmation dans un autre langage de programmation (et l'assemblage est techniquement un langage de programmation).
Delioth
2
@ KellyS.French: Un compilateur est un programme qui traduit un programme en langage X en un programme sémantiquement équivalent en langage Y. Selon ce que sont exactement les langues X et Y, nous avons des noms spéciaux pour ces compilateurs, et "assembleur" est un de ces noms spéciaux. Mais ce sont tous des types de compilateurs spéciaux. Par exemple, si Y = assemblage et X est de niveau supérieur à Y, alors nous l'appelons assembleur. Si Y = assemblage et X est de niveau inférieur à Y, nous l'appelons un désassembleur. Si X est de niveau inférieur à Y et Y! = Assembly, nous l'appelons un décompilateur. Si X et Y sont au même niveau, une utilisation récente serait…
Jörg W Mittag
2
@ KellyS.French: Je suppose que la raison pour laquelle les assembleurs ne sont généralement pas beaucoup parlés en termes de compilateurs est que les assembleurs sont des compilateurs très ennuyeux. À la base, un assembleur n'est qu'un mappage 1: 1 de mnémoniques lisibles par l'homme vers des opcodes lisibles par machine. L'étape d'analyse est simple, il n'y a pas de types, il n'y a pas d'optimisations, la génération de code est triviale. Aucun des trucs algorithmiques intéressants que font les compilateurs n'est présent: analyse d'un langage complexe, vérification de type, inférence de type, optimisations, cartographie intelligente de la sémantique, etc.
Jörg W Mittag
10

Dans l'architecture VLIW, le compilateur / et / ou l'assembleur rédige des instructions qui peuvent être exécutées en parallèle

Le sens de cette phrase est que dans l'architecture VLIW, le code assembleur (machine) définit quelle instruction sera exécutée en parallèle, donc elle est fixée au moment où le code assembleur est écrit par un humain ou généré par un compilateur.

Cela diffère des processeurs super-scalaires, où les instructions peuvent être exécutées en parallèle, c'est une décision prise par le CPU chaque fois qu'il exécute les instructions.

Il existe également des processeurs qui combinent les deux approches - Itanium2 est rétrocompatible avec Itanium, contenant 3 instructions dans le mot VLIW. Mais, afair, Itanium2 peut exécuter deux de ces packs en un seul cycle CPU, et cette décision est prise au moment de l'exécution.

Bulat
la source