View Full Version : Quanto è + lento il visual Basic rispetto al C++ ?
In realtà dovrei dire Basic (quindi non il compilatore).
A parità di macchina, codice etc .
Mediamente intendo... :)
Originally posted by "McAuriel"
ma come fai a misurare una cosa di questo tipo....
S' fà S' fà ;)
Il Visual Basic è un po' un caso a parte ;) Se avessi due compilatori magari della stessa casa e che hanno le stesse ottimizzazioni allora il confronto lo potresti fare benissimo... Basta immettere lo stesso algoritmo...
per il calcolo numerico il test standard è il prodotto righe per colonne di due matrici (naive): lo scrivi in VB e C++ per i compilatori che ti interessano e fai il confronto dei tempi.
il confronto dei tempi lo puoi fare anche in relazione alle dimensioni delle due matrici, al tipo di variabili, al tipo di allocazione (dinamica o statica).
il confronto è chiaro lo fai a parità di macchina, ma potrebbe essere interessante constatare se all'aumentare delle dimensioni delle matrici oltre la memoria di cache la velocità del Pentium supera quella dell'Athlon (per piccole dimensioni dovrebbe essere Athlon > Pentium).
tra l'altro constato che VB anche nelle versioni for Application si sta sempre più compilando e deinterpretando.
comunque una volta col VB interpretato in senso stretto la differenza col Fortran era il classico 1 a 20 !
anzi se non mi ricordo male era 1 a 20 rispetto al QuickBasic45 (precursore del VB), ma rispetto al QBasic allegato con il DOS era addirittura del tipo 1 a 50 :eek:
adesso, ripeto, mi sembra che VB sia sempre più compilato e veloce.
Originally posted by "a2000"
adesso, ripeto, mi sembra che VB sia sempre più compilato e veloce.
Sì...è compilato...
Se nn dico male il compilatore si VB si appoggia al p-code rendendo più veloce la fase di compilazione, ora non so se anche il C++ sia appoggia ad uno pseudo codice, ma mi sembra che VB sia + voleco del C++, almeno nel mio computer, poi magari mi sbaglio :)
"If you have the Professional or Enterprise edition of Visual Basic, you can compile your code either in standard Visual Basic p-code format or in native code format. Native code compilation provides several options for optimizing and debugging that aren't available with p-code."
Did efault VB6 compila in codice nativo... Erano VB4 e VB3 che si affidavano al p-code e non a caso si poteva ritornare facilmente al sorgente...
Strano perchè nel manuale che ho di VB6 dice che il compilato (non l'exe intendo) ma solo quando si lancia un progetto usa ancora il p-code, poi dopo se si compila il compilatore fa ottimizzazioni sul codice che sono impossibili da decompilare (o quasi) :pig:
Ah...quello sì, è p-code...ma l'exe di default è compilato (basta vedere nelle proprietà del progetto)...
Ho usato uno degli algoritmi postati nel thread dei numeri primi...
Questo è in C++:
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
#define N 10000000
int main()
{
unsigned long n = N;
bool *data = new bool[N];
fill( data , data + n , true );
data[0] = data[1] = false;
int tStart = timeGetTime();
for ( unsigned long i=2 ; i < sqrt(n) ; ++i )
if ( data[i] )
{
unsigned long m = i*2;
do
{
data[m]=false;
m+=i;
}while( m < n );
}
int tEnd = timeGetTime();
cout << tEnd - tStart << endl;
}
E questo in VB:
Const NUM = 10000000
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private Sub Form_Load()
Dim n, i, tStart, tEnd, m As Long
Dim data(NUM) As Boolean
n = NUM
For i = 1 To NUM
data(i) = True
Next i
data(1) = False
tStart = timeGetTime
For i = 2 To Sqr(n)
If data(i) Then
m = i * 2
Do
data(m) = False
m = m + i
Loop While m < n
End If
Next i
tEnd = timeGetTime
MsgBox CStr(tEnd - tStart)
End Sub
L'algoritmo l'ho riportato pari pari...ed il tempo viene preso nella stessa posizione...
Con VC++ : 1699 ms
Con VB p-code : 7560 ms
Con VB EXE compilato : 3999 ms
Le differenze non sono abissali, ma ci sono...
ripeto, il problema standard per giudicare della velocità di esecuzione di codici di calcolo numerico (gli unici veri codici) è il prodotto righe per colonne di due matrici in virgola mobile.
test su numeri interi e derivati sono poco significativi.
quindi fate ste tre righe di codice a tre indici e vediamo chi và più forte (Fortran, VB, C, C++, Pascal ecc.)
(algoritmo standard naive)
:)
pronti, ai posti viaaaaaaaaa
occhio a non fare come la Toyota (Java) :mc:
Originally posted by "cionci"
L'algoritmo l'ho riportato pari pari...ed il tempo viene preso nella stessa posizione...
Con VC++ : 1699 ms
Con VB p-code : 7560 ms
Con VB EXE compilato : 3999 ms
Le differenze non sono abissali, ma ci sono...
Ohhhhhhh finalmente i numeri ! ;)
a2000 ...nun cumncià , u' test sup u' fortran l' avit' già fatte! :D
lishtesso AxB=C (ciao fratello :pig: ) :D
maxithron
24-05-2003, 14:49
Originally posted by "verloc"
nun cumncià , u' test sup u' fortran l' avit' già fatte! :D
Neaples Basic? :D
Originally posted by "maxithron"
Neaples Basic? :D
No slang lucan-apoletano :D
Originally posted by "a2000"
quindi fate ste tre righe di codice a tre indici e vediamo chi và più forte (Fortran, VB, C, C++, Pascal ecc.)
(algoritmo standard naive)
Se ti interessa fallo...non stiamo a moltiplicare matrici tutto il giorno ;)
Originally posted by "cionci"
Se ti interessa fallo...non stiamo a moltiplicare matrici tutto il giorno ;)
io sì ! :D :D
poi la notte passiamo alle figlici :pig: :pig: :cool:
Verlocc, comunque quello devi fare C = A*B, quello è il test canonico. :p
Originally posted by "verloc"
a2000 ...nun cumncià , u' test sup u' fortran l' avit' già fatte! :D
lishtesso AxB=C (ciao fratello :pig: ) :D
a'vimm già fatt ad "algoritmo variabile " ma ad algoritmo (si fa per dire) costante (quello naive) no !
P.S.
uaglio' ma foss' ca fuoss' ricchione ?
Originally posted by "maxithron"
Neaples Basic? :D
beh, non avevano fatto anche un Office tutto in napoletano ?
mi ricordo un Modifica : Accuonz' :D
Originally posted by "a2000"
P.S.
uaglio' ma foss' ca fuoss' ricchione ?
Uagliò...statt' accuort' ca caccie a mullett'
(t' shcumm' e' sang) :mad:
Don Ciccillo Verloc (o' terror' e' Furcell' )
:D :D
propongo un 3D per un databascie di tutte le espressioni dialettali con relativa traduzione, regione, ecc. ecc.
:p
comunque ho fatto una prova col prodotto di matrici naive su PII 350MHz (dopo provo sull'Athlon 1400 e sul PIV 2400):
matrici quadrate 200*200 in doppia precisione:
VBA : 8.35 s
Fortran90 : 0.22 s
:eek:
dopo voglio provare anche l'ostroCoto
Originally posted by "verloc"
Uagliò...statt' accuort' ca caccie a mullett'
(t' shcumm' e' sang) :mad:
Don Ciccillo Verloc (o' terror' e' Furcell' )
Instant Traduction
"Ragazzo stai attento che tiro fuori il coltello a scatto (ti schiumo di sangue)
Don Francesco Verloc,il terrore di Forcella"
maxithron
25-05-2003, 15:03
Originally posted by "a2000"
beh, non avevano fatto anche un Office tutto in napoletano ?
mi ricordo un Modifica : Accuonz' :D
eccolo quà :D
http://www.cintolo.it/programmifra.htm
Originally posted by "verloc"
Instant Traduction
...
ma che cazzon' ca sì ! :D :D
ueeeeeeeeh... tu....
ai fatt' ncazzà a Cioncie :rolleyes:
è che a Montecatini è cominciata la stagione e allora sta' incazzato perchè deve abbandonare l'amato Sturmtruppen e passare all'aCqua minerale ! :D :D
http://forum.hwupgrade.it/faccine/2.gif
Cionci non t'inca@@are, lo sai che ti voglio bene ! http://forum.hwupgrade.it/faccine/46.gif
Non sto proprio a Montecatini...ma sulle colline a circa 5-6 Km da Montecatini...
vedi fratello che abbiamo più di qualcosa in comune:
anch'io sto in collina a 15 km da Rimini ...
e vedo il mare
da Cesenatico a Gabicce ...
ma non vedo l'ora di scapparmene
da questo acquario senza tempo !
Originally posted by "a2000"
da Cesenatico a Gabicce ...
Mica male ;)
Ah...comunque in C++ si fa in un tempo compreso fra 35 e 42 ms...su un Athlon XP @ 2000 Mhz...
allora sei tu che fai le gare :D
certo, e in Fortran anche di meno: infatti il compilatore se la matrice risultato non la usi, la calcola "virtualmente" cioè non la calcola.
comunque stai tranquillo che è sempre e comunque tFortran < tC < tC++.
ma ... vedremo :)
a mio avviso con due banali loop non si vede nulla
si dovrebbe manipolare anche un pò di grafica per gustarne la differenza
nel calcolo numerico (cioè nella cosa più importante per cui sono nati i computer e vengono utilizzati i supercomputer): dalla determinazione dello stato di sforzo e deformazione di una struttura, alla simulazione fluidodinamica, alle previsioni metreologiche o del surriscaldamento terrestre, alla progettazione di una reattore nucleare, al calcolo del campo elettromagnetico intorno ad un'antenna ecc. ecc., il prodotto di due matrici è fondamentale e rappresenta un valido test di confronto di macchine e compilatori.
tanto è vero che l'unità di misura della velocità di calcolo è il FLOPS, "definita originariamente come il numero di operazioni floating-point corrispondenti all'istruzione Fortran: A(I, J) = A(I, J) +T*(A(I, K)"
negli attuali supercomputer i calcoli in questione vengono eseguiti letteralmente migliaia di miliardi di volte al secondo (ma si pensa già a 10^15).
la grafica è contorno. e nei codici seri è utilizzata solo nel pre e post processing con tutto comodo.
i risultati opposti che si ottengono nei test scientifici e in altri test generici per i processori di PC confermano la natura computazionale diversa tra codici di calcolo e software generico (grafica compresa).
e poi scusa che C++ è la grafica ?
colorare a RGB un rettangolo bidimensionale chiamato schermo di vogliamo dire 3200x2400 pixel per, vogliamo dire 100 volte al secondo.
devi ammettere che a confronto di, per esempio, centrare una raffineria a 10000 km di distanza (e come ricostruirla) non rappresenta un beneamato C++ ! :p
mi devi scusare misterx,
però mi sembra che a forza di ca++eggiare con grafica e databascie, per dire, ci siamo persi, per dire, FIAT, Montedison, Olivetti e pure la Birra Peroni con prugna associata !
P.S.
comunque se ti piace la granfica niente da dire, purchè sia di lusso, con rendering a buccia d'arancia e senza ombre (i.e. depilata :pig: ) :D :D
bravo, mi complimento con te
secondo te, un computer viene usato solo dallo scienziato allo scopo di moltiplicare all'infinito 1x1????
:D :D :D
il mio era un discorso più vasto
non osservare la grafica sotto al punto di vista finale
per visualizzare grafica, magari 3D, il linguaggio usato per scrivere il programma dev'essere di buon livello
non mi pare che il VB sia nato per tale scopo (vedi ProE, Catia etc...) ;)
Originally posted by "misterx"
bravo, mi complimento con te
secondo te, un computer viene usato solo dallo scienziato allo scopo di moltiplicare all'infinito 1x1????
dallo scienziato e dall'ingegnere: sì è il suo uso più nobile. :cool:
e nella fattispecie (1x1) il meno entropico.
:p
Originally posted by "misterx"
il mio era un discorso più vasto
più vasto dell'infinito ? :D
comunque misterx non te la prendere, come diceva quello:
"la storia è una cosa molto lunga ma anche molto larga: c'è posto per tutti !"
anche e soprattutto per la granfica ! :D :pig:
P.S.
vieni alla cena ? :)
Comunque operare trasformazioni su una immagine...non è più complesso che lavorare su una matrice... Dopo tutto anche un'immagine è una matrice...
Originally posted by "cionci"
Comunque operare trasformazioni su una immagine...non è più complesso che lavorare su una matrice... Dopo tutto anche un'immagine è una matrice...
benissimo, allora scriviti in VB un programma che ruota una bitmap da 800x600 pixel 24 bit (25 fps) (tempo addietro avevamo affrontato questo problema)
intanto, come dici tu, è una matrice ;)
quello che in definitiva intendevo sottolineare è che ogni linguaggio ha un suo orientamento ben definito, quindi prestazioni molto differenti
se il VB era prestante come molti sostengono, difficilmente sarei passato al C e poi al C++
non penso che VB sia nato per sostituire tutti i linguaggi sviluppati sino ad ora
Originally posted by "misterx"
benissimo, allora scriviti in VB un programma che ruota una bitmap da 800x600 pixel 24 bit (25 fps) (tempo addietro avevamo affrontato questo problema)
intanto, come dici tu, è una matrice ;)
Lo so che ottenere qualcosa di performante quando il numero di righe di codice diventa uno sproposito e molto difficile...non intendevo dire questo... Poi quanto ci scommetti che a2000 ti tira fuori un procedimento per ruotarla in 2 minuti ? Sono trasformazioni derivate dal calcolo numerico...per cui tutto si riduce ad un prodotto fra matrici...
Il problema princiapale in quello che hai fatto te era ottenere un sistema di visualizzazione il più veloce possibile...ma questo dipendeva relativamente dalle capacità di calcolo del PC...
Originally posted by "cionci"
Lo so che ottenere qualcosa di performante quando il numero di righe di codice diventa uno sproposito e molto difficile...non intendevo dire questo... Poi quanto ci scommetti che a2000 ti tira fuori un procedimento per ruotarla in 2 minuti ? Sono trasformazioni derivate dal calcolo numerico...per cui tutto si riduce ad un prodotto fra matrici...
Il problema princiapale in quello che hai fatto te era ottenere un sistema di visualizzazione il più veloce possibile...ma questo dipendeva relativamente dalle capacità di calcolo del PC...
io cmq, continuo a vederla col numero di istruzioni che generano i due linguaggi per ottenere la medesima cosa
P.S.
esistono già algoritmi per ruotare le immagini alla velocità desiderata ;)
misterx, vieni alla cena ?
http://forum.hwupgrade.it/faccine/31.gif
dai che dopo parliamo anche di granfica ! :D
Originally posted by "a2000"
misterx, vieni alla cena ?
http://forum.hwupgrade.it/faccine/31.gif
dai che dopo parliamo anche di granfica ! :D
Come sempre:
"Tarallucci e vino" :)
e come devo fare secondo te:
prima ho gettato il sangue per 1^x = 1,
adesso per la velocità dei computer che si misura in flops
poi sarà la volta dell'uCC++lo che vola più in alto della delta di Dirac ...
allora meglio una sana cena sociale parlando di granfica !
:p
P.S.
tu vieni ?
e cionci ? cionci vieni ?
Originally posted by "a2000"
e come devo fare secondo te:
prima ho gettato il sangue per 1^x = 1,
adesso per la velocità dei computer che si misura in flops
poi sarà la volta dell'uCC++lo che vola più in alto della delta di Dirac ...
allora meglio una sana cena sociale parlando di granfica !
:p
P.S.
tu vieni ?
e cionci ? cionci vieni ?
Se a luglio non prendo il pezzo di carta, l'unico sangue che vedrai sarà il mio :cry:
(Seppuku)
altro che cena !
ricordati del grande Caccioppoli,
che andava a spasso per Corso Umberto p' gall' attaccat all'a zuc' (con il gallo legato alla corda) !
altro che pezzo di carta !
tu ragazzo mio non devi fare la semplice frizione (u' piezz' e' cart') tu devi go-de-re:
cioè diventare un bravo ingegnero civile esperto in clave e archi in pietra http://forum.hwupgrade.it/faccine/9.gif
e quindi ti devo rilassaro e veniro alla grando ceno della seziono programmaziono (e' aia parla' semp' pu' O).
:D
anni addietro, quando leggevo l'ostica Transaction, inserto di Amiga Magazine, ricordo che la prova comparativa tra due o più linguaggi avveniva disassemblando i rispettivi codici eseguibili
già, ma erano altri tempi :)
Originally posted by "a2000"
e cionci ? cionci vieni ?
Fosse più vicino ci farei anche un pensierino... E' periodo di esami...non mi posso permettere di perdere due giorni...
Già vado all'Heineken e perdo due giorni + mal di testa per almeno altri due ;)
Originally posted by "misterx"
anni addietro, quando leggevo l'ostica Transaction, inserto di Amiga Magazine, ricordo che la prova comparativa tra due o più linguaggi avveniva disassemblando i rispettivi codici eseguibili
già, ma erano altri tempi :)
misterx sei sempre OT ! :D
ci vieni alla cena della sezione o no ??????? :confused: :p
allora, cionci, la spostiamo dopo le sessioni di esame.
:)
O ma ragazzi, se aprissimo un toipc (e lo facciamo mettere in rilievo) per la cena, cosi tutti potranno vederlo!! :)
Io cmq proporrei a luglio, altrimenti rinviamo a settembre, poi è un mio parere :p
Originally posted by "matpez"
O ma ragazzi, se aprissimo un toipc (e lo facciamo mettere in rilievo) per la cena, cosi tutti potranno vederlo!! :)
appunto, visto che non ho capito ancora giorno, mese, anno e luogo :)
domani sera a casa tua !
:D :D :D
/\/\@®¢Ø
29-05-2003, 00:11
Se a2000 garantisce la sua presenza vengo anche io :D
se vi portate le sedie, va bene :D
cmq, la prossima volta: sotto di assembler per zoomare sulle effettive righe di codice
solo così si può risalire alla reale bontà o meno di un linguaggio ed ovviamente alla bravura dei suoi creatori
fine dell'OT (anche se a me non sembra molto OT) :)
Originally posted by "misterx"
sotto di assembler per zoomare sulle effettive righe di codice
Se vi interessa faccio al moltiplicazione delle matrici in assembler...così si guarda se sono più bravo io od il compilatore (sicuramente il compialtore ;))
Originally posted by "/\/\@®¢Ø"
Se a2000 garantisce la sua presenza vengo anche io :D
per risolvere il problema una volta per tutte ? :D http://forum.hwupgrade.it/faccine/9.gif
accetto il rischio ! http://forum.hwupgrade.it/faccine/6.gif
chi porta le cassette di prugne ? :pig:
Originally posted by "cionci"
Se vi interessa faccio al moltiplicazione delle matrici in assembler...così si guarda se sono più bravo io od il compilatore (sicuramente il compialtore ;))
quello che volevo dire è che il metodo migliore per capire se vi sono ridondanze o meno di codice è disassemblare :)
Originally posted by "misterx"
quello che volevo dire è che il metodo migliore per capire se vi sono ridondanze o meno di codice è disassemblare :)
Avevo capito...ma in ogni caso non è detto che il codice migliore sia quello che a noi sembra migliore...e nemmeno quello più corto... Le vie delle ottimizzazioni dei compilatori sono infinite ;)
io avrei un approccio più economico (€) e quantitativo: per me l'efficienza di un codice è funzione inversa delle risorse utilizzate, ossia:
tempo di calcolo
memoria dati
memoria di programma
tempo di programmazione
(e una volta c'era anche e c'è ancora adesso per i codici grandi: il tempo di compilazione)
opportunamente pesate con i costi specifici di ogni risorsa.
un altro parametro di merito che si può quantificare è la modificabilità del codice (sempre in termini di risorse necessarie).
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.