Y el equipo con el BASIC más rápido es...

Foro dedicado a la programación en todo tipo de sistemas clásicos.
Avatar de Usuario
JoJo
Amiga 1200
Amiga 1200
Mensajes: 1067
Registrado: 03 Feb 2008, 22:45
Sistema Favorito: PC
primer_sistema: PC
consola_favorita: Nintendo SNES
Primera consola: (Otro)
Gracias dadas: 29 veces
Gracias recibidas: 87 veces

Re: Y el equipo con el BASIC más rápido es...

Mensajepor JoJo » 06 Nov 2012, 15:42

Aqui estan los resultados en un IBM 5150, el PC original.

Este esta en su configuracion original, 8088 a 4,77mhz y con el basic rom de IBM. Lo unico 'raro' es la cga que le tengo puesta, que esta modeada con el fontset de un compañero de viejunet, pero esto no afecta a los tests:

Imagen
http://chan.vieju.net/src/1352212475078.jpg

Test 1: 4.74 segundos

Imagen
http://chan.vieju.net/src/1352212500632.jpg

Test 2: 5.96 segundos

Los tests estan hechos con cronometro, sinceramente, no tenia ganas de ponerme a mirar como era en basic para definir un reloj y demas... pero lo he hecho lo mas aproximado posible (echadle un error de +-20 decimas de segundo).
http://www.vieju.net
http://pcp.vieju.net, el Pequeño Computador Personal de 32 bits

garillete
Amiga 2500
Amiga 2500
Mensajes: 3331
Registrado: 08 May 2006, 19:31
Gracias dadas: 284 veces
Gracias recibidas: 516 veces

Re: Y el equipo con el BASIC más rápido es...

Mensajepor garillete » 26 Ago 2015, 13:03

Hoy curioseando cosas de MSX me he topado con este benchmark:

Revista Compute nº 56

Enlace

"To measure just how fast, COMPUTE! Assistant Editor Philip Nelson ran a series of bench­mark tests using a simple bubble sort program. The program was written in plain-vanilla BASIC so it would run unmodified on a variety of popular computers. It creates a numeric array of 150 elements which are then sorted. Although this certainly isn't the most thorough benchmark test that could be devised, it is revealing. Several typical operations are involved, including array dimensioning, looping, and relational comparisons. Here's a listing of the test program:

100 PRINT "CREATING ARRAY"
110 DIM A(150)
120 FOR J = l to 150
130 A(J) = 151–J
140 NEXT J
150 PRINT "SORTING"
160 EX = 0
170 FOR K = 0 TO 149
180 IF A(K) > A(K + 1) THEN T = A(K) : A(K) = A(K + 1) : A(K + 1) = T : EX = 1
190 NEXT K
200 IF EX < > 0 THEN GOTO 160

The only changes made to this program were double colons in line 180 as required for the TI-99/4A. Following are the test results expressed in minutes:seconds.

IBM PC 5:45
GoldStar MSX 6:20
Apple II Plus 6:24
Apple IIc 6:33
Commodore VIC-20 6:34
IBM PCjr 6:59
Commodore 64 7:02
Commodore 8032 7:16
TRS-80 Color Computer 8:01
Commodore 16 8:35
Commodore Plus/4 8:36
Atari 800XL 8:55
Atari 800 9:00
TI-99/4A 12:58

The specific results of this test aren't as important as the general conclusion. Although an MSX-based computer (and virtually any machine designed earlier than about two years ago) could be termed technologically ancient, the stream­lined performance of the MSX is nothing to sneeze at."

En español (pobuered bai guugle trasleit)

Para medir la rapidez, calcule! Asistente de Edición Philip Nelson publicó una serie de pruebas de referencia utilizando un programa simple ordenamiento de burbuja. El programa fue escrito en BASIC llano-vainilla por lo que sería ejecutar sin modificar en una variedad de computadoras populares. Se crea una matriz numérica de 150 elementos que luego se ordenan. Aunque esta no es la prueba de referencia más completa que pueda ser concebido, es revelador. Varias operaciones típicas están involucrados, incluyendo dimensionamiento matriz, de enlace, así como comparaciones relacionales. Aquí está una lista del programa de pruebas:

100 PRINT "CREACIÓN DE ARSENAL"
110 DIM A (150)
120 para j = l 150
130 A (J) = 151-J
140 SIGUIENTE J
150 PRINT "ordenación"
160 EX = 0
170 PARA K = 0 A 149
180 SI A (K)> A (K + 1) ENTONCES T = A (K): A (K) = A (K + 1): A (K + 1) = T: EX = 1
190 SIGUIENTE K
200 SI EX <> 0 THEN GOTO 160

Los únicos cambios realizados en este programa eran dobles signos de dos puntos en la línea 180 como lo requiere para la TI-99 / 4A. Los siguientes son los resultados de la prueba expresados ​​en minutos: segundos.

IBM PC 05:45
Goldstar MSX 06:20
Apple II Plus 06:24
De Apple IIc 06:33
Commodore VIC-20 06:34
IBM PCjr 06:59
Commodore 64 07:02
Commodore 8032 07:16
TRS-80 Color Computer 08:01
Commodore 16 08:35
Commodore Plus / 4 08:36
Atari 800XL 08:55
Atari 800 09:00
TI-99 / 4A 12:58

Los resultados específicos de esta prueba no son tan importantes como la conclusión general. Aunque un equipo basado en MSX (y prácticamente cualquier máquina diseñada antes que hace unos dos años) podría denominarse tecnológicamente antiguo, el rendimiento aerodinámico del MSX es nada despreciable.
Antiguos Bytes.
http://zonadepruebas.org/garillete

Avatar de Usuario
scooter
Amiga 1200
Amiga 1200
Mensajes: 1031
Registrado: 17 Jul 2012, 09:25
primer_sistema: C64
Ubicación: Alicante

Re: Y el equipo con el BASIC más rápido es...

Mensajepor scooter » 26 Ago 2015, 14:36

Curioso que el c64 sea más rápido que el plus4. El reloj del plus4 es prácticamente el doble de frecuencia, eso si al se más cutre el basic v2 que el v3.5 eso ayuda.

En su día hice pruebas de este tipo. En lo que peor iban los commodore era haciendo potencias hasta el punto que era mucho más rápido poner a por a que a cuadrado.

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Y el equipo con el BASIC más rápido es...

Mensajepor mcleod_ideafix » 26 Ago 2015, 14:48

¿Rendimiento aerodinámico? :shock:
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Urusergi
MSX Turbo R
MSX Turbo R
Mensajes: 418
Registrado: 21 Dic 2011, 10:11
Ubicación: Madrid
Gracias dadas: 804 veces
Gracias recibidas: 31 veces

Re: Y el equipo con el BASIC más rápido es...

Mensajepor Urusergi » 26 Ago 2015, 16:44

Parece ser que el Amstrad CPC lo ejecuta en menos de 5 minutos :twisted:

\:D/

Avatar de Usuario
scooter
Amiga 1200
Amiga 1200
Mensajes: 1031
Registrado: 17 Jul 2012, 09:25
primer_sistema: C64
Ubicación: Alicante

Re: Y el equipo con el BASIC más rápido es...

Mensajepor scooter » 26 Ago 2015, 21:24

El basic del "trans-am" es realmente rápido.

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Y el equipo con el BASIC más rápido es...

Mensajepor mcleod_ideafix » 26 Ago 2015, 21:53

El Spectrum tarda en este test (completo, con relleno de matriz y ordenación posterior) la friolera de 9 minutos, 25 segundos

Por cierto: creo que hay un pequeño fallo en el listado BASIC (fallo que está también en el listado de la revista): el bucle que va de 0 a 149 debería ir de 1 a 149. El elemento 0 no suele existir en los vectores dimensionados en BASIC estándar (y no he visto ninguna sentencia del tipo OPTION BASE 0 en el listado)

-- Actualizado 26 Ago 2015, 21:05 --

scooter escribió:En lo que peor iban los commodore era haciendo potencias hasta el punto que era mucho más rápido poner a por a que a cuadrado.

Habitualmente siempre es más lento multiplicar n*n que hacer n^2 sobre todo si el compilador/intérprete no identifican la última operación con una simple multiplicación de n*n. La razón es que n^2 lo toman como un caso más de la operación general de potenciación a^b que se calcula como e^(b*ln a) por lo que son bastantes más operaciones: e^n (antilogaritmo natural) y ln n (logaritmo natural) necesitan una expansión polinomial (Tchebyshev, Taylor, o la que sea) que consume un montón de multiplicaciones ya por ellas mismas, mientras que n*n consume una única operación de multiplicación.

Una operación como ésta:

Código: Seleccionar todo

10 LET a=0: FOR n=1 TO 10: LET a=a+n*n: NEXT n


Le lleva a un Spectrum 0.12 segundos, mientras que si cambio n*n por n^2 la cosa sube a 1.22 segundos.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
na_th_an
Amiga 1200
Amiga 1200
Mensajes: 1273
Registrado: 10 Oct 2012, 11:17
Sistema Favorito: (Otro)
primer_sistema: Spectrum +2
consola_favorita: Sony PlayStation 1
Primera consola: Sega Master System
Gracias dadas: 18 veces
Gracias recibidas: 15 veces

Re: Y el equipo con el BASIC más rápido es...

Mensajepor na_th_an » 26 Ago 2015, 23:50

Jodó, ¿y tan difícil era hacer esa optimización? Para calcular n^m, si m es menor o igual al número de coeficientes que vas a calcular en el polinomio, hacer mejor las m-1 multiplicaciones... Ya sé que el espacio en ROM es pequeño, pero tampoco es que sea algo muy heavy,.

Avatar de Usuario
mcleod_ideafix
Amiga 2500
Amiga 2500
Mensajes: 5316
Registrado: 06 Oct 2009, 04:12
Sistema Favorito: Spectrum 16Kb/48Kb
primer_sistema: Spectrum 16Kb/48Kb
consola_favorita: Vectrex
Primera consola: TV Games/Pong Clone
Ubicación: Jerez de la Frontera
Gracias dadas: 12 veces
Gracias recibidas: 54 veces
Contactar:

Re: Y el equipo con el BASIC más rápido es...

Mensajepor mcleod_ideafix » 27 Ago 2015, 00:34

na_th_an escribió:Jodó, ¿y tan difícil era hacer esa optimización? Para calcular n^m, si m es menor o igual al número de coeficientes que vas a calcular en el polinomio, hacer mejor las m-1 multiplicaciones... Ya sé que el espacio en ROM es pequeño, pero tampoco es que sea algo muy heavy,.


Probablemente no haya espacio en ROM para eso, o lo más seguro es que sencillamente el creador del intérprete cuente con que el programador sepa de antemano que es más rápido una multiplicación que una potencia y realice la optimización a mano. Vamos: lo mismo que se aplica a cualquier otro lenguaje, compilado o interpretado hoy día. Por ejemplo, no lo sé seguro, pero diría que la función de la librería matemática de C pow(a,b) no reconoce automaticamente si a ó b son enteros, para hacer las multiplicaciones directamente en lugar de hacerlo por logaritmos. Como mucho, reconoce que a es negativo para evitar hacer el logaritmo de un número negativo ó 0, que no existe.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista

Avatar de Usuario
scooter
Amiga 1200
Amiga 1200
Mensajes: 1031
Registrado: 17 Jul 2012, 09:25
primer_sistema: C64
Ubicación: Alicante

Re: Y el equipo con el BASIC más rápido es...

Mensajepor scooter » 27 Ago 2015, 08:16

Pues tiene lógica lo que dices. Si hubiese una función de elevar al cuadrado no, pero como la función es la potencia general. ¿Y hacer un bucle forma next sería más rápido?

En un 'sistema operativo' (es que no tengo abuelita) que hice, puse dos funciones de multilicar y de dividir. Una era genérica de 16 × / ÷ 16 bits y luego hice una optimizada de 16 bits × / ÷ el número 10 ya que esa se usa mucho (o al menos yo la usaba) para pasar números de binario a ascci y enviarlos por el puerto serie. Aunque el 8052 multiplica y divide es para 8 bits.
Lo que pasa es que eso ocupa casi el doble mientras que en la ROM del spectrum creo que quedan 2 bytes libres.


Volver a “Programación”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados