begin process at 2012 05 30 11:36:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

SSE2 _mm_slli_si128 décalage non effectué


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

SSE2 _mm_slli_si128 décalage non effectué

mercredi 4 mai 2011 à 14:43:06 | SSE2 _mm_slli_si128 décalage non effectué

Pistol_Pete

Bonjour à tous,

J'ai un soucis concernant l'instruction SSE2 suivante :_mm_slli_si128
Pourquoi, quand j'exécute les deux instructions suivantes, tout ce passe bien
edge = _mm_set1_epi8 (255);
edge = _mm_slli_si128 (edge , 3); //OK

et quand je fais ceci, le décalage n'est pas fait?
int dec = 3;
edge = _mm_set1_epi8 (255);
edge = _mm_slli_si128 (edge , dec ); //KO


Je travail sur des pixels 8 bits.
Merci!

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
mercredi 4 mai 2011 à 16:32:26 | Re : SSE2 _mm_slli_si128 décalage non effectué

patatalo

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
salut,

L'instruction nécessite une valeure constante. Cette valeure est indiquée directement dans le code de l'instruction.

D'autres instructions SSE permettent de faire un décalage avec une valeure non immédiate.

@++
mercredi 4 mai 2011 à 16:38:44 | Re : SSE2 _mm_slli_si128 décalage non effectué

Pistol_Pete

Merci!
Je ne comprenais pas la signification d'une "valeur immédiate"...
Maintenant c'est fait
A+

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
mercredi 4 mai 2011 à 17:39:26 | Re : SSE2 _mm_slli_si128 décalage non effectué

Pistol_Pete

Je viens de multithreader un opérateur qui n'utilise QUE des opérations élémentaires à base de SIMD pour des traitements sur des grosses images. Je n'ai malheureusement pas le gain en performance escompté. Les temps d'exécutions sont sensiblement les mêmes voir même en défaveur de la version multithreading...

Pourtant chaque coeur à ses propres registres SIMD non? Il doit être possible d'avoir une accélération de 2 sur un dual core non?

A+
____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
mercredi 4 mai 2011 à 19:52:20 | Re : SSE2 _mm_slli_si128 décalage non effectué

BruNews

Administrateur CodeS-SourceS
Un thread possède ses registres et sa pile, pas de problème sur cela.

La création d'un thread consomme du CPU, pour escompter un benef if faut donc que le traitement en vaille la peine.

Attention aussi à la synchro, une bonne gestion de celle ci fait sérieusement varier les temps.

ciao...
BruNews, MVP VC++
jeudi 5 mai 2011 à 09:10:01 | Re : SSE2 _mm_slli_si128 décalage non effectué

Pistol_Pete

Les threads sont tous créés en amont et ils passent leur temps à attendre que le thread principal leur envoie un message (PostThreadMessage) pour leur indiquer le traitement à faire + les lignes de l'image à traiter...
La synchro est fait par le thread principal qui attend que tous les threads aient fini leur travail.

Donc on skip la création des threads et la synchro me semble correct (Dite moi si cette stratégie ne vous semble pas optimale).

Un petit exemple : pour une image 20MPixels, 1 thread = 200ms, 2 thread = 200ms alors que les deux processeurs travaillent à 100%...
A+

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
jeudi 5 mai 2011 à 14:54:50 | Re : SSE2 _mm_slli_si128 décalage non effectué

BruNews

Administrateur CodeS-SourceS
Comment les thread font pour attendre message ?

Si 2 CPUs à 100% et que meme temps final, la méthode de synchro est à revoir.

Essaie autre chose que PostThreadMessage:
Un eventParent et un eventThrd.
eventParent dit azu thread de se lancer dans traitement, eventThrd informe parent que traitement fini et que thread en position attente. Ainsi thread 0 CPU quand attend.

Sur processus de compression archivage (sur des Go), en procédant ainsi j'ai quasi coupé les temps en 2.
Faudrait se libérer une journée en meme temps pour mise au point, prévoir un samedi ou dimanche.

ciao...
BruNews, MVP VC++
vendredi 6 mai 2011 à 08:44:06 | Re : SSE2 _mm_slli_si128 décalage non effectué

Pistol_Pete

Salut

Tout d'abord, merci beaucoup Brunews pour ton aide!

Voici une partie de la fonction d'attente de mes threads:
Code C/C++ :
DWORD WINAPI WaitFunction(LPVOID lParam)
{
        MSG msg;
	HANDLE *hEvent = (HANDLE*)lParam;				//To alert the main thread the end of the process
	PeekMessage(&msg,0,0,0,PM_NOREMOVE);		//To create the message queue
	SetEvent(*hEvent);
		
	while (GetMessage(&msg, NULL, 0, 0))		//Wait for message
	{	
		int type  = HIWORD(msg.wParam);
		int which = LOWORD(msg.wParam);
		switch(which)
		{
		
		case MT_STRETCH_HIST:
			if(type==dtUINT8) {Intensity::_StretchHistogramMT<UINT8,UINT8>  ((LPVOID)msg.lParam);break;}
			if(type==dtUINT16){Intensity::_StretchHistogramMT<UINT16,UINT16>((LPVOID)msg.lParam);break;}
...
...


et voici comment le thread principal communique avec les autres threads:
Code C/C++ :
bool MultiThreading::Start(int which,const char *szType,int nbThread)
{
	unsigned int type=100;
	if(strcmp(szType,"unsigned char")==0) type=dtUINT8;
	if(strcmp(szType,"unsigned short int")==0) type=dtUINT16;
	if(strcmp(szType,"unsigned int")==0) type=dtUINT32;
	if(strcmp(szType,"int")==0) type=dtINT32;
	if(strcmp(szType,"float")==0) type=dtFLOAT;
	if(strcmp(szType,"double")==0) type=dtDOUBLE;
	if(strcmp(szType,"unsigned char float")==0) type=dtDOUBLE+1;
	if(strcmp(szType,"unsigned char double")==0) type=dtDOUBLE+2;
	if(type==100)return 0;

			
	for(int i=0;i<nbThread;i++)				PostThreadMessage(idThread[i],0,MAKELONG(which,type),(LPARAM)Param);
			   
        WaitForMultipleObjects(nbThread,hEvents,1,INFINITE);
        return 1;
}


Il faut que j'essaye un eventParent à la place du PostThreadMessage...
Si tu veux l'ensemble du code, dis le moi, je te l'enverrai.
A+

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.


Cette discussion est classée dans : mm, edge, sse2, slli, si128


Répondre à ce message

Sujets en rapport avec ce message

Comment inclure un fichier ds un seul et mm executable puis l'extraire? [ par Xanders ] .°o0oO$: XandersBonjour à tous! Voila je vous explique, j'aimerai inclure dans mon executable des fichiers (quelconque exe, jpg ou autre) que j'extrai Comment inclure un fichier ds un seul et mm executable puis l'extraire? [ par Xanders ] .°o0oO$: XandersBonjour à tous! Voila je vous explique, j'aimerai inclure dans mon executable des fichiers (quelconque exe, jpg ou autre) que j'extrai Dll (et ui, tjr la mm chose) [ par sebastienbro ] G un problème ! G fé une dll en c++ (ki d'ailleur, ne marche pas). L est sensé etre utilisé avec vb, mais voila : vb apelle la premiere fonction expor Conversion string en date [ par jpeg ] j'aimerai convertir (en C++ standard, sans MFC) une chaine de caractère de n'importe quel format (DD/MM/YYYY ou DD/MM/YYYY hh:mm ou YYYYMMDD ou ....) SONDAGE !!! RSVP !!! [ par Guidelor ] Bonjour Ca serait cool si le plus de monde possibles pouvait répondre à ma petite question !!!Existe-t-il un fichier.log sur votre ordinateur qui affi Pb la qd mm ! [ par Joky ] Euh Comment ça se fait que y'as plus de sourceEt n'oubliez jamais...French Smile :-) gtk(mm) dessiner avec de l'alpha [ par Ricool ] Bonjour,J'ai une petite question sur l'apha et gtk (gdk).Je dois dessiner des courbes qui se superpose (coube composée de rectangle plein). Je veuxles Comment avoir plusieur dialog actif en mm temps??? (mfc Vc++6) [ par vincesfire ] Bonjour,Je réalise une interface de communication avec un robot, et je voudrais savoir s'il y a un moyen d'avoir plusieur dialog actif en mm tps.Plus pb de camera [ par mauvaisdawa ] je suis sur un projet de simulation d'helicoptère. j'ai un probleme concernant mes caméras. celle du dessus, ya aucun probleme, mais celle de derrière surcharge << [ par koala_corse ] Salut, Je veux surcharger l'opérateur << pour une de mes classes qui encapsule un multimap (donnée membre privée : laListe). Voici le code que j'ai


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,154 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales