FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Mandar trabajos a distintos procesadores.
Buenos días, soy nuevo en el foro pero no programando. Empecé con Turbo Pascal 6 y ahora disfruto programando en "Delphi 2007". Ya he programado aplicaciones bastante grandes, y ahora me encuentro con un problema y no he conseguido encontrar información por Internet.
Antes dejaba a windows elegir por donde iban los hilos (threads) de mis aplicaciones, pero ahora estoy haciendo una aplicación de uso intensivo de CPU y me gustaría saber si sabrían como mandar trabajos (o threads), para que se ejecuten en distintas CPUs. Pensaba en algo al estilo:
Igual es imposible esto que pido con delphi, pero por intentarlo... Un saludo y gracias por adelantado |
#2
|
||||
|
||||
#3
|
||||
|
||||
No puede hacerse de la manera que lo describís, pero si puede hacerse.
Cada hilo puede tener una mascara de afinidad con CPU's diferente. El sistema utiliza esa mascara para asignar los hilos con diferentes cpu's. Esta mascara se establece llamando a la función SetThreadAffinityMask, declarada en la unidad Windows. En delphi3000, encontré este artículo, que te provee de una clase que ya encapsula esto en una propiedad.
La mascara de afinidad, es un mapa de bits, donde el bit 1 se corresponde con el cpu 0 así, si queres que un hilo se ejecute solamente en el cpu 3 (de una core 2 quad, por ejemplo), la mascara de afinidad será $8 (en delphi) o 0x8 (en c). Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate Última edición por jachguate fecha: 17-01-2008 a las 21:17:02. Razón: corregir link |
#4
|
||||
|
||||
Hufff; muy cierto amigo jachguate, yo solo reconocía a SetProcessAffinityMask y había dejado a un "lado" a SetThreadAffinityMask.
Saludos |
#5
|
||||
|
||||
Muchas gracias por la respuesta!.
Es lo que necesitaba, mandar Threads distintos a CPUs distintas. Me imaginaba que Delphi tendría algo para poder manejar los Threads a las CPUs, pero no lo encontraba. Muchas gracias de nuevo. PD: Por cierto, no sabréis si existe en Delphi alguna función para saber el número de CPUs existentes? Última edición por matabyte fecha: 18-01-2008 a las 04:46:24. |
#6
|
||||
|
||||
Sin embargo, ten en cuenta que Windows, asi como cualquier OS, tiene un algoritmo de asignacion de cargas que muy probablemente sea mas listo que lo que uno haga.
Lo unico que se me ocurre que podria servir es siempre mandar a procesadores >1. Pero no he hecho pruebas para demostrar si seria mejor asi o que....
__________________
El malabarista. |
#7
|
||||
|
||||
Cita:
Te recomiendo preguntarle también a google, que regularmente da buenas respuestas! Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
procesadores de tres nucleos de AMD | gmontes | Noticias | 10 | 18-01-2008 06:00:05 |
Unir trabajos de impresión | mlara | Impresión | 2 | 31-05-2005 23:44:18 |
Iconos distintos en distintos escritorios. | abel | Linux | 2 | 16-02-2004 14:55:35 |
Interbase con 2 procesadores | jzginez | Firebird e Interbase | 2 | 08-10-2003 20:45:44 |
|