Articles of assemblage

Comment insérer des zéros entre les bits d’une bitmap?

J’ai un code très performant qui effectue des manipulations de bits. Il peut être réduit au problème bien défini suivant: À partir d’un bitmap 13 bits, construisez un bitmap 26 bits contenant les bits originaux espacés de manière égale . Pour illustrer: 0000000000000000000abcdefghijklm (input, 32 bits) 0000000a0b0c0d0e0f0g0h0i0j0k0l0m (output, 32 bits) Je l’ai actuellement implémenté de […]

Comprendre le langage d’assemblage d’ATT

Version C: int arith(int x, int y, int z) { int t1 = x+y; int t2 = z*48; int t3 = t1 & 0xFFFF; int t4 = t2 * t3; return t4; } Version ATT du même programme: x at% ebp + 8, y at% ebp + 12, z at% ebp + 16 movl 16(ebp), […]

Pourquoi mulss ne prend-il que 3 cycles sur Haswell, différent des tableaux d’instructions d’Agner?

Je suis un débutant en optimisation des instructions. J’ai fait une parsing simple sur une fonction simple dotp qui est utilisée pour obtenir le produit scalaire de deux tableaux de float. Le code C est comme suit: float dotp( const float x[], const float y[], const short n ) { short i; float suma; suma […]

Pourquoi main initialise-t-il le cadre de stack lorsqu’il n’y a pas de variables

pourquoi ce code: #include “stdio.h” int main(void) { puts(“Hello, World!”); } décider d’initialiser un cadre de stack? Voici le code d’assemblage: .LC0: .ssortingng “Hello, World!” main: push rbp mov rbp, rsp mov edi, OFFSET FLAT:.LC0 call puts mov eax, 0 pop rbp ret Pourquoi le compilateur initialise-t-il un cadre de stack uniquement pour qu’il soit […]

Fonction assembleur CRC32 appelée à partir de l’application console C

J’essaie d’appeler asm function à partir d’un fichier externe en code C. Cela se passe bien, mais le résultat n’est pas ce qui est supposé être. Au lieu de la sum de contrôle du fichier, je vois des caractères étranges. #include #include #include extern “C” unsigned long __stdcall CRC32(size_t sizeOfFile, char buffer[]); int fsize(char* file) […]

Est-il possible de mettre des instructions d’assemblage dans le code CUDA?

Je souhaite utiliser le code assembleur dans le code CUDA C afin de réduire les exécutions coûteuses, comme nous le faisons avec la programmation asm in c. C’est possible?

Existe-t-il une différence entre initialiser une variable et lui affecter une valeur immédiatement après la déclaration?

En supposant un compilateur purement non optimisant, existe-t-il une différence de code machine entre l’initialisation d’une variable et l’atsortingbution d’une valeur après la déclaration? Méthode d’initialisation : int x = 2; Méthode d’affectation : int x; x = 2; J’ai utilisé GCC pour générer l’assemblage généré pour ces deux méthodes différentes et les deux ont […]

Réplication des performances de multiplication de masortingce BLAS: puis-je y correspondre?

Contexte Si vous avez suivi mes publications, j’essaie de reproduire les résultats trouvés dans l’article fondamental de Kazushige Goto sur la multiplication à masortingce carrée C = AB . Mon dernier post concernant ce sujet peut être trouvé ici . Dans cette version de mon code, je suis la stratégie de superposition et d’empaquetage de […]

Conversion de float en int (float2int) à l’aide d’une manipulation au niveau des bits uniquement

Je me demande si quelqu’un pourrait me mettre dans la bonne direction avec un problème sur lequel je travaille. J’essaie de faire ce que la fonction C suivante utilise en utilisant uniquement l’assemblage ARM et la manipulation de bits: int float2int(float x) { return (int) x; } J’ai déjà codé l’inverse de celui-ci (int2float) sans […]

C ++ incluant une fonction d’assemblage

J’essaie de trouver un moyen de contourner les compilateurs pour certaines plates-formes qui ne supportent pas beaucoup C ++ 11, mais utilisent un assemblage x86. Je connais le assembly, mais je n’ai pas fait grand chose avec ça. Ce que je voudrais faire est d’écrire une fonction C ++, avec un en-tête et un fichier […]