¿Porque los programas requieren tanta potencia?

Iniciado por crazykenny, 17 Enero 2011, 14:20 PM

0 Miembros y 1 Visitante están viendo este tema.

crazykenny

Ante todo, lo primero; si este tema no va aqui, me disculpo, y si es posible cambiarlo de sitio, y ponerlo en el lugar correspondiente, lo agradeceria.
Bueno, el caso es que he puesto este tema aqui, para preguntar, a nivel general, porque los programas a nivel general, como ahora videojuegos de ultima generacion y programas como el mencionado en este tema abierto por wolfbcn (http://foro.elhacker.net/noticias/un_superordenador_derrota_a_los_humanos_en_un_concurso_de_tv-t316896.0.html), entre otros, requieren tanta potencia en lo que respeta a capacidades de un ordenador.
Lo pregunto mas que nada, por el hecho de que, bueno, llevo algun tiempo programando algun que otro sistema de bases de datos y rutinas que trabajan con ellas, en el sentido de un sistema para llevar tiendas (el cual lo he puesto en este foro) y otro para gestionar torneos por eliminatorias, y a nivel general, pues consumen una cantidad de memoria RAM "bastante reducida" en lo que respeta a capacidad de memoria RAM de un ordenador, en el sentido de, como mucho, requerir entre 8 y 24 MB de RAM ambos programas cuando actualmente los sistemas disponen de 2GB de RAM, los cuales muy probablemente, disponen de entre 1 y 1,5 GB libres dependiendo del SO operativo (en el cual hago referencia a windows XP y vista, y no a linux, ya que no dispongo informacion de la capacidad de RAM en uso de dicho SO), y viendo que, como norma, utilizo una gran cantidad de lineas de comando para crear mis programas (entre 500 y 1000 aproximadamente, incluso mas), pues me preguntaba porque, programas como el comentado en la noticia de wolfbcn y el utillizado para jugar al ajedrez en Deep Blue (o Blue gene, no me acuerdo ahora del superordenador que supero al mejor ajedrecista del mundo en su momento), requieren de tanta potencia para ser ejecutados, teniendo en cuenta que, por decirlo asi, los conceptos son "relativamente" simples, y quizas con unas rutinas determinadas "quizas" no requieran tanta potencia; por ejemplo, en un programa de ajedrez "relativamente" potente, con tal de que pueda visualizar X movimientos posibles y sumar y restar cifras dependiendo de las fichas eliminadas, y que seleccione aquel movimiento cuya cifra sea mas alta considere ese movimiento (o cadenas de movimientos propios y del rival) como el mas adecuado y lo realice y, en caso de empate entre 2 o mas movimientos, lo elija aleatoriamente, recordando que el movimiento a realizar (o cadenas de movimientos) deben estar guardados en una matriz o en varias dependiendo de si hay mas de un movimiento con puntuacion identica, pero el movimiento a realizar debe estar en una matriz, y luego, si el movimiento del rival no es el que esta en la matriz, se repetiria el proceso, por no decir de que, para "intentar ir mas rapidos", dicho programa deberia disponer de una base de datos con partidas de ajedrez en las cuales se determine la victoria de las piezas blancas y negras, y, dependiendo de que fichas este utilizando el ordenador, busque en las partidas de su color de fichas una situacion identica a la que esta actualmente el y su rival, para determinar que movimiento realizar en caso de que las piezas del tablero de la partida en curso del ordenador sea identica a la de la partida guardada, y entonces, el ordenador seguiria la pauta de la partida almacenada, aunque cabe destacar que esta accion deberia realizarse antes de calcular los movimientos y, despues de visualizar el estado de las partidas guardadas y la actual, se pasaria a buscar en X movimientos es posible realizar jaque mate antes de lo que indique la partida guardada, aunque el ordenador deberia comprobar si hay mas de una partida guardada con una situacion identica a la actual, para determinar cual acaba antes, y elegir entre las que haya la que acabe antes, por no decir, que en el superordenador que juega a jeopardi, el concepto sigue siendo tambien "simple", en el sentido de que el programa ha de tener un sistema de reconocimiento de voz para identificar los parametros a buscar y luego, mediante la insercion de los parametros de busqueda por voz, buscar en una base de datos con varias cosas (supongamos animales) que tienen varios parametros de busqueda, identificar cual de estas cosas se asemeja mas a lo insertado por voz.
Personalmente, he de decir que, en cierta manera, si que veo que se requiere de cierto espacio en el Disco duro, entre otros medios, y cierta velocidad de CPU y/o bus de datos, pero personalmente, creo que utilizar superordenadores, pues es como pasarse un poco en lo que respeta a potencia, y me preguntaba si realmente los programas comentados, y los programas de IA mas desarrollados (que a fin de cuentas es a lo que me refiero), realmente requieren tanta potencia en un ordenador, porque personalmente, vale, no tendre mucho nivel de programacion y demas, pero en los programas que he hecho, almenos en el de tiendas, he insertado mas de 1200 entradas, y el programa, en cuestion de milisegundos (pongamos 100/150 como mucho) me enseña lo que estoy buscando insertando su nombre y luego, tambien, si inserto un parametro de busqueda, me muestra, en un periodo de tiempo realmente corto, todos los "productos" (por asi decirlo) con dicho parametro en una base de mas de 1000 productos, eliminando una gran cantidad de productos, aunque si, vale, se tarda lo suyo en mostrarlos todos, pero una cosa es mostrarlos todos uno a uno, y otra disponer de una lista con todos los productos con dicho parametro, y por eso pregunto el porque los programas mencionados para jugar al ajedrez/jeopardy requieren tanta potencia, cuando solo han de consultar en una base de datos, y como mucho, comparar "algunos" resultados generados por CPU a partir de X movimientos y/o determinar lo que es algo a partir de ciertos parametros de busqueda insertados por voz, y mas aun cuando los programas que he hecho que buscan algo en periodos de tiempo realmente cortos requieren poca potencia, tanta de RAM como de CPU, y, para ser sincero, mis programas, ocupan 340 megas, pero por culpa de las imagenes añadidas como "complemento", las cuales se enlazan en un string dentro de una matriz, y no se, vale que los algoritmos de los programas mencionados y los de IA mas potentes requieren potencia, pero de ahi a usar superordenadores, pues no se, no entiendo porque requieren tanta potencia, y si me pudieseis explicar el porque, lo agradeceria.
Me disculpo por las molestias causadas.
Gracias por vuestra atencion.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

Novlucker

#1
Lee esto y cuando veas el número lo entederás :D
http://thales.cica.es/rd/Recursos/rd99/ed99-0035-01/temas/partidas.html
Y también puedes hacer cierta analogía con lo dicho aquí :P

Sobre el jeopardy, ten en cuenta que para empezar el programa debe de buscar infinitas respuestas en una base de datos, comprendiendo lo que se le pregunta y dando más o menos peso en "que" se pregunta ¿Cuantas patas tiene un gato negro? ¿Todos los gatos tienen el mismo número de patas? ¿Importa que sea negro? Lo de los programas de ese tipo no es solamente asociar una palabra ingresada por voz con una en una base de datos, debe de poder comprender.

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

crazykenny

Muchas gracias Novlucker; de todas formas, en lo que respeta a cifras, estamos hablando de RAM y acceso a esta, y la falta de esta se podria hacer volcando la informacion de esta en un disco duro con bastante capacidad, por lo que, ¿un ordenador de ultima generacion, con varias CPU (creo que han llegado a poner 8 minimo en un mismo chip) y con overclocking al maximo, "tardaria mucho" en hacer un "buen" movimiento, aun despues de acceder a la base de datos mencionada, no encontrar nada y volcando la informacion en el disco duro?.
Me disculpo por las molestias causadas.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

Novlucker

¿Has pensado cuanto tiempo llevaría crear una base de datos con 20 millones de millones de millones de millones de millones de millones de millones de posibilidades, además del espacio que ocuparía? ¿Sin tener en cuenta el tiempo que tomaría encontrar los datos en esa base?

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

crazykenny

Cita de: Novlucker en 17 Enero 2011, 14:54 PM
¿Has pensado cuanto tiempo llevaría crear una base de datos con 20 millones de millones de millones de millones de millones de millones de millones de posibilidades, además del espacio que ocuparía? ¿Sin tener en cuenta el tiempo que tomaría encontrar los datos en esa base?

Saludos
Si te soy sincero, no.
Supongo que me lo dices porque si, llevaria mucho tiempo, tanto insertar los datos como ahora buscarlos, al igual que el espacio requerido para guardar los datos, y personalmente, viendo lo que me comentas con respecto a la cantidad de datos a manejar, almenos en el ajedrez, no me extraña de la potencia requerida para ejecutar un buen programa de ajedrez.
No obstante, y solo por curiosidad; ¿porque en los programas de ajedrez que he ejecutado en mi ordenador, como mucho, tardan cinco segundos en buscar un movimiento?.
Saludos.
A nivel personal, lo que me da mas miedo no son los planteamientos y acciones individuales, sino las realizadas en grupo, ya que estas ultimas pueden acabar con consecuencias especialmente nefastas para todos.
Se responsable, consecuente y da ejemplo.
http://informaticayotrostemas.blogspot.com.es/2013/12/situacion-de-la-educacion-actual-en.html
https://informaticayotrostemas.blogspot.com/

Sauruxum

#5
En realidad en los juegos de ajedrez no se programan asi las cosas.
En el concurso de programacion Ehn-Dev que se tuvo en este foro yo presente una aplicacion acerca de las redes neuronales. Estas redes que pueden ser programadas bajo una arquitectura tipo Von Neuman, aunque si es menos eficaz que en su propia arquitectura, tienen la peculiaridad de "aprender" y "asociar" los datos de ingreso relativamente a una salida deseada.
Mi programa era muy simple y como ejemplos dentro de la carpeta deje uno que mediante aprendizaje logra representar la funcion logica XOR y el seno ( aunque con mala presicion ), tambien un ejemplo que identifica patrones visuales. Este uso es el que se le da al ajedrez. Si tienes una matriz de 8x8 ( tablero ) y piezas distribuidas en un cierto modo, mediante el debido aprendizaje el programa mismo es capaz de escojer la jugada que "con mayor probabilidad te llevara a la victoria".

Porque este en especifico requiere tanta memoria? porque debe tener muchos datos temporales a la mano para trabajar velozmente. Me explico un poco con numeros.
Las redes neuronales hacen basicamente multiplicaciones de matrices y una aplicacion bien hecha como la usada en blue deep tiene estas caracteristicas:

Elementos neuronales de entrada:        80
Capas ocultas de elementos:                  5
Elementos en media en la capa oculta: 200
Elementos de salida:                            80

La de tu ordenador:

Elementos neuronales de entrada:        80
Capas ocultas de elementos:                  2
Elementos en media en la capa oculta: 135
Elementos de salida:                            80

Entonces para hacer el calculo debe hacer un numero de multiplicaciones del tipo 80x200x200x200x200x200x80 sin contar lo que ya ocupa en calculo la decodificacion de esta.
Este tipo de aplicaciones funciona de maravilla en un procesador con mas nucleos, pero son muy lentas en un mononucleo.

Respecto a la base de datos de este tipo de aplicaciones: no llega a pesar mas de 100 Kb xD ya que solo contiene una especie de hash de aprendizaje y no cada uno de los movimientos posibles.

Saludos