Per testare il calcolo parallelo e l'Hyperthreading avevo la necessita' di un algoritmo parallelizzabile e con una convergenza piuttosto lenta per poter apprezzare le differenze di tempo di calcolo nella versione parallela e non parallela.
Scartato il calcolo di Pi Greco mediante la formula di Gauss (gia' utilizzata in un precedente post) perche' ricorsiva e quindi non parallelizzabile e scartato l'insieme di Mandelbrot perche' comunque un minimo complesso , ho provato a determinare il valore di Pi Greco mediante lo sviluppo in serie di Taylor mediante la formula
La sommatoria converge con estrema lentezza al valore di Pi Greco
Standard (tempo di esecuzione 0.049s)
-----------------------------------------------------
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
float pi_s = 0.0;
for (int n=0; n<100000;++n)
{
pi_s = pi_s + (pow(-1,n)/(2*n+1));
}
cout << "Normale " << pi_s*4 << endl <<endl;
return 0;
}
-----------------------------------------------------
OMP (tempo di esecuzione 0.05s)
-----------------------------------------------------
#include <cmath>
#include <iostream>
#include <omp.h>
using namespace std;
int main()
{
float pi_s = 0.0;
#rpragma omp parallel
{
#pragma omp for reduction(+:pi_s) nowait
for (int n=0; n<100000;++n)
{
pi_s = pi_s + (pow(-1,n)/(2*n+1));
}
}
cout << "Normale " << pi_s*4 << endl <<endl;
return 0;
}
-----------------------------------------------------
GMP (tempo di esecuzione 0.1s)
-----------------------------------------------------
#include <cmath>
#include <iostream>
#include <gmp.h>
using namespace std;
int main()
{
mpf_t pi;
mpf_t transi;
mpf_t print;
int sopra;
int sotto;
//float pi_s = 0.0;
mpf_init_set_ui(pi,0);
mpf_init_set_ui(transi,1);
mpf_init_set_ui(print,0);
for (int n=0; n<100000000;++n)
{
sopra = pow(-1,n);
sotto = (2*n)+1;
mpf_set_si(transi,sopra);
mpf_div_ui(transi,transi,sotto);
mpf_add(pi,pi,transi);
mpf_mul_ui(print,pi,4);
//Calcolo eseguito senza GMP
//pi_s = pi_s + (pow(-1,n)/(2*n+1));
//cout << "Normale " << pi_s*4 << endl <<endl;
}
gmp_printf("Pi %.Ff\n",print);
return 0;
}
-----------------------------------------------------
L'integrazione di OMP e GMP non e' banale perche' se si uniscono i due esempi sopra riportati il compilatore riporta che la variabile pi has invalid type for ' reduction'
venerdì 5 ottobre 2012
giovedì 4 ottobre 2012
Creare progetti Swing/Java con Eclipse e NetBeans
Eclipse
La procedura per creare un progetto Swing con Eclipse ripercorre per le prime fasi quelle descritte nel precedente post
Per creare le interfacce Swing in Eclipse e' necessario utilizzare un Plugin (Window Builder) che comunque e' gia' presente sia nella versione Java di Eclipse sia nel pacchetto dei Google Plugins (http://dl.google.com/eclipse/ plugin/4.2 per la versione di Eclipse Juno)
Si deve creare un Nuovo Progetto Java Application, dopo si seleziona il progetto nella colonna a sinistra del Package Explorer e si crea un nuovo package. A questo punto si clicca sul package e si seleziona New/Other/Swing Designer/Jframe
Al di sotto della finestra di Editor del codice ci sono due tab; tramite questi si puo' accedere all'editor visuale di Swing
NetBeans
Si deve creare un Nuovo Progetto/Java Application. Successivamente si sceglie il nome del progetto e si lascia il flag su Create Main Class ma si cancella il nome della class
A questo punto in Source Packages si legge <default package>. Si clicca destro e si seleziona nuovo JFrame e compare l'editor visuale
La procedura per creare un progetto Swing con Eclipse ripercorre per le prime fasi quelle descritte nel precedente post
Per creare le interfacce Swing in Eclipse e' necessario utilizzare un Plugin (Window Builder) che comunque e' gia' presente sia nella versione Java di Eclipse sia nel pacchetto dei Google Plugins (http://dl.google.com/eclipse/
Si deve creare un Nuovo Progetto Java Application, dopo si seleziona il progetto nella colonna a sinistra del Package Explorer e si crea un nuovo package. A questo punto si clicca sul package e si seleziona New/Other/Swing Designer/Jframe
Al di sotto della finestra di Editor del codice ci sono due tab; tramite questi si puo' accedere all'editor visuale di Swing
NetBeans
Si deve creare un Nuovo Progetto/Java Application. Successivamente si sceglie il nome del progetto e si lascia il flag su Create Main Class ma si cancella il nome della class
A questo punto in Source Packages si legge <default package>. Si clicca destro e si seleziona nuovo JFrame e compare l'editor visuale
Creare PDF in Java
Per creare Pdf da programma in Java esistono diverse soluzioni con differenti potenzialita'
La libreria piu' semplice e' GnuJPdf che gestisce sostanzialmente solo la parte testuale e poco piu' con il
vantaggio di avere una dimensione veramente esigua
GnuJPdf
--------------------------------------------------
package pdf;
import gnu.jpdf.PDFGraphics;
import gnu.jpdf.PDFJob;
import java.awt.Font;
import java.awt.Graphics;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class scrivi {
static OutputStream out;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
out = new BufferedOutputStream (new FileOutputStream (new File ("/home/luca/gnujpdf.pdf")));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
PDFJob job = new PDFJob (out);
Graphics graphics = job.getGraphics ();
((PDFGraphics)graphics).setFont (new Font ("Helvetica", Font.PLAIN, 12));
graphics.drawString ("Esempio di documento PDF", 60, 80);
graphics.drawString ("Linea di testo", 60, 100);
graphics.drawString ("Pagina 1", 60, 120);
// seconda pagina
graphics = job.getGraphics ();
((PDFGraphics)graphics).setFont (new Font ("Helvetica", Font.PLAIN, 12));
graphics.drawString ("Testo su pagina 2", 60, 80);
graphics.drawString ("ancora testo", 60, 100);
graphics.drawString ("Pagina 2", 60, 120);
graphics.dispose ();
job.end ();
}
}
--------------------------------------------------
A questo link il risultato del programma
Altrimenti una libreria molto piu' completa e' data da iText che ha una sintassi sostanzialmente
banale e gestisce anche le immagini (con la possibilita' anche di modificarle al volo)
iText
--------------------------------------------------
package com.test.itext;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
public class Scrivi {
/**
* @param args
* @throws IOException
* @throws MalformedURLException
*/
public static void main(String[] args) throws MalformedURLException, IOException {
BufferedOutputStream out = null;
// TODO Auto-generated method stub
try {
out = new BufferedOutputStream (new FileOutputStream (new File ("/home/luca/itext.pdf")));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Document doc = new Document ();
try
{
PdfWriter.getInstance (doc, out);
doc.open ();
doc.add (new Paragraph ("Esempio di documento Pdf"));
doc.add (new Paragraph ("Linea"));
doc.add (new Paragraph ("Pagina 1"));
//inserisce una immagine in una posizione specifica e la scala
Image immagine = Image.getInstance("/home/luca/grafico.png");
immagine.setAbsolutePosition(100f, 400f);
immagine.scalePercent(70f);
doc.add(immagine);
doc.newPage ();
doc.add (new Paragraph ("Ancora testo"));
doc.add (new Paragraph ("--------------"));
doc.add (new Paragraph ("Pagina due"));
}
catch (DocumentException e)
{
System.out.println ("Fatal PDF error: " + e);
}
doc.close ();
}
}
La libreria piu' semplice e' GnuJPdf che gestisce sostanzialmente solo la parte testuale e poco piu' con il
vantaggio di avere una dimensione veramente esigua
GnuJPdf
--------------------------------------------------
package pdf;
import gnu.jpdf.PDFGraphics;
import gnu.jpdf.PDFJob;
import java.awt.Font;
import java.awt.Graphics;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class scrivi {
static OutputStream out;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
out = new BufferedOutputStream (new FileOutputStream (new File ("/home/luca/gnujpdf.pdf")));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
PDFJob job = new PDFJob (out);
Graphics graphics = job.getGraphics ();
((PDFGraphics)graphics).setFont (new Font ("Helvetica", Font.PLAIN, 12));
graphics.drawString ("Esempio di documento PDF", 60, 80);
graphics.drawString ("Linea di testo", 60, 100);
graphics.drawString ("Pagina 1", 60, 120);
// seconda pagina
graphics = job.getGraphics ();
((PDFGraphics)graphics).setFont (new Font ("Helvetica", Font.PLAIN, 12));
graphics.drawString ("Testo su pagina 2", 60, 80);
graphics.drawString ("ancora testo", 60, 100);
graphics.drawString ("Pagina 2", 60, 120);
graphics.dispose ();
job.end ();
}
}
--------------------------------------------------
A questo link il risultato del programma
Altrimenti una libreria molto piu' completa e' data da iText che ha una sintassi sostanzialmente
banale e gestisce anche le immagini (con la possibilita' anche di modificarle al volo)
iText
--------------------------------------------------
package com.test.itext;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
public class Scrivi {
/**
* @param args
* @throws IOException
* @throws MalformedURLException
*/
public static void main(String[] args) throws MalformedURLException, IOException {
BufferedOutputStream out = null;
// TODO Auto-generated method stub
try {
out = new BufferedOutputStream (new FileOutputStream (new File ("/home/luca/itext.pdf")));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Document doc = new Document ();
try
{
PdfWriter.getInstance (doc, out);
doc.open ();
doc.add (new Paragraph ("Esempio di documento Pdf"));
doc.add (new Paragraph ("Linea"));
doc.add (new Paragraph ("Pagina 1"));
//inserisce una immagine in una posizione specifica e la scala
Image immagine = Image.getInstance("/home/luca/grafico.png");
immagine.setAbsolutePosition(100f, 400f);
immagine.scalePercent(70f);
doc.add(immagine);
doc.newPage ();
doc.add (new Paragraph ("Ancora testo"));
doc.add (new Paragraph ("--------------"));
doc.add (new Paragraph ("Pagina due"));
}
catch (DocumentException e)
{
System.out.println ("Fatal PDF error: " + e);
}
doc.close ();
}
}
-------------------------------------------------------------------
A questo link il risultato del programma
A questo link il risultato del programma
Crea PNG in Java
Per creare una immagine e salvarla in formato PNG in Java si usano le Buffered Images
L'esempio sotto riportato e' sostanzialmente autoesplicativo
-----------------------------------------
package com.test.png;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Scrivi {
private static BufferedImage bimage;
public static void main(String[] args) {
bimage = new BufferedImage(100,100,BufferedImage.TYPE_INT_RGB);
int rgb = 0xFF00FF00;
for (int s=10;s<90;++s) bimage.setRGB(s, s, rgb);
File f = new File("/home/luca/immagine_java.png");
try {
ImageIO.write(bimage, "PNG", f);
} catch (IOException e) {
e.printStackTrace();
}
}
}
L'esempio sotto riportato e' sostanzialmente autoesplicativo
-----------------------------------------
package com.test.png;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Scrivi {
private static BufferedImage bimage;
public static void main(String[] args) {
bimage = new BufferedImage(100,100,BufferedImage.TYPE_INT_RGB);
int rgb = 0xFF00FF00;
for (int s=10;s<90;++s) bimage.setRGB(s, s, rgb);
File f = new File("/home/luca/immagine_java.png");
try {
ImageIO.write(bimage, "PNG", f);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Minix in QEmu
Si crea prima una immagine vuota da 2 Gb per il disco virtuale
qemu-img create minix.img 2G
Poi si imposta il cdrom sulla iso scaricata e hda sul disco virtuale
facendo boot da cdrom
La memoria e' impostata a 256 Mb (anche troppi visti che il
sistema e' operativo e' dichiarato come funzionante con 128 Mb ma
essendo una macchina virtuale ho preferito eccedere
qemu -localtime -m 256 -cdrom minix.iso -hda minix.img -boot d
L'installazione e' banale, basta scegliere la modalita' guidata
e non quella expert
Si riavvia
shutdown
Si fa ripartire Qemu scambiando i dischi e partendo da C
(in questo modo si possono installare i pacchetti extra)
qemu -localtime -m 256 -hda minix.img -cdrom minix.iso -boot c
Per installare i pacchetti addizionali si puo' procedere cosi'
Lista dei pacchetti disponibili
pkgin_cd available | more
Installa GCC
pkgin_cd install gcc44
Installa X11
pkgin_cd install X11
![]() |
| X11/Minix in esecuzione su QEmu |
senza l'accelerazione hardware di KQEmu comunque anche un sistema
operativo leggero come Minix risulta lentissimo all'interno di QEmu
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
Iscriviti a:
Post (Atom)
HF WSPR Protocol
Il protocollo WSPR ( che ricorda Whisper ma in realta' significa Weak Signal Propagation Reporter) e' adatto ad inviare Callsign, G...
-
Aggiornamento questo e' la risposta degli sviluppatori First of all, almost all operating systems on both mobile and laptop/desktop n...
-
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...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...










