Ayuda: hilos en windows C++
Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 10 de 11

Tema: Ayuda: hilos en windows C++

  1. #1
    dds
    dds está desconectado
    Usuario Avatar de dds
    Ubicación
    San Juan , Argentina
    Mensajes
    101
    Gracias
    39
    Agradecido 51 veces en 25 posts

    Ayuda: hilos en windows C++

    Saludos!
    tengo la siguiente duda:

    ¿Como puededo asignar un hilo de procesamiento para que trabaje en un núcleo determinado del procesador?
    DdS

  2. #2
    Usuario Avatar de hectoritr
    Ubicación
    Villa Carlos Paz, Córdoba, Argentina
    Mensajes
    129
    Gracias
    107
    Agradecido 76 veces en 41 posts
    Hola dds, lo que necesitas se llama OpenMP, es una interfaz de programación para calculo paralelo que trabaja con memoria compartida, preferentemente en computadoras multicore.

    No se porque queres asignar una función a un núcleo en particular, pero te recomiendo que tengas cuidado con eso porque si le erras a la carga de cada núcleo lo vas a sobrecargar y posiblemente caliente más un núcleo que otro acarreando diversos problemas.

    Sin embargo OpenMP es muy bueno y muy recomendable de usar, es super eficiente y su utilización se puede apreciar en gran medida, pero como te decia antes, dejando que el mismo código decida como separar la carga. Aunque a veces le erra y tenes que actuar vos como programador para evitar problemas de sobrecarga de un núcleo.

    Deberias escribir algo como esto, no lo tomes tal cual porque estoy medio oxidado en estos asuntos pero puedo enviarte codigo si lo queres ver!

    Aqui te envio como hacer para que un hilo en particular haga algo unicamente.

    Código:
    #include <omp.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main (int argc, char *argv[]) {
    
     int nthreads, tid; //variable n de hilos y ID de cada hilo
    
    
    #pragma omp parallel private(nthreads, tid)
      {
      /* Obtener numero de hilo */
    
    
      tid = omp_get_thread_num(); /*Cada hilo en particular tiene un numero distinto por más que sea el mismo código, es medio dificil de entender al principio*/
    
    
      printf("Hola mundo desde el proceso = %d\n", tid);
     /* Solo el hilo master hace lo siguiente */
    
    
      if (tid == 0)  //De la misma forma podrias poner cualquier otra tid
        {
        nthreads = omp_get_num_threads();
        printf("Numero de threads = %d\n", nthreads);
        }
      }  /* Aqui se juntan todos lo hilos y vuelve a ser secuencial el código */
    }
    Saludos y espero te haya servido!
    No dudes en consultar de nuevo
    Última edición por hectoritr; 06/11/2011 a las 12:37

  3. Los siguientes usuarios agradecen a hectoritr por este post:

    dds (01/11/2011)

  4. #3
    Usuario
    Ubicación
    Barcelona - Catalunya
    Mensajes
    44
    Gracias
    6
    Agradecido 23 veces en 16 posts
    Buenas, al ver tu mensaje me pico la curiosidad y estuve buscando un poco por la MSDN a ver si había alguna api para hacer lo que quieres, y encontré SetThreadAffinityMask que creo que es ideal para lo que quieres, siempre y cuando crees los threads con CreateThread de windows.

    Espero que te sirva de ayuda, Saludos.

  5. Los siguientes usuarios agradecen a devildrey33 por este post:

    dds (06/11/2011)

  6. #4
    Usuario Avatar de VLAD
    Ubicación
    Ibarra, Imbabura, Ecuador
    Mensajes
    124
    Gracias
    72
    Agradecido 105 veces en 47 posts
    Pues se muy poco del tema, pero talves te interese hecharle un vistazo a CUDA
    MID - Mecahtronics Intelligent Design
    mecatronica.mid@gmail.com

  7. #5
    Usuario Avatar de hectoritr
    Ubicación
    Villa Carlos Paz, Córdoba, Argentina
    Mensajes
    129
    Gracias
    107
    Agradecido 76 veces en 41 posts
    Hola dds! Pudiste hacer lo que querias?

  8. #6
    dds
    dds está desconectado
    Usuario Avatar de dds
    Ubicación
    San Juan , Argentina
    Mensajes
    101
    Gracias
    39
    Agradecido 51 veces en 25 posts
    Saludos y gracias por su respuesta !
    Ya mismo me pongo a probar , por ahora solo he estado jugando con las prioridades del proceso. SetThreadAffinityMask parece justamente lo que estaba buscando !
    DdS

  9. #7
    dds
    dds está desconectado
    Usuario Avatar de dds
    Ubicación
    San Juan , Argentina
    Mensajes
    101
    Gracias
    39
    Agradecido 51 veces en 25 posts
    Saludos!
    estuve probando con las prioridades del proceso y el hilo, y a verdad no obtuve ningún resultado apreciable en los tiempos de ejecución. las funciones que utilice son :

    SetPriorityClass(Proceso,REALTIME_PRIORITY_CLASS)
    SetThreadPriority(GetCurrentThread(),THREAD_PRIORI TY_TIME_CRITICAL)

    si se nota la diferencia levemente en el resto de los programas abiertos, funcionan un poco mas lento.

    en cuanto a SetThreadAffinityMask lo probé y anda bien , el tema es que el efecto es contrario :
    en vez de mejorar el tiempo de ejecución lo empeora! salvo por supuesto que se utilice "3" en la mascara ( que asigna el hilo a ambos procesadores)que en definitiva es como no utilizar la función.
    DdS

  10. #8
    Usuario
    Ubicación
    Barcelona - Catalunya
    Mensajes
    44
    Gracias
    6
    Agradecido 23 veces en 16 posts
    Yo la verdad es que no se para que quieres limitar un hilo a un solo núcleo, lo que esta claro, es que windows intenta optimizar todos los hilos para que funcionen lo mas rápido posible con todos los núcleos disponibles. Si tu le dices a windows que cierto hilo solo puede utilizar un núcleo veo bastante normal que disminuya el rendimiento. Piensa que tu hilo solo utilizara una parte del procesador, pero esto no limita a todos los demás procesos y hilos a utilizar ese núcleo.

    En cuanto a SetPriorityClass y SetThreadPriority si los pones al máximo solo notaras la diferencia cuando tengas otros procesos que se coman la cpu y no tengan al máximo su prioridad.

    Quizás si explicas un poco lo que estas haciendo te podemos ayudar mejor.

    Saludos

  11. #9
    dds
    dds está desconectado
    Usuario Avatar de dds
    Ubicación
    San Juan , Argentina
    Mensajes
    101
    Gracias
    39
    Agradecido 51 veces en 25 posts
    Saludos!
    lo que ocurre es que tengo 4 hilos. uno ingresa datos desde una cámara al máximo frame rate de esta, el resto de los hilos van realizando procesamientos sucesivos sobre el cuadro, como si fuera una linea de montaje.
    lo que quería probar es que si en una maquina de cuatro núcleos hago correr en forma paralela los 4 hilos, estos se ejecutarían en un tiempo menor y mas estable.
    Sucede que, como en una linea de montaje, el tiempo de cada hilo debe ser lo mas exacto y parecidos posible. Sino tengo un cuello de botella.
    DdS

  12. #10
    Usuario Avatar de hectoritr
    Ubicación
    Villa Carlos Paz, Córdoba, Argentina
    Mensajes
    129
    Gracias
    107
    Agradecido 76 veces en 41 posts
    Hola dds, lo que quieres hacer es un caso ideal para hacerlo con OpenMP como te comente más arriba! En serio es un muy bueno ejemplo, lo que podrías hacer y corregime si me equivoco es lo siguiente, asignar un núcleo a la captura de la imagen, y luego si procesas la imagen en forma de matriz como seguramente lo haces, paraleliza el procesamiento entre los tres núcleos restante, como una imagen supone una carga constante si divides bien el trabajo no tendrás cuellos de botella, salvo en la captura de la imagen!

    Como paralelizas el trabajo? Le asignas un tercio de la matriz imagen a cada núcleo y luego juntas el trabajo al final de procesamiento, por esos debes darle un poquito menos de trabajo a tu núcleo master, para que procese su parte y luego junte cada chunk (porcion de matriz) de los slave.

    Si lo logras implementarlo vas a notar un gran diferencia en el tiempo de procesamiento y en la fluidez de la imagen!

    PD: pregunta de curioso nomas, que procesamiento le queres hacer a la señal?
    PD2:No dudes en preguntar lo que no se entienda de mi comentario!

    Saludos!!

    Héctor!

Página 1 de 2 12 ÚltimoÚltimo

Temas similares

  1. Alto uso de CPU en Windows 7
    Por Vexelius en el foro Consultas Técnicas
    Respuestas: 14
    Último mensaje: 11/01/2013, 02:23
  2. AYUDA Windows XP Embedded
    Por anarquiles en el foro Consultas Técnicas
    Respuestas: 0
    Último mensaje: 29/04/2011, 07:07
  3. windows 7
    Por fusano en el foro Software
    Respuestas: 7
    Último mensaje: 16/04/2011, 04:42
  4. Ayuda con DVD de instalacon de Windows 7
    Por PicTrance en el foro Software
    Respuestas: 1
    Último mensaje: 26/10/2010, 20:36
  5. Ayudá a mejorar Windows 7..
    Por Arielo43 en el foro Software
    Respuestas: 10
    Último mensaje: 13/09/2010, 10:41

Los visitantes encuentran esta página buscando por:

hilos en c windows

hilos c

hilos en c

crear hilos en c windows

crear thread c windows

crear hilo en c windowshebras en windowsc hiloshilos c windowshilos en windows chebras en c hilos en windowsprogramacion hebras c windowshilos en c en windowsthreads en windows ccreacion de hilos en c programacion c con hebras en windowsc programacion hilos windowshilos en windows 7Thread en C Windowsc Threadsproceso de hilos en windows 7crear hilos en windowshilos en c de windowshilos de windows

Etiquetas para este tema

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37