Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: el_c0c0 en 13 Enero 2009, 06:52 am



Título: Como utilizar ambos nucleos de un procesador x2 ?
Publicado por: el_c0c0 en 13 Enero 2009, 06:52 am
Claro, como lo dice el titulo. Es que ultimamente ninguno de los programas que he visto estresan los 2 nucleos. Solo 1.

Por ejemplo si yo quiero plantar un thread en el Nucleo #2 y otro thread en el Nucleo #1, y en cada uno hacer un Do: DoEvents: Loop... algo simple que estrese ambos nucleos...

Si yo hago eso, el micro quizas ronde los 46% y si nos fijamos en el grafico por nucleo, solo el nucleo #1 esta trabajando como gato. Pero el otro esta tranquilo, ni se mosquea...

Por eso, yo queria saber como hacer esto? aunque sea para correr un thread en el nucleo #2 y no molestar en gran parte al #1.

PD: Yo se que desde el administrador de tareas, desde la opcion Establecer afinidad podemos hacer esto; pero yo queria hacerlo mas independiente, y no solo excluirse del nucleo #1, sino qe dentro del codigo este la opcion de usarlo o no.

Ademas que este sujeto a la cantidad de nucleos, yo dije x2 porque yo tengo x2.. pero algun suertudo tendra X4 o X8...

saludos!


Título: Re: Como utilizar ambos nucleos de un procesador x2 ?
Publicado por: servl en 14 Enero 2009, 01:13 am
en vb lo podes hacer con multithread, yo simplemente lo hago diferente ya para la programacion de juegos (ao, y un par que ise en 3d  o como aoyind) usa una dll echa por mi en c++ que llama al multithread, ya que en vb es muy lento, malo y trae problemas, te recomiendo pasarte a c++, o si queres agregame y te paso la dll


Título: Re: Como utilizar ambos nucleos de un procesador x2 ?
Publicado por: seba123neo en 14 Enero 2009, 02:07 am
de multihilo esta lleno internet ,¿ pero elegir el procesador donde queres el hilo ?


Título: Re: Como utilizar ambos nucleos de un procesador x2 ?
Publicado por: el_c0c0 en 14 Enero 2009, 17:00 pm
de multihilo esta lleno internet ,¿ pero elegir el procesador donde queres el hilo ?
Podes hacer con el api SetProcessAffinityMask (que me pasaste vos). A su vez tenes la otra api GetProcessAffinityMask. Con eso lo limitas, pero no es la idea original, que seria que cada thread este en un nucleo distinto.

saludos


Título: Re: Como utilizar ambos nucleos de un procesador x2 ?
Publicado por: el_c0c0 en 14 Enero 2009, 17:43 pm
Aprovechando este thread, queria pedir ayuda con una API. GetLogicalProcessorInformation (http://msdn.microsoft.com/en-us/library/ms683194(VS.85).aspx). Directamente no se como llamarla.. Supongo que ambos parametros son del tipo Long. En fin, llamando a la funcion con el Buffer = 0 te devuelve el len del buffer desde el otro parametro..
Mas que eso no sabria ... si alguien puede ayudarme...

desde ya muchas gracias

saludos


Título: Re: Como utilizar ambos nucleos de un procesador x2 ?
Publicado por: Lambda en 14 Enero 2009, 22:33 pm
SetThreadAffinityMask (http://msdn.microsoft.com/en-us/library/ms686247(VS.85).aspx)


Título: Re: Como utilizar ambos nucleos de un procesador x2 ?
Publicado por: wimacoco en 31 Agosto 2009, 18:43 pm
en vb lo podes hacer con multithread, yo simplemente lo hago diferente ya para la programacion de juegos (ao, y un par que ise en 3d  o como aoyind) usa una dll echa por mi en c++ que llama al multithread, ya que en vb es muy lento, malo y trae problemas, te recomiendo pasarte a c++, o si queres agregame y te paso la dll

Holas servl esta muy inetesante lo q dices acerca de ese dll q hiciste, me lo podrias pasar para hacerle pruebas en mis trabajo, si?


Título: Re: Como utilizar ambos nucleos de un procesador x2 ?
Publicado por: raul338 en 31 Agosto 2009, 20:22 pm
Claro, como lo dice el titulo. Es que ultimamente ninguno de los programas que he visto estresan los 2 nucleos. Solo 1.

Por ejemplo si yo quiero plantar un thread en el Nucleo #2 y otro thread en el Nucleo #1, y en cada uno hacer un Do: DoEvents: Loop... algo simple que estrese ambos nucleos...

Si yo hago eso, el micro quizas ronde los 46% y si nos fijamos en el grafico por nucleo, solo el nucleo #1 esta trabajando como gato. Pero el otro esta tranquilo, ni se mosquea...

Por eso, yo queria saber como hacer esto? aunque sea para correr un thread en el nucleo #2 y no molestar en gran parte al #1.

PD: Yo se que desde el administrador de tareas, desde la opcion Establecer afinidad podemos hacer esto; pero yo queria hacerlo mas independiente, y no solo excluirse del nucleo #1, sino qe dentro del codigo este la opcion de usarlo o no.

Ademas que este sujeto a la cantidad de nucleos, yo dije x2 porque yo tengo x2.. pero algun suertudo tendra X4 o X8...

saludos!

Eso se llama programacion paralela, actualmente no se como se usa, pero quiero investigar cuando ya tenga algun tiempo libre....igual cualquier aporte lo vere  ;D