Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: crazykenny en 10 Diciembre 2011, 14:44 pm



Título: Hacer que una aplicacion aproveche varios nucleos de la CPU
Publicado por: crazykenny en 10 Diciembre 2011, 14:44 pm
Hola; abro este tema porque tengo una duda.
El caso es que las aplicaciones que he creado solo aprovechan uno de los nucleos de mi CPU, y me pregunaba si existe alguna forma de que estas puedan aprovechar de alguna manera mas de un nucleo de mi CPU, teniendo en cuenta que utilizo el compilador que utilizo es Blitz 3D, el cual tiene ya sus añitos, y, bueno, se puede decir que de forma nativa solo aprovecha un nucleo, o almenos eso creo, y lo pregunto mas que nada para saber si es posible, no se, aprovechar algun programa que puedan convertir mis programas para que usen mas de una CPU, o bien hacer uso de alguna libreria u algo asi para aprovechar varios nucleos (si, ya se que quizas sea algo imposible u algo asi, pero quisiera preguntarlo).
Gracias por vuestra atencion y vuestra ayuda, y me disculpo por las molestias causadas.
Saludos.


Título: Re: Hacer que una aplicacion aproveche varios nucleos de la CPU
Publicado por: Khronos14 en 10 Diciembre 2011, 15:04 pm
Hola, http://foro.elhacker.net/programacion_cc/threads_affinity-t337582.0.html

Saludos.


Título: Re: Hacer que una aplicacion aproveche varios nucleos de la CPU
Publicado por: crazykenny en 10 Diciembre 2011, 16:23 pm
Gracias por el enlace con el comando, Khronos.
Por otra parte, y sin animo de despreciar o valorar negativamente tu ayuda, que no quiero valorarla negativamente (es mas, agradezco tu ayuda), me he fijado que en el tema, creo que lo pusiste porque buscabas poner threads en un nucleo especifico, y, entonces, el caso es que incluyes librerias en C/C++, y, bueno, en Blitz 3D no se crean threads; mas bien hay que ir escribiendo el codigo sin necesidad de incluir librerias, ya que el compilador las incluye a la hora de ejecutar el programa y/o compilarlo, o eso tengo entendido, y, bueno, no creo que funcione en el compilador que comento.
Aun asi, ¿seria posible hacer lo que me muestras en tu enlace con Blitz 3D, viendo algun ejemplo?. Cabe destacar que lo comento porque trabajo en Basic, no en C/C++.
Por ultimo, muchas gracias por tu ayuda y atencion.
Saludos.


Título: Re: Hacer que una aplicacion aproveche varios nucleos de la CPU
Publicado por: [Case] en 10 Diciembre 2011, 18:37 pm
Pero tus programas se pueden implementar en Procesos Paralelos Independientes?.

Por que si están hechos para que solamente un proceso funcione a la vez, entonces no hay nada que hacer.


Título: Re: Hacer que una aplicacion aproveche varios nucleos de la CPU
Publicado por: crazykenny en 10 Diciembre 2011, 21:13 pm
¿Implementar en Procesos Paralelos Independientes?; no se, es la primera vez que lo escucho, y me disculpo por mi ignorancia; se que es un compilador en Basic (concretamente es un editor de juegos llamado Blitz 3D), pero, viendo el enlace de Khronos, no creo que se pueda ejecutar un hilo en una CPU, o almenos en la "ayuda" en español (o mas bien los comandos en español) como en la del compilador, creo que no hay nada relacionado con Threads, y por eso he comentado acerca de librerias y demas, a ver si es posible que incluyendo alguna libreria se pueda hacer algo para ampliar temas de funciones del compilador, añadiendola, o es lo que se me ha ocurrido.
Gracias por vuestra atencion.
Saludos.


Título: Re: Hacer que una aplicacion aproveche varios nucleos de la CPU
Publicado por: adastra en 10 Diciembre 2011, 22:04 pm
No conozco Blitz 3D, pero cuando un lenguaje de programación soporta multithreading (por ejemplo Java, C/C++, .NET) cuando iniciar varios procesos con sus correspondientes hilos, el lenguaje de programación se encarga de trabajar de forma nativa con los procesadores que tenga disponibles tu máquina, con la finalidad de brindar un mejor desempeño, el máximo nivel de "personalización" de este comportamiento, se lo indicas al lenguaje por medio de la API correspondiente para tal fin.
Ahora, como bien he dicho no conozco Blitz, por lo tanto lo que debes hacer, es buscar si tiene soporte a multi-threading (es decir, que puedas crear múltiples hilos y tenga soporte a acceso concurrente a recursos).


Título: Re: Hacer que una aplicacion aproveche varios nucleos de la CPU
Publicado por: [Case] en 11 Diciembre 2011, 01:31 am
Pues los procesos paralelos independientes son los Threads, ejecucion de hilos de forma independiente, tratando de que no caigan el el llamado abrazo mortal.

Si en la libreria del compilador no vienen los Threads entonces no creo que puedas ocupar los demás núcleos del CPU, por otro lado yo encuentro extraño que el compilador que mencionas no los tenga implementados.


Título: Re: Hacer que una aplicacion aproveche varios nucleos de la CPU
Publicado por: crazykenny en 11 Diciembre 2011, 11:20 am
Gracias por vuestra ayuda; buscando ahora por google con lo que me habeis dicho, creo que he encontrado una libreria de muluthread u algo asi; el ejemplo de codigo es este, el cual no acabo de entender, la verdad;
Código:
; Example of use FastPointer library.
; (c) 2008-2009 created by MixailV aka Monster^Sage [monster-sage@mail.ru]  http://www.fastlibs.com
;
; Attention! Functions only for the advanced users, use them very accurately.
; If you do not understand how it works, do not use it!
;

Include "FastPointer.dll"

; create scene objects
Graphics3D 800,600,0,2
SetFont LoadFont("Tahoma",15)
Camera = CreateCamera()  :  PositionEntity Camera, 0, 0, -3.5
Light = CreateLight()
Global Cube = CreateCube()



; function for thread (with single integer param - it is obligatory)
; don't load meshes in thread, if you use RenderWorld function in main loop
Function ThreadFunction ( entity%=0 )
Repeat
TurnEntity entity, 0.5, 0.3, 0.4
Delay 10
Forever
End Function


; get pointer to thread function
ThreadFunctionPointer = FunctionPointer()
Goto skip
ThreadFunction() ; <<< get pointer from this function
.skip


; create thread
Thread = CreateThread (ThreadFunctionPointer, Cube)


; main loop
While Not KeyHit(1)
RenderWorld
Text 10,10,"You can control entity from threads!"
Flip 0
Wend


; freel thread
If IsThread(Thread) Then FreeThread(Thread)


WaitKey()
End
Ademas, me comenta el compilador que falta la funcion llamada "functionpointer".
Saludos.