Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1397 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Type binaire de taille quelconque

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Type binaire de taille quelconque

n°297049
xav14
Posté le 30-01-2003 à 14:24:22  profilanswer
 

Je suis en train de faire un simulateur de SIMD avec un processeur de controle et plusieurs processeurs d'execution et il faudrait que j'ai un registre de masque contenant autant de bits que de processeurs d'execution (ca peut varier de 8 a beaucoup +, genre 1024 ou 2048). et je n'arrive pas a trouver une solution facilement implementable. les operations principales sont des initialisations en brut (genre tous les bits a 0) et des copies entre ces structures. Mais l'implementation des et/ou/non/ouex devrait etre facile a coder.
 
Merci  [:huit]

mood
Publicité
Posté le 30-01-2003 à 14:24:22  profilanswer
 

n°297086
LetoII
Le dormeur doit se réveiller
Posté le 30-01-2003 à 15:32:52  profilanswer
 

T'as regardé du côté des champ de bits?

n°297092
xav14
Posté le 30-01-2003 à 15:39:13  profilanswer
 

LetoII a écrit :

T'as regardé du côté des champ de bits?


 
j'aurai bien aimé faire une structure comme ca :
 

Code :
  1. struct reg
  2. {
  3.   int champs[NB_BITS] : 1 ;
  4. };


 
mais gcc est pas d'accord  [:proy]  
 

n°297248
gloop
Posté le 30-01-2003 à 18:01:43  profilanswer
 

xav14 a écrit :

Je suis en train de faire un simulateur de SIMD avec un processeur de controle et plusieurs processeurs d'execution et il faudrait que j'ai un registre de masque contenant autant de bits que de processeurs d'execution (ca peut varier de 8 a beaucoup +, genre 1024 ou 2048). et je n'arrive pas a trouver une solution facilement implementable. les operations principales sont des initialisations en brut (genre tous les bits a 0) et des copies entre ces structures. Mais l'implementation des et/ou/non/ouex devrait etre facile a coder.
 
Merci  [:huit]  


si t'es en C++ tu peux regarder du coté des Bitset.

n°297670
Musaran
Cerveaulté
Posté le 31-01-2003 à 04:16:26  profilanswer
 

En C++:

Code :
  1. #include <bitset>
  2. using namespace std;
  3. bitset<1024> bs; //[], <<, set, reset, tout y est.


 
En C:

Code :
  1. #include <limits.h>
  2. #define NBITS 1024 //nombre de bits utiles
  3. //petits raccourçis
  4. #define DIVUP(a,b) ( (a)/(b) + ((a)%(b)>0 ? 1 : 0) )
  5. #define INT_BIT (CHAR_BIT*sizeof(int))
  6. #define NINTS DIVUP(NBITS,INT_BIT) //nombre d'ints nécessaires pour stocker NBITS bits
  7. #define IPOS(pos) pos/INT_BIT //n° d'entier stockant ce bit
  8. #define BPOS(pos) pos%INT_BIT //n° du bit dans cet entier
  9. //structure d'abstraction
  10. struct bits{
  11. int ai_[NINTS]; //tableau dans une structure: copie possible
  12. };
  13. typedef struct bits bits;
  14. //opérations sur tous les bits
  15. void bits_set(bits* pb){ int i; for(i= 0 ; i<NINTS ; ++i) pb->ai_[i]=         ~0 ;}//tout à 1
  16. void bits_clr(bits* pb){ int i; for(i= 0 ; i<NINTS ; ++i) pb->ai_[i]=          0 ;}//tout à 0
  17. void bits_not(bits* pb){ int i; for(i= 0 ; i<NINTS ; ++i) pb->ai_[i]= ~pb->ai_[i];}//tout inversé
  18. //opérations sur le n-ième bit
  19. void bits_setat(bits* pb, int n){ pb->ai_[IPOS(n)]|=   1<<BPOS(n) ;}
  20. void bits_clrat(bits* pb, int n){ pb->ai_[IPOS(n)]&= ~(1<<BPOS(n));}
  21. void bits_notat(bits* pb, int n){ pb->ai_[IPOS(n)]^=   1<<BPOS(n) ;}
  22. //lecture
  23. int  bits_read (bits* pb, int n){
  24. return (pb->ai_[IPOS(n)] & 1<<BPOS(n))>>BPOS(n) ; //>>BPOS(n) optionnel, met le bit en pos 0
  25. }
  26. //écriture
  27. void bits_write(bits* pb, int n, int val){
  28. if(val) bits_setat(pb, n);
  29. else    bits_clrat(pb, n);
  30. }

:sweat:
 
Utilisation:

Code :
  1. int main(void){
  2. bits b1, b2;
  3. bits_set(&b1);
  4. bits_clr(&b1);
  5. bits_not(&b1);
  6. bits_clrat(&b1, 36);
  7. bits_setat(&b1, 36);
  8. bits_notat(&b1, 36);
  9. b2= b1;
  10. return 0;
  11. }


 
Ou alors bien bourrin: 1 char par bit :lol:.


Message édité par Musaran le 31-01-2003 à 04:17:45

---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°299389
xav14
Posté le 02-02-2003 à 13:48:44  profilanswer
 


 
La solution c++ est bien courte  :D mais j'essaye de le faire en ansi C + posix.
 
La solution C est bien minimale comme j'aime (a part la macro instruction  :whistle: ) je vais la recuperer en y mettant ma sauce  :D  
 
merci  [:huit]

n°299395
Taz
bisounours-codeur
Posté le 02-02-2003 à 14:01:17  profilanswer
 

attention: bitset n'est peut etre pas approprié du fait qu'il est un pseudo container, il peut y avoir des limitations. bien qu'un bitset soit de taille fixe et donc certainement plus rapide, il ne faut pas non plus éliminer d'office std::vector<bool> qui est souvent spécialisé (gain de place) et propose l'interface d'un vector.
 
Musaran > je croyais que tu arretais les macros cette année? quid des fonctions inline en C99?

n°299458
xav14
Posté le 02-02-2003 à 16:33:32  profilanswer
 

++Taz a écrit :

attention: bitset n'est peut etre pas approprié du fait qu'il est un pseudo container, il peut y avoir des limitations. bien qu'un bitset soit de taille fixe et donc certainement plus rapide, il ne faut pas non plus éliminer d'office std::vector<bool> qui est souvent spécialisé (gain de place) et propose l'interface d'un vector.
Musaran > je croyais que tu arretais les macros cette année? quid des fonctions inline en C99?


 
arf steu chinois :/
 
d'ailleurs, ptite question en passant, ya une norme pour le C++ ??

n°299459
Taz
bisounours-codeur
Posté le 02-02-2003 à 16:34:58  profilanswer
 

iso
 
edit: tu comprends pas quoi?


Message édité par Taz le 02-02-2003 à 16:36:30
n°299465
xav14
Posté le 02-02-2003 à 16:48:06  profilanswer
 

++Taz a écrit :

iso
 
edit: tu comprends pas quoi?


 
attention: bitset n'est peut etre pas approprié du fait qu'il est un pseudo container, il peut y avoir des limitations. bien qu'un bitset soit de taille fixe et donc certainement plus rapide, il ne faut pas non plus éliminer d'office std::vector<bool> qui est souvent spécialisé (gain de place) et propose l'interface d'un vector.
 
mais bon, j'ai jamais fais de C++ non plus  [:twixy]  
 
 

mood
Publicité
Posté le 02-02-2003 à 16:48:06  profilanswer
 

n°299471
Taz
bisounours-codeur
Posté le 02-02-2003 à 16:56:26  profilanswer
 

pseudo container: std::vector, std::list, etc, sont des conteneurs (collection ou ~container), c'est à dire qu'ils fournissent des iterator, sont des sequences modifiables de taille variable et sont des template de type, etc std::bitset (tout comme std::string) ne reponds pas à ces criteres (taille fixe, pas d'iterateurs, etc)
 
std::vector<bool> ben un vecteur de booléens, c'est une interprétation d'une sequence de bits
 
interfacevoir conteneur: ils fournissent les meme methodes et fonctonnalités qui permettent de manipuler un conteneur stl de la meme manière sans se soucier de son type (ex: la fonction membre push_back, ou begin())
 
vector voir plus haut
 
 
c'est vrai que t'y connais rien.... :sarcastic:


Message édité par Taz le 02-02-2003 à 16:57:12
n°299473
gloop
Posté le 02-02-2003 à 16:58:41  profilanswer
 

xav14 a écrit :


 
attention: bitset n'est peut etre pas approprié du fait qu'il est un pseudo container, il peut y avoir des limitations. bien qu'un bitset soit de taille fixe et donc certainement plus rapide, il ne faut pas non plus éliminer d'office std::vector<bool> qui est souvent spécialisé (gain de place) et propose l'interface d'un vector.
 
mais bon, j'ai jamais fais de C++ non plus  [:twixy]  
 
 
 


 
les pseudo conteneur (tableaux intégrés, bitset, valarray et bitset) contiennent des elts, donc ce sont des conteneurs. Mais ils n'ont pas certaines fonctionnalités qui font que tu ne peux pas les interchanger avec d'autres, alors que si tu utilises un vector, une list, un map, tu l'utilises de la même manière.
 
le std::vector<bool> est souvent une classe spécialisée pour l'optimisation (notamment au niveau mémoire et accés)
 
elle propose l'interface d'un vector: tu l'utilises exactement comme un vector normal
 
oups grillé  :D


Message édité par gloop le 02-02-2003 à 16:59:19
n°299483
xav14
Posté le 02-02-2003 à 17:23:33  profilanswer
 

++Taz a écrit :


c'est vrai que t'y connais rien.... :sarcastic:


 
j'ai jamais dit le contraire   :heink:
 
et pis la poo j'accroche pas du tout   [:proy]  
 
je me suis tapé du java pendant 2 semestres et j'accroche pas  
 
je prefere ada ou c  [:isa]


Message édité par xav14 le 02-02-2003 à 17:24:59
n°299814
Musaran
Cerveaulté
Posté le 03-02-2003 à 09:38:09  profilanswer
 

xav14 a écrit :

La solution c++ est bien courte  :D

Comme souvent.
Mais le source de <bitset> est bien touffu.
 

++Taz a écrit :

il ne faut pas non plus éliminer d'office std::vector<bool> qui est souvent spécialisé (gain de place) et propose l'interface d'un vector.

C'est effectivement permis par la norme C++98, et c'est reconnu comme une grosse bourde.
Ça fait foirer plein de mécanismes génériques, au point qu'on a cherché un moyen de "désactiver" cette spécialisation.
 

Citation :

Musaran > je croyais que tu arretais les macros cette année? quid des fonctions inline en C99?

Je peux pas... j'ai besoin de NINT en constante de compilation pure pour dimensionner le tableau.
Il y a clairement une lacune à C et C++ à ce niveau.
 
 
Il me semble qu'il y a une astuce plus simple pour la division entière arrondie vers le haut (DIVUP), mais je retrouves pas.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Type binaire de taille quelconque

 

Sujets relatifs
[SQL] comment on fait des requetes du type coli = coli+5[C++] conversion de type avec visual C++
[Delphi] Comment reduire la taille d'une appli ? DBE oblige ?je veux qu'un op binaire soit evalué de droite a gauche (comment ?)
Est-il possible de limiter la taille du texte saisi dans un textarea ?taille de la fonte principale [RESOLU] [gm_superstar: tu comprends ?]
cherche un prog du type php2asp !arbre naire en arbre binaire
Un programme type InstallShield mais gratuitDécalage binaire, cho cho cho !
Plus de sujets relatifs à : Type binaire de taille quelconque


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR