Les bitmasks sont terriblement vieux. Je n'ai pas pu trouver de référence au premier, mais ils étaient certainement populaires grâce à l'avènement des processeurs 8 bits, et ont probablement aussi été utilisés dans les processeurs 4 bits.
L'idée derrière les masques de bit est de tirer parti du parallélisme au niveau des bits. Un ordinateur 8 bits peut effectuer la même opération bit par bit à 8 bits à la fois s’ils sont regroupés dans un seul mot natif (c’est-à-dire qu’il entre dans un registre).
Le nom vient du masquage, qui est une approche générale pour couvrir des zones avec lesquelles vous ne souhaitez pas interagir. Par exemple, considérons ce pochoir pour masquer des zones d'un mur (le pochoir a été déplacé après la peinture pour montrer le motif)
Les masques sont également utilisés en photographie, où ils utilisent le terme "esquive" plutôt que "pochoir". Vous pouvez utiliser un masque pour masquer une partie de la lumière pendant l’impression afin d’éclaircir une zone.
Le terme est également utilisé directement en photolithographie, technique utilisée pour fabriquer des circuits intégrés. Le masque empêche la lumière d’atteindre la résine photosensible peinte sur la puce, ce qui crée des motifs qui finissent par créer des motifs facettés sur la puce. (L'image ci-dessous est l'un des masques du processeur Intel 8080A , si vous êtes curieux)
De même, dans le masquage de bits, vous sélectionnez les parties du mot que vous souhaitez utiliser, masquant ainsi le reste des bits. Dans l'exemple ci-dessous, j'utilise l'opération "and" pour masquer l'entrée de sorte que seuls les 3ème, 4ème et 8ème bits soient visibles. Le reste est "masqué" pour être 0. Le masque que j'utilise est 00110001
. Je le montre ci-dessous avec #
0 et .
1 parce que cela rend l'apparence visuelle du masque binaire similaire à celle des masques physiques ci-dessus, et je montre une ligne "bits sélectionnés" qui montre les bits de la sortie qui n'ont pas été masqués ( "bits sélectionnés" n'est pas réellement une opération logique qui se produit ... le processeur va vraiment droit de l'entrée AND masque à la sortie en une seule étape, mais je pense que cela clarifie l'image visuelle)
Input 10010111
Mask ##..###. (aka 00110001)
-----------------------
(selected) 01 1
Input AND Mask 00010001
Comme je l'ai mentionné, le masquage est terriblement vieux, car il augmente considérablement la productivité du processeur. Sur un processeur 4 bits, le processeur peut être 4x plus rapide. Sur un processus 8 bits, cela peut accélérer 8 fois (sur les opérations au niveau des bits uniquement, bien sûr).
Une utilisation fascinante pour cela est les moteurs d'échecs. Le plateau d'échecs a 64 carrés. Les moteurs modernes ont des entiers 64 bits. C’est une chance terriblement commode, alors les moteurs d’échecs en tirent souvent parti. Ils ont ce qu'on appelle des " bitboards " qui contiennent les emplacements des pièces. Cela vous permet d'effectuer toutes sortes d'optimisations, telles que la recherche de tous les mouvements de pion en une seule étape.