Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Cos'è la bolla dell'IA e perché se ne parla
Cos'è la bolla dell'IA e perché se ne parla
Si parla molto ultimamente di "bolla dell'intelligenza artificiale", ma non è sempre chiaro perché: l'IA è una tecnologia molto promettente e che ha già cambiato molte cose dentro e fuori le aziende, ma ci sono enormi aspettative che stanno gonfiando a dismisura i valori delle azioni e distorcendo il mercato. Il che, com'è facile intuire, può portare a una ripetizione della "bolla dotcom", e forse anche di quella dei mutui subprime. Vediamo perché
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-02-2009, 17:16   #1
s12a
Senior Member
 
L'Avatar di s12a
 
Iscritto dal: Jan 2008
Messaggi: 11186
[Java] Mi aiutate ad ottimizzare l'I/O questo breve programma?

Salve.
Premetto che non sono una cima quanto a programmazione, mi diletto semplicemente ogni tanto a creare qualche applicazione a me utile.

Ma passiamo al dunque. Ho creato un breve programma in Java da riga di comando che sostanzialmente fa le seguenti cose:

- Legge un file binario dalla struttura definita
- Inserisce tutti i valori in un array ed esegue alcune operazioni sopra di essi
- Riscrive tutti i valori nell'ordine in cui sono stati prelevati dal file di input in un file di output anch'esso binario

Il problema che ho e` che le operazioni di input/output con i file sono piuttosto lente. Tutto il processo di scrittura e lettura di circa 4 milioni di elementi impiega oltre un minuto di tempo su un Athlon X2 5200+ con hard disk Western Digital 6400AAKS, francamente mi sembra un po' troppo considerando che vorrei poter essere in grado di utilizzare agevolmente anche file 10 volte piu` grandi. La fase della manipolazione dei dati invece e` piuttosto veloce. Io ho il dubbio che il problema risieda nelle funzioni utilizzate, probabilmente non velocissime. Sono effettivamente quelle piu` semplici e le prime che ho trovato e che facevano al caso mio; magari esiste qualcosa di piu` ottimizzato ma meno intuitivo.

Allego qui il codice del programma. Per ragioni pratiche, visto che non ho intenzione di tenere segreto il codice, i commenti sono in inglese. Se avete qualche dubbio su qualche parte non esitate a chiedermi.

Non fate inoltre caso ad eventuali usanze da niubbo del linguaggio di programmazione o alla mancanza di controlli di integrita` dei dati o cose del genere. Il programma e` estremamente semplificato, assolutamente non completo, ed al momento mi interessa piu` che altro sapere se e` possibile aumentare la velocita` delle operazioni di I/O.

Codice PHP:
package qsaconverter;
import java.io.*;

public class 
Main {

    public static 
void main(String[] args) {
        
// Input file stream initialization
        
File file = new File(args[2]);
        
FileInputStream fis;
        
DataInputStream ds;

        
// Output file stream initialization
        
File fileout = new File(args[2] + ".bin");
        
FileOutputStream fos;
        
DataOutputStream out;

        
// Binary SAC files have a header of 632 bytes which is disregarded.
        // The rest of the file is composed of 32 bit floating point words.
        // Size is the number of elements we're going to read from the file
        
final int size = (int)((file.length()-632)/4);

        
// Creating an array as big as the number of elements contained in the input file
        
double temparray[] = new double[size];

        
double maxtemp 0;
        
double sum 0;
        
double volume Double.parseDouble(args[0]);
        
double timestarttimeendtimetotal;

        
// Start time, for benchmarking purposes
        
timestart System.currentTimeMillis();

        try {
            
// Creation of a new input stream
            
fis = new FileInputStreamfile );
            
ds  = new DataInputStreamfis );

            
// Creation of a new output stream
            
fos = new FileOutputStream fileout );
            
out = new DataOutputStream fos );

            
System.out.println("- Loading " size " elements from \"" file "\" and finding maximum absolute value");
            
            
// Skipping the 632 bytes header (composed of 158 words of 4 bytes each)
            
ds.skipBytes(632);

            
// Loading floating point data words in the previously created array
            // Their number is already determinated by the "size" constant
            
for (int i 0i<sizei++) {
                
temparray[i] = ds.readFloat();

                
// Finding the maximum absolute value
                
if (Math.abs(temparray[i]) > maxtemp) {maxtemp Math.abs(temparray[i]);}
            }

            
System.out.println("- Maximum absolute value: " maxtemp);

            
// Calculating the array average value, if args[1] is less than 0
            
if (Double.parseDouble(args[1]) < 0) {
                for (
int i 0i<sizei++) {sum sum temparray[i];}
                
sum sum size;
                
System.out.println("- Average array value: " sum);
            }

            
// If args[1] is greater than 0, the array average value is overridden to a custom value
            
else {
                
sum Double.parseDouble(args[1]);
                
System.out.println("- Maximum absolute value overridden: " sum);
            }

            
// Array values are vertically adjusted to zero and normalized to +/- peak volume
            
System.out.println("- Adjusting offset and normalizing maximum peak to +/- " volume);
            for (
int i 0i<sizei++) {temparray[i] = (temparray[i] - sum)/maxtemp*volume;}

            
// The whole array of double values is finally dumped to a binary file
            
System.out.println("- Writing results to raw 64bit float audio file \"" fileout "\"");
            for (
int i 0i<sizei++) {out.writeDouble(temparray[i]);}

            
// Closing opened files
            
ds.close();
            
out.close();
        }
        catch (
IOException iof)  {System.out.println("- IO error: " iof);}

        
// Elapsing processing time, for benchmarking purposes
        
timeend System.currentTimeMillis();
        
timetotal = (timeend timestart)/1000;

        
System.out.println("- Done in " timetotal " seconds. Please import in Audacity as RAW audio file");

    }

Questo e` l'output da riga di comando con un file di relativamente piccole dimensioni:

Codice:
C:\Users\Enter\Desktop\sac>java -jar qSAConverter.jar 0.75 -1 C:\Users\Enter\Desktop\sac\IRIS_BudDataCenter.2009.53.0.0.0.AV.RSO..EHZ.SAC
- Loading 4068787 elements from "C:\Users\Enter\Desktop\sac\IRIS_BudDataCenter.2009.53.0.0.0.AV.RSO..EHZ.SAC" and finding maximum absolute value
- Maximum absolute value: 2048.0
- Average array value: -4.330911890939486
- Adjusting offset and normalizing maximum peak to +/- 0.75
- Writing results to raw 64bit float audio file "C:\Users\Enter\Desktop\sac\IRIS_BudDataCenter.2009.53.0.0.0.AV.RSO..EHZ.SAC.bin"
- Done in 71.583 seconds. Please import in Audacity as RAW audio file
Qui un file SAC binario di esempio compresso in formato zip di piccole dimensioni che potete utilizzare e convertire con il programma (da usare decompresso):

http://www.mediafire.com/?sharekey=8...21d66e282a0ee8
s12a è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2009, 17:38   #2
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Prova ad aggiungere una BufferedInputStream e una BufferedOutputStream a tutto e vedere se migliori la situazione.

In pratica l'aggiungi tra la FileInputStream e la DataInputStream
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 22-02-2009, 17:48   #3
s12a
Senior Member
 
L'Avatar di s12a
 
Iscritto dal: Jan 2008
Messaggi: 11186
Quote:
Originariamente inviato da AnonimoVeneziano Guarda i messaggi
Prova ad aggiungere una BufferedInputStream e una BufferedOutputStream a tutto e vedere se migliori la situazione.

In pratica l'aggiungi tra la FileInputStream e la DataInputStream
Grazie mille per la dritta!
Il buffered stream ha fatto miracoli, con un file da 797916 elementi il tempo di esecuzione e` passato da circa 14 secondi a 0.184 secondi!
Quello dell'esempio a fine post da oltre 4 milioni di elementi e` passato da 71.583 secondi a 1.127 secondi
s12a è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
SpaceX: un satellite ha fotografato il s...
36 idee regalo con offerte Amazon sotto ...
Sony assume il controllo dei Peanuts: Sn...
DJI Neo scende a 149€ su Amazon, in vers...
Scoperto un nuovo esopianeta che orbita ...
Blue Origin NS-37: successo per la missi...
Potrebbe essere stata rilevata una super...
La cometa interstellare 3I/ATLAS è...
Xiaomi 17 Ultra: l'autonomia non sarà un...
Il processo produttivo a 2 nm di TSMC è ...
L'atteso aggiornamento dei driver della ...
The Elder Scrolls VI nel 2029 e Fallout ...
Il Ryzen 7 9850X3D appare nel catalogo d...
Weekend pre natalizio Amazon, ecco tutte...
Prezzi giù su Oral-B iO: spazzolini elet...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:17.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v