¿Acelerar ejecucion de programas?

Imagen de goyito666
0 puntos

Hola a todos.
Ultimamente con el tema de convertir el PC en una consola que está moviendo Steam me he estado calentando la cabeza en como acelerar un programa (juego o lo que sea) para que vaya al maximo. Como es lógico un sistema operativo multiuso como Linux, Windows,... tienen que atender a un monton de procesos a la vez cada fracción de segundo, ademas fragmenta los programas en paginas no necesariamente consecutivas que sincroniza con el archivo de intercambio para la memoria virtual, todo ello con una merma de rendimiento.
En fin, al grano: Tengo algunos conocimientos de C y Ensamblador, pero tan anticuados y desfasados que no se si es posible compilar un programa para que se ejecute en un segmento fijo de memoria, por ejemplo: compilar Open Arena para que empiece a ejecutarse en la dirección (en decimal) 500000 a 1500000 y que, ademas, se pudiese asignar por lo menos, pensando en procesadores multinucleo, un nucleo de la CPU a ese hilo de forma fija y sin interrupción. Vamos que me tire a todo lujo, que mi maquina ya tiene sus años y acusa la falta de rendimiento.
Supongo que así funcionan las videoconsolas, monoprogramación con todos los privilegios.
A los manitas de la programación ¿Me ha sentado mal el turron o es posible?.
Gracias.

Imagen de nolin
+1
+1
-1

Lo de atender procesos es una cuestión del "kernel" del SO. Lo de asignar la dirección RAM a una aplicación, también.

Lo que sí que puedes hacer es pedirle al SO que dé a un programa la máxima prioridad.
Y si programas multihilo, tu app correrá más rápido incluso con una sola CPU de un sólo núcleo.

De cualquier forma, no pidas maravillas a una máquina lenta, la programes como la programes.
La mejora de velocidad vendrá de la optimización de tu código.

+1
+1
-1
Imagen de goyito666
+1
-1
-1

Correcto en lo de la prioridad del SO y la asignación de la RAM. Sin embargo en una videoconsola el SO ocupa siempre el mismo espacio de RAM y los juegos siempre empiezan en la misma dirección de la RAM, con lo cual el compilador puede utilizar unos modos de direccionamiento mas directos en las instrucciones, no se si conoces algo del lenguaje ensamblador o máquina, es decir que si tiene que acceder a un dato puede ir directamente a su dirección, en un SO multiuso el programa no sabe en que pagina esta ese dato y tiene que utilizar un modo de direccionamiento relativo, es decir por ejemplo: dirección de la pagina + dirección del dato en pagina para obtener el dato (se puede complicar mas, pero gran parte de la composición de la dirección es un paso en segundo plano que hace la CPU sin necesitar operación aritmetica).
Resumiendo con un ejemplo: la Xbox original con un pentiun 700MHz recortado corría juegos que en Windows te pedía un pentiun 2GHz.

+1
-1
-1
Imagen de Jose Luis 1320
+1
0
-1

Como es lógico un sistema operativo multiuso como Linux, Windows,... tienen que atender a un monton de procesos a la vez cada fracción de segundo, ademas fragmenta los programas en paginas no necesariamente consecutivas que sincroniza con el archivo de intercambio para la memoria virtual, todo ello con una merma de rendimiento.

Antes de suponer cosas... yo revisaría la documentación del kernel, de "Linux", no de Ubuntu DE Linux... si en verdad fragmenta los programas en páginas no necesariamente consecutivas... y si lo hace... quizás hayan parches para el kernel, para que no haga eso... no lo se...

lo que dijo nolin, estoy 100 % de acuerdo.

+1
0
-1

"Yo sólo se que no se nada"
-Sócrates, filósofo griego.
-Normas del foro

Imagen de goyito666
+1
0
-1

Algo e leido del tema, puede que lleve años sin programar, pero en su momento tenía un cierto nivel y poco ha cambiado, a pesar de todo ahora me costaría hasta compilar un "Hola mundo" sin que me saltasen varios errores.
Linux para ser mas concretos creo recordar que fragmenta en paginas de unos 4KBytes, no pondría la mano en el fuego, y en general, por lógica, piensa en como un programa, juego o lo que sea, que te ocupe varios gigas y lo ejecutas con 1GB de RAM y eso contando con que también tienes el SO y otros como el Firefox, OpenOffice, etc. Fijate que cuando cambias de una aplicación a otra se relentiza, tiene que intercambiar las paginas que ya no va a usar con las que requieres. En concreto creo que utiliza un contador que va incrementando o disminuyendo en cada pasada segun si ha necesitado esa pagina o no, para darle un indice con el que decidir que paginas tener en memoria o en la swap.
Lo de que mejor en un foro del Kernell, 100% de acuerdo con vosotros, mis disculpas, ahora mismo los que he mirado están todos en ingles, si de programación estoy desfasado en lo del ingles lo triplico y añado dos mas. Es de los pocos foros que visito en los pocos ratos que le hecho al ordenador, no me conecto mucho, y bueno, tenía la idea por la azotea ya un tiempo y un par de días libres y sin saber donde ponerlo.
Gracias por responder Jose Luis.

+1
0
-1
Imagen de Jose Luis 1320
+1
0
-1

y ahí esta el problema...

En concreto creo que utiliza un contador que va incrementando o disminuyendo en cada pasada segun si ha necesitado esa pagina o no, para darle un indice con el que decidir que paginas tener en memoria o en la swap.

Ese es problema más del programa que del sistema operativo... tengo esos mismos usos de RAM en 64 bits... usando 64 bits se usa más RAM, el doble... cuando usaba Ubuntu de 32 bit, por más que abria no superaba los 1.5 GB de RAM, y eran ya muchos programas los que estaban abiertos, en verdad no lo se...

Del kernel no hay foros, es una lista de correo; te das de alta en http://www.tux.org/lkml/ y hay mucha información sobre el kernel.

+1
0
-1

"Yo sólo se que no se nada"
-Sócrates, filósofo griego.
-Normas del foro

Imagen de goyito666
+1
0
-1

En concreto el que nuestro codigo ocupa mas espacio es uno de los contras, aunque es raro que sea el doble, pues el tamaño de los datos que usamos es el mismo. Mucha gente cree que con 64bits va a ir el doble de rápido o va a poder usar mas RAM, craso error, pocos programas dependen de datos tan grandes, y a la mayoría de ellos no acusan un incremento de velocidad en los calculos (programas de gestion por ejem. agradecen mas una mejora en el sistema de almacenamiento) ademas de que a los datos mas pequeños 8,16,32bits no les afecta nada. En cuanto a la RAM se suele confundir la capacidad de direccionar directamente con la que se puede usar.
Mirare el enlace que me proporcionas, aunque para ser sincero como no pille a uno que hable castellano la llevo clara.

+1
0
-1
Imagen de rioport
+1
0
-1

Lo que preguntas parece un tema avanzado (muy avanzado) y por la forma en que preguntas parece que te queda algo grande lo que quieres hacer.

Para ser sincero yo no tengo ni PI de cómo ayudar en lo que preguntas, pero estoy casi seguro que este no es el foro adecuado. Aunque posiblemente en el tipo de foros a los que deberías ir te mandarían de regreso si les preguntas de la manera en que preguntaste aquí.

Suerte.

+1
0
-1

-- GC --