Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-08-2010, 11:41   #1
Bronsa
Junior Member
 
Iscritto dal: May 2008
Messaggi: 21
[lisp] calcolatore pigreco

Boh mi annoiavo e così ho scritto questo script in Common Lisp che calcola n cifre di pi greco, utilizzando la formula di Machin,e la serie di Taylor per calcolare l'arcocotangente

per rendere piu' veloce l'esecuzione e per evitare stack overflow ha usato tail-recursion, con il quale sovrascrive continuamente lo stesso segmento di stack ad ogni ricorsione senza riempire la memoria ed evitare, appunto stackoverflow

inoltre per evitare di thrownare in floating-point-overflow ,ho deciso di operare su interi anziche' su floating

il tempo di esecuzione quadruplicizza al raddoppiare delle cifre da trovare; sul mio pc per calcolare 50mila cifre dopo la virgola impiega 15secondi, fate i conti voi.
===EDIT==
con la nuova version impiaga sulla mia macchina 17 secondi per calcolare 100mila cifre

il codice e' implementation dependent, l'ho volutamente reso compatibile solo usando sbcl dall momento che è l' unica implementazione in grado di svolgere questi conti e lo fa ottimamente poichè a differenza di altre implementazioni, compila in codice macchina anziche bytecode

purtroppo a causa dei limiti imposti dal linguaggio, viene eseguito senza sfruttare il multi core, l'unico modo che ho trovato per risolvere, è calcolare in parallelo su 2 thread diversi le 2 arcocotangenti, che limita comunque a massimo 2 core utilizzati


il sorgente si trova su http://sprunge.us/eCPK?cl
====EDIT==== dopo varie modifiche ho ottenuto un aumento delle prestazioni pari a circa del 70 %, il codice aggiornato è qui http://sprunge.us/cYNY?cl

commenti e suggerimenti sono ben accetti

P.S se riesco a trovare un modo per trasformare floating in interi anche con l'algoritmo di Gauss-Legendre, implementero quello che rendera' il calcolo _molto_ più veloce
Bronsa è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2010, 14:30   #2
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
ciao, dando una rapida occhiata col profiler la maggior parte del tempo viene passato nelle operazioni tra bignum o altre funzioni interne di sbcl, per cui a meno di ridurre le operazioni stesse (o di cambiare algoritmo ovviamente) riuscirai a limare poco (ad esempio hai provato a spezzare in due arccos in modo da non dover moltiplicare per il segno, o di sfruttare entrambi i valori di floor ?).
In generale comunque quando vuoi ottenere le massime prestazioni aggiungi in cima al codice
Codice:
(declaim (optimize speed))
In questo modo il compilatore salta un po' di controlli (ad esempio i bound degli array); se il programma e' corretto va piu' veloce, se non lo e' rischi che crashi.
Inoltre nelle funzioni piu' interne e' buona cosa specificare il tipo dei dati
Ad esempio
Codice:
(defun arccot (x-rest n x-elevate sign product)
  "Arccotangent calculator, using Taylor series"
  (declare (type fixnum sign)
            (type integer x-rest n x-elevate product))
...
Aumenta la velocita' delle operazioni numeriche , perche' il compilatore non deve aggiungere il codice per controllare il tipo dell'argomento.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 20-08-2010, 16:02   #3
Bronsa
Junior Member
 
Iscritto dal: May 2008
Messaggi: 21
guarda, mi son dimenticato di postare ma questa mattina mi son accorto di essermi dimenticato e ho inserito (declaim (optimize (speed 3) (safety 0) (debug 0)))

Per il fatto di definire il tipo delle variabili esplicitamente, non ci avevo pensato

Intendi una cosa tipo
(defun arccot+ (..)
...
(arccot- ..))
(defun arccot- (..)
...
(arccot+ ..))
?

==EDIT==
Effettivamente creando 2 funzioni ho guadagnato un pò di ottimizzazione...
http://sprunge.us/JgaZ?cl

Ultima modifica di Bronsa : 20-08-2010 alle 16:32.
Bronsa è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Dopo 23 anni di silenzio, Warcraft 3 spi...
Roblox sfida l'ecosistema gaming: app st...
OpenAI accusata di plagio dai migliori m...
Altro attacco hacker dell'IA: gli agenti...
Stiamo davvero perdendo il controllo del...
Microsoft perde un pilastro: Frank Shaw ...
Diablo V annunciato a sorpresa: il colpo...
Meno di 5 euro per il 5G: l'offerta Kena...
World of Warcraft: Forever è il Classic+...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
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: 19:07.


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