Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Mandar a ejecutar programas en micros diferentes? (https://www.clubdelphi.com/foros/showthread.php?t=76430)

Anel Hernandez 31-10-2011 17:54:22

Mandar a ejecutar programas en micros diferentes?
 
Hola,

estoy mandando a ejecutar un programa de calculo compilado en Fortran de esta manera.

Código Delphi [-]
var
  Info:TShellExecuteInfo;
begin
  with Info do begin
   cbSize := SizeOf(ShellExecuteInfo);
   fMask := SEE_MASK_NOCLOSEPROCESS;
   Wnd := Handle;
   lpVerb := 'open';
   lpFile := PChar('C:\Archivos de programa\programa\programa.exe');
   lpParameters := PChar('D:\programa.inp');
   lpDirectory := PChar('D:\');
   nShow := SW_SHOW;
  end;
  ShellExecuteEx(@INFO);

trabaja perfectamente. Pero debo hacerlo en numerosas ocasiones y he comprobado que solo trabaja con uno de los microprocesadores (mi PC tiene 2). He visto que algunas GUI permiten mandar a correr programas simultaneamente en diferentes micros.

Como?

gracias

Casimiro Notevi 31-10-2011 20:32:55

Haz una búsqueda por "Thread".

Por cierto, recuerda poner etiquetas al código, por ejemplo:




Verás que se muestra mucho mejor, te he modificado el que has puesto antes.

ecfisa 31-10-2011 22:34:15

Hola Anel.

Primeramente hay que asegurarse que el S.O. esté soportando su uso, en Windows:
  • Inicio -> Ejecutar -> MsConfig + Intro.
  • Pestaña arranque -> botón Opciones avanzadas -> Seleccionar número de procesadores (2/n) -> Aceptar -> Aceptar -> reiniciar.

También revisá estos enlaces:
Un saludo.

Anel Hernandez 02-11-2011 12:37:01

Hola,

ya hice las comprobaciones recomendadas y lei los temas sugeridos. pero mi duda no es sobre la simultaneidad, es sobre como decirle a programa que ejecute programa1.inp en el micro1 (por llamarlo de alguna manera) y programa2.inp en el otro micro?

o windows lo distribuye a su conveniencia?

saludos y gracias

ecfisa 02-11-2011 13:37:31

Hola.

Según entiendo, es el planificador de trabajos (Job Scheduler) del S.O. quién decide a qué procesador asignar el proceso que tiene que ser ejecutado mediante el Dispatcher.

Al menos yo, no conozco procedimiento, función o código Delphi que pueda tomar o alterar esa decisión.

Un saludo.

Anel Hernandez 02-11-2011 17:27:58

ok, gracias.

con que funcion desde Delphi puedo saber la cantidad de nucleos que tiene el micro? alguna de la API? como puedo saber el numero de procesadores que tiene asignado windows? eso que verificamos arriba con el MsConfig?

gracias

ecfisa 02-11-2011 22:40:23

Hola Anel.

Para obtener los datos del procesador usando el registro de windows:
Código Delphi [-]
uses Registry;

function DatosProcesador: TStrings;
const
   CPUKEY = '\HARDWARE\DESCRIPTION\System\CentralProcessor';
var
  i: Integer;
  TS1: TStrings;
begin
  TS1:= TStringList.Create;
  try
    with TRegistry.Create do
    try
      RootKey:= HKEY_LOCAL_MACHINE;
      if OpenKey(CPUKEY, False) then
      begin
        GetKeyNames(TS1);
        Result:= TStringList.Create;
        for i:= 0 to TS1.Count -1 do
          if OpenKey(CPUKEY + '\' + TS1[i], False) then
          begin
            Result.Add('Núcleo: '+IntToStr(i));
            Result.Add('Nombre: '+ReadString('ProcessorNameString'));
            Result.Add('Identificador: '+ReadString('Identifier'));
            Result.Add('Fabricante: '+ReadString('VendorIdentifier'));
            Result.Add('Velocidad Mhz: '+IntToStr(ReadInteger('~Mhz')));
            Result.Add(' ');
          end;
      end;
    finally
      Free;
    end;
  finally
    TS1.Free;
  end;
end;

Llamada de ejemplo:
Código Delphi [-]
  ListBox1.Items:= DatosProcesador;

Un saludo.

Anel Hernandez 03-11-2011 10:03:19

Hola, gracias

Hice los cambios en el Msconfig sugeridos arriba y resulta que cuando mando 2 procesos con ese cambia el calculo demora el doble de lo que demoraba antes.

saludos

ecfisa 03-11-2011 13:49:26

Hola Anel.

Es un comportamiento bastante atípico...

Pero, al estar involucrado un lenguaje (Fortran) que desconozco por completo, sólo se me ocurre que consultes con el soporte del S.O.: support
Quizá allí, encuentres encuentres la explicación.

Un saludo.


La franja horaria es GMT +2. Ahora son las 19:15:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi