mercoledì 3 ottobre 2012
Copiare Debian Live IMG su chiavetta USB
Per copiare i file scaricati da qui, dopo aver inserito la chiavetta USB, si deve digitare
dd if=debian-live-6.0.4-amd64-gnome-desktop.img of=/dev/sdb
ovviamente si deve vedere (mediante tail /var/log/messages dove si e' posizionata la chiavetta USB, in questo caso /dev/sdb)
Attenzione : il comando non ha un output per cui si deve attendere con pazienza fino a quando non si ritorna al prompt
GCC vs CLang vs ICC
Mi sono incuriosito del progetto LLVM/CLang ed ho voluto metterlo alla prova in confronto con Gcc e Icc utilizzando quanto gia' scritto in questo post
Di seguito i risultati
Gcc
real 0m1.613s
user 0m0.956s
sys 0m0.028s
Icc (Intel compiler)
real 0m1.064s
user 0m0.632s
sys 0m0.024s
CLang
real 0m0.983s
user 0m0.588s
sys 0m0.028s
Immagine ripresa da Google Images |
Di seguito i risultati
Gcc
real 0m1.613s
user 0m0.956s
sys 0m0.028s
Icc (Intel compiler)
real 0m1.064s
user 0m0.632s
sys 0m0.024s
CLang
real 0m0.983s
user 0m0.588s
sys 0m0.028s
In conclusione Gcc ne esce sempre con le ossa rotte ...c'e' da dire tuttavia che CLang e' un progetto piuttosto giovane e non permette di fare tutto cio' che e' possibile con Gcc
Hyperthreading e Open MP su Atom N450
Stavo pensando di iniziare a studiare la programmazione parallela quando mi sono accorto che tutte le mie macchine sono vecchiotte (ad esclusione del portatile di mia moglie che pero' e' intoccabile) e non sono provviste di un processore dual core. Avevo quasi abbandonato l'idea quando leggendo ho scoperto che il processore N450, pur essendo Single Core, possiede l'HyperThreading ovvero la capacita' di gestire piu' thread sul un solo core
Digitando il comando lscpu infatti si legge che
Architecture: i686
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 2
Thread(s) per core: 2
Core(s) per socket: 1
CPU socket(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 28
Stepping: 10
CPU MHz: 1662.438
L1d cache: 24K
L1i cache: 32K
L2 cache: 512K
Si vede chiaramente la presenza di un solo core ma i thread risultano due per cui e' possibile fare calcolo parallelo su N450
Incuriosito mi sono chiesto se anche l'HP DC5100 SFF dotato di Pentium 4 Processor 640 with HT Technology 2.8 GHz poteva fare calcolo parallelo
Digitando lscpu e' apparso uno sconfortante
Architecture: i686
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
Vendor ID: GenuineIntel
CPU family: 15
Model: 4
Stepping: 9
CPU MHz: 2793.347
BogoMIPS: 5586.69
L1d cache: 16K
L2 cache: 1024K
In un solo core con un solo thread?? Il problema e' stato risolto entrando nel BIOS ed abilitando lo switch dell'Hyperthreading. Una volta riavviata la macchina il risultato e' stato
Architecture: i686
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 2
Core(s) per socket: 1
Socket(s): 1
Per testare l'effettivo utilizzo di HyperThreading ho usato il programma sotto riportato utilizzando OpenMP, una libreria per distribuire il calcolo
Il programma inizializza con il valore del seno un array molto grande, prima senza l'utilizzo di Hyperthreading e poi con
La prima prova, in modalita' standard, deve essere compilato con g++ -Wall -O3 test_no.cpp -o test_no
---------------------------------------
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
const int size = 100000;
double tabella[size];
for (int n=0; n<size;++n)
{
tabella[n] = sin(2*M_PI*n/size);
}
return 0;
}
---------------------------------------
#include <cmath>
#include <omp.h>
#include <iostream>
using namespace std;
int main()
{
const int size = 100000;
double tabella[size];
int id;
int proc0,proc1;
#pragma omp parallel for
for (int n=0; n<size;++n)
{
id = omp_get_thread_num();
tabella[n] = sin(2*M_PI*n/size);
if (id == 1) proc1++;
else
proc0++;
}
cout << "0: "<< proc0 << " | 1: "<<proc1;
return 0;
}
0: 50000 | 1: 50000
I tempi di caloolo sono pero' a favore della versione standard
Tempo con utilizzo dei thread
real 0m0.021s
user 0m0.020s
sys 0m0.012s
Tempo senza utilizzo dei thread
real 0m0.003s
user 0m0.000s
sys 0m0.004s
L'altra cosa divertente che ho scoperto e' che il mio Samsung N150 Plus esegue correttamente anche Debian a 64 Bit anche se,l leggendo qua e la', non ci sono particolari motivi di utilizzare 64 bit su una macchina con un solo Gb di Ram
Atom N450 |
Architecture: i686
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 2
Thread(s) per core: 2
Core(s) per socket: 1
CPU socket(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 28
Stepping: 10
CPU MHz: 1662.438
L1d cache: 24K
L1i cache: 32K
L2 cache: 512K
P4 640 3.2 GHz |
Incuriosito mi sono chiesto se anche l'HP DC5100 SFF dotato di Pentium 4 Processor 640 with HT Technology 2.8 GHz poteva fare calcolo parallelo
Digitando lscpu e' apparso uno sconfortante
Architecture: i686
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Socket(s): 1
Vendor ID: GenuineIntel
CPU family: 15
Model: 4
Stepping: 9
CPU MHz: 2793.347
BogoMIPS: 5586.69
L1d cache: 16K
L2 cache: 1024K
In un solo core con un solo thread?? Il problema e' stato risolto entrando nel BIOS ed abilitando lo switch dell'Hyperthreading. Una volta riavviata la macchina il risultato e' stato
Architecture: i686
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 2
Core(s) per socket: 1
Socket(s): 1
Per testare l'effettivo utilizzo di HyperThreading ho usato il programma sotto riportato utilizzando OpenMP, una libreria per distribuire il calcolo
Il programma inizializza con il valore del seno un array molto grande, prima senza l'utilizzo di Hyperthreading e poi con
La prima prova, in modalita' standard, deve essere compilato con g++ -Wall -O3 test_no.cpp -o test_no
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
const int size = 100000;
double tabella[size];
for (int n=0; n<size;++n)
{
tabella[n] = sin(2*M_PI*n/size);
}
return 0;
}
---------------------------------------
La seconda, che utilizza invece OpenMP si compila con g++ -Wall -O3 test.cpp -o test -fopenmp
#include <cmath>
#include <omp.h>
#include <iostream>
using namespace std;
int main()
{
const int size = 100000;
double tabella[size];
int id;
int proc0,proc1;
#pragma omp parallel for
for (int n=0; n<size;++n)
{
id = omp_get_thread_num();
tabella[n] = sin(2*M_PI*n/size);
if (id == 1) proc1++;
else
proc0++;
}
cout << "0: "<< proc0 << " | 1: "<<proc1;
return 0;
}
---------------------------------------
come si vede dall'output il carico di lavoro e' stato equamente diviso tra il thread 0 ed il thread 1 che hanno ciascuno effettutao 50000 cicli dei 100000 previsti0: 50000 | 1: 50000
Tempo con utilizzo dei thread
real 0m0.021s
user 0m0.020s
sys 0m0.012s
Tempo senza utilizzo dei thread
user 0m0.000s
sys 0m0.004s
L'altra cosa divertente che ho scoperto e' che il mio Samsung N150 Plus esegue correttamente anche Debian a 64 Bit anche se,l leggendo qua e la', non ci sono particolari motivi di utilizzare 64 bit su una macchina con un solo Gb di Ram
Debian Live 64 Bit su N450 |
martedì 2 ottobre 2012
Creare grafici in Java con JFreeChart
Per creare grafici con Java ho prima effettuato qualche prova con charts4j ma necessita costantemente il collegamento con Internet in quanto la vestizione del grafico e' fatto con le API di Google Charts per cui ho optato per JFreeChart...l'unico problema e' che di fatto sul sito non vengono presentati esempi ma solo Javadoc per cui non e' facilissimo iniziare (vendono il libro con le istruzioni :<<)
Comunque googlando si trovano dei semplici esempi per iniziare
Per prima cosa si deve inserire nel progetto le due librerie jcommon e jfreechart
Successivamente il codice e' sostanzialmente autoesplicativo
---------------------------------------------------
package gr;
import java.io.File;
import java.io.IOException;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
public class grafico {
/**
* @param args
*/
public static void main(String[] args) {
XYSeries series = new XYSeries("Misure sperimentali");
series.add(1,2);
series.add(3,5);
series.add(7,25);
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
JFreeChart chart = ChartFactory.createXYLineChart("Grafico XY", "Misura X", "Misura Y", dataset, PlotOrientation.HORIZONTAL, true, true, false);
try {
ChartUtilities.saveChartAsJPEG(new File("/home/luca/grafico.jpg"), chart, 500, 300);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
---------------------------------------------------
Comunque googlando si trovano dei semplici esempi per iniziare
Per prima cosa si deve inserire nel progetto le due librerie jcommon e jfreechart
Progetto di Eclipse |
Successivamente il codice e' sostanzialmente autoesplicativo
---------------------------------------------------
package gr;
import java.io.File;
import java.io.IOException;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
public class grafico {
/**
* @param args
*/
public static void main(String[] args) {
XYSeries series = new XYSeries("Misure sperimentali");
series.add(1,2);
series.add(3,5);
series.add(7,25);
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
JFreeChart chart = ChartFactory.createXYLineChart("Grafico XY", "Misura X", "Misura Y", dataset, PlotOrientation.HORIZONTAL, true, true, false);
try {
ChartUtilities.saveChartAsJPEG(new File("/home/luca/grafico.jpg"), chart, 500, 300);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
---------------------------------------------------
lunedì 1 ottobre 2012
Cyberduck vs Filezilla su MacMini
Come da post precedente mi sono ritrovato a dover copiare circa 96 Gb di dati (circa 15000 file) da un Mac Mini su un altro calcolatore via Ftp
Avevo gia' installato a suo tempo CyberDuck e quindi ho iniziato ad usare questo programma...peccato che in modo non prevedibile a volumi di traffico compresi tra i 5Gb ed i 7 Gb la connessione veniva interrotta
Installato Filezilla tutti i file sono stati copiati al primo tentativo senza errori.
ProFtpD e Gadmin-ProFtpD
In questi giorni ho avuto la necessita' di trasferire circa 96 Gb di dati (circa 15000) file da un MacMini non affidabile su un altro disco. Per fare cio' non volendo perdere tempo con il trasferimeto USb su un disco esterno ho provato a scambiare i dati tra il MacMini ed una Linux Box mediante collegamento di rete via Ftp con cavo cross.
Per fare cio' ho installato Proftp su Linux come server ed ho usato il MacMini come client.
L'installazione del server e' banale
apt-get install proftpd
volendo esagerare ho installato anche Gadmin-ProFtpd (per l'amministrazione grafica del server) e qui sono iniziati i problemi perche' e' apparso il messaggio di errore
- Fatal: TLSRSACertificateFile: '/etc/gadmin-proftpd/certs/cert.pem' does not exist on line 58 of '/etc/proftpd/proftpd.conf'
ed il server si e' rifiutato di partireQuesto e' un bug di Gadmin (come ho scoperto piu' tardi) che modifica i file di configurazione di ProFtpd per cercare i file dei certificati SSL nella propria directory di configurazione e non in quella di Proftpd.
Disinstallato Gadmin e modificato il file di configurazione di Proftd tutto ha funzionato sul lato server (se non installavo Gadmin tutto avrebbe funzionato senza problemi)
Non e' necessario ma se si ha bisogno di una sessione SSL su ProFtpd si puo' procedere cosi
apt-get install openssl
mkdir /etc/proftpd/ssl
openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem
Creare progetto Java con Eclipse
Per Creare un nuovo progetto con Eclipse dotato del plugin per Java si deve in ordine creare un nuovo progetto (File/Nuovo/Progetto Java)
Poi si deve creare il nuovo Package
E poi si crea la nuova classe
facendo attenzione di spuntare il flag che crea la main
A questo punto si puo' iniziare a scrivere il codice
Nuovo Progetto |
Nuovo Progetto |
Poi si deve creare il nuovo Package
Aggiungi didascalia |
facendo attenzione di spuntare il flag che crea la main
A questo punto si puo' iniziare a scrivere il codice
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...