2012-01-16 11 views
10

Ho sviluppato un'applicazione di elaborazione delle immagini in Java, ma recentemente mi sono interessato a VALA. Il motivo è perché ritengo di poter aumentare le prestazioni dell'applicazione (la mia preoccupazione è principalmente nell'interconnessione con le librerie C/C++, come sembra < Example> che esiste una punizione per le prestazioni quando si utilizzano i bridge C/C++ in Java).Differenze di prestazioni tra le compilation VALA vs AOT?

sfondo (quello che so):

  • VALA traduce in codice C e poi il suo compilato in un codice macchina nativo.
  • AOT (Java/Mono C#) può anche produrre codici macchina nativi (invece di utilizzare macchine virtuali, ma richiede ancora il pacchetto di runtime).
  • In alcuni casi, l'utilizzo di una macchina virtuale può essere persino più rapido di un codice macchina nativo (in quanto può essere ottimizzato tramite il compilatore JIT).
  • Le librerie C/C++ di consumo possono essere prodotte utilizzando VALA.

C'è qualcosa che sta intorno alla mia testa e non riesco a trovare la risposta:

  1. Can C/C++ le librerie di consumo essere prodotti usando un compilatore AOT? (Non credo).
  2. Il binario AOT prodotto presenta ancora problemi di prestazioni del bridge? (Suppongo lo faccia).
  3. Chiamare le librerie C/C++ in VALA ha le stesse prestazioni del chiamarle da C? (Immagino sia).

Qualche idea?

+0

Questa domanda sembra abbastanza focalizzata per "essere costruttivi"; o almeno collegati e chiusi ai duplicati. –

+0

Scusa, il mio inglese potrebbe non essere così buono. Non sono sicuro del motivo per cui è stato votato per essere chiuso. Grazie per l'upvoting. – lepe

risposta

5

1. Le librerie di consumo C/C++ possono essere prodotte utilizzando un compilatore AOT?

Non dovrebbe essere possibile in quanto non abbiamo intestazioni e non è strettamente una classe C ciò che il compilatore AOT sta creando ma solo il codice macchina.

(Nota: le classi Java possono essere called inside C/C++, ma poiché i compilatori AOT producono un singolo file binario, sono sicuro che non è possibile accedere alle classi Java dall'esterno del file).

Risposta: NO

2. Fa il binario AOT prodotta, ha ancora il problema di prestazioni ponte?

Prima di tutto, dobbiamo sapere: se chiamare una classe C/C++ da Java usando un bridge (come JNI, javacpp, ecc.) Causerà sempre una perdita di prestazioni?

Secondo "W_" da ##[email protected]:

dipende da come si sta chiamando (ad esempio, se gli argomenti devono essere convertiti e simili). Chiamare semplicemente a una funzione di libreria senza argomenti o restituire la conversione di tipo non dovrebbe richiedere tempi diversi rispetto a qualsiasi altra app C.

Ma poiché sto utilizzando JavaCV come bridge per la libreria OpenCV, utilizza diversi tipi di oggetti che, se quanto sopra è vero, dovrebbero influire sulle prestazioni.

Quindi, può essere logico che la compilazione AOT possa velocizzare un po 'l'esecuzione ma deve comunque passare attraverso il bridge ed eseguire la conversione del tipo.

Risposta: Sì (ma potrebbe essere leggermente più veloce)

3. Calling C/C++ in librerie VALA ha le stesse prestazioni come li chiama da C?

Come converte direttamente in C, non vedo una ragione per cui no. Questo è stato supportato da "nemequ" da #[email protected]:

praticamente sì. vala ha l'abitudine di usare variabili temporanee, ma lo è esattamente il genere di cose che la maggior parte dei compilatori può facilmente ottimizzare di distanza. se stai usando gcc, passa -O2 e dovresti essere bravo.

Risposta: SI

Ancora non so perché "qualcuno" ha votato per chiudere la mia domanda e lui/lei non ha nemmeno preso la briga di commentare su di esso. Penso che queste domande/risposte siano abbastanza costruttive (come pst commentate) e potrebbero essere utili per altre persone che sono nuove ai compilatori VALA o AOT.

Se le mie conclusioni non sono corrette, correggimi.

+1

Penso che sia tutto a posto, tranne che Vala usa gobject, e il gobject è noto per essere pesante sia nella costruzione di istanze che nel mantenere il conteggio dei riferimenti. Anche se personalmente preferisco il conteggio dei riferimenti per il suo determinismo sul tracciamento dei netturbini. – lethalman