|
|
|
![]() |
|
Strumenti |
![]() |
#281 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
|
![]() |
![]() |
![]() |
#282 |
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Compilato, ma:
BadImageFormatException An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B) ![]() Edit: Risolto, compilava un pezzo in x86 e l'altro in x64. Ultima modifica di ||ElChE||88 : 19-10-2008 alle 22:06. |
![]() |
![]() |
![]() |
#283 |
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Quello di gugoXX occupa 600MB di RAM con i file "piccoli", 1300MB con i file grandi.
![]() autore (compilatore): tempo (piccoli ~50MB) / tempo (grandi ~90MB) - rapporto cionci (C++ - GCC): 6058ms / 11930ms - 1.97 cionci (C++ - VS): 5753ms / 11461ms - 1.99 repne (C - GCC): 1563ms / 3186ms - 2.03 repne (C - VS): 1541ms / 3006ms - 1.95 gugoXX (C# / C++ - VS): 38577ms / 98240ms - 2.54 Vista x86-64 Intel T9300 @ 2.50GHz 4.00GB RAM VS = Visual Studio 2008, GCC = GCC 4.3.2-tdm-1 |
![]() |
![]() |
![]() |
#284 |
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quanto sto invidiando la tua RAM, stasera non riesco a fare nulla per quanto mi swappa tutto...
![]()
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
![]() |
![]() |
![]() |
#285 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Scusate, ci sono per caso delle altre versioni di file grandi?
A me con quello che pensavo essere il piu' grande ci mette 33secondi (e ho solo 2GB di ram), come mai tutta questa differenza? Elche, Ma il tuo e' un dual core o core singolo?
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#286 | ||
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Quote:
![]() |
||
![]() |
![]() |
![]() |
#287 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Oppure puoi crearteli a piacere con i sorgenti che ha postato repne:
LOTTO.D1: Codice:
#include <stdio.h> #include <time.h> #include <stdlib.h> #define RUOTE 250 #define ESTRAZIONI 4000 #define LUNG_NOME_RUOTE 16 #define OUTPUT_FILE_NAME "LOTTO.D1" #define VALORI 6 #define Y_MIN 1980 #define RANGE_Y 40.0 int main(void) { FILE *output_file_handle; time_t t; int m,g,a; unsigned long i,j,k,l; char nome_ruote[RUOTE][LUNG_NOME_RUOTE+1],table_lotto[90]; double g_mese[12]={31.0,28.0,31.0,30.0,31.0,30.0,31.0,31.0,30.0,31.0,30.0,31.0}; srand((unsigned)time(&t)); for(i=0;i<RUOTE;i++) { for(j=0;j<LUNG_NOME_RUOTE;j++) nome_ruote[i][j]=(rand()*26.0)/(RAND_MAX+1.0)+'A'; nome_ruote[i][j]=0; } if((output_file_handle=fopen(OUTPUT_FILE_NAME,"wt"))==NULL) { fprintf(stderr,"Non riesco a creare il file " OUTPUT_FILE_NAME "\n"); return 1; } fprintf(output_file_handle,"Ruote %d\n",RUOTE); fprintf(output_file_handle,"Valori %d\n",VALORI); for(i=0;i<(RUOTE*ESTRAZIONI);i++) { m=(rand()*12.0)/(RAND_MAX+1.0)+1; g=(rand()*g_mese[m-1])/(RAND_MAX+1.0)+1; a=(rand()*RANGE_Y)/(RAND_MAX+1.0)+Y_MIN; fprintf(output_file_handle,"%.2d/%.2d/%.4d %s ",g,m,a,nome_ruote[i%RUOTE]); for(j=0;j<90;j++) table_lotto[j]=0; for(j=0;j<VALORI;j++) { k=(rand()*(90.0-j))/(RAND_MAX+1.0)+1; l=0; do { if(table_lotto[l++]==0) k--; } while (k); table_lotto[l-1]=1; fprintf(output_file_handle,"%d",l); if(j!=(VALORI-1)) fprintf(output_file_handle,","); } fprintf(output_file_handle,"\n"); } if(fclose(output_file_handle)) { fprintf(stderr,"Errore interno: 001\n"); return 1; } return 0; } Codice:
#include <stdio.h> #include <time.h> #include <stdlib.h> #define FIND 10000 #define MIN_G 4 #define MAX_G 5 #define OUTPUT_FILE_NAME "LOTTO.D2" int main(void) { FILE *output_file_handle; time_t t; char table_lotto[90]; unsigned long i,j,k,l,m; srand((unsigned)time(&t)); if((output_file_handle=fopen(OUTPUT_FILE_NAME,"wt"))==NULL) { fprintf(stderr,"Non riesco a creare il file " OUTPUT_FILE_NAME "\n"); return 1; } fprintf(output_file_handle,"Find %d\n",FIND); for(i=0;i<FIND;i++) { for(j=0;j<90;j++) table_lotto[j]=0; m=(rand()*(MAX_G-MIN_G+1))/(RAND_MAX+1.0); for(j=0;j<(MIN_G+m);j++) { k=(rand()*(90.0-j))/(RAND_MAX+1.0)+1; l=0; do { if(table_lotto[l++]==0) k--; } while (k); table_lotto[l-1]=1; fprintf(output_file_handle,"%d",l); if(j!=(MIN_G+m-1)) fprintf(output_file_handle,","); } fprintf(output_file_handle,"\n"); } if(fclose(output_file_handle)) { fprintf(stderr,"Errore interno: 001\n"); return 1; } return 0; } |
![]() |
![]() |
![]() |
#288 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
estensione 7z?
Cos'e' uno scherzo? Potevate usare zoo, Schiper, Ace o KGB... ![]() Quelli grandi iniziano con? Codice:
Ruote 250 Valori 6 01/12/2010 HXXZLVFGBQTQVXVH 31,36,81,11,85,47 22/10/1982 UYEEEIKQBCBQARBS 36,78,80,73,15,27 24/05/1988 EMEXAARYADAVOCIV 32,30,24,6,61,73 Lo dicevo che il lotto e' pilotato
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 19-10-2008 alle 22:59. |
![]() |
![]() |
![]() |
#289 | |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Devi chiedere a Elche. |
|
![]() |
![]() |
![]() |
#290 | ||
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Il T9300 è un dual core (Penryn - per portatili).
Quote:
Codice:
Ruote 250 Valori 6 15/05/1980 SMOTOKJSEWAXWLCA 77,14,47,42,67,21 04/01/1984 GNCFNADNXFCICHUS 3,32,55,84,16,85 14/03/2001 EPZZSPDSTZXMMZVH 85,28,53,17,90,68 Quello che dici tu è grande 46MB (è quello da 38 sec). Quote:
Comunque non c'è differenza tra 2GB e 4GB di RAM, il picco di consumo del programma è di 1.3GB con i file da 90MB. Ultima modifica di ||ElChE||88 : 19-10-2008 alle 23:23. |
||
![]() |
![]() |
![]() |
#291 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Certo, ora ho capito.
Mi ero tarato su quello che pensavo essere il file grande, e che invece e' piccolo. Ho un 3GHz dual core e 2GB. Vedremo se mi verra' in mente qualcos'altro. Volevo provare un algoritmo diverso, ma non e' vincente (almeno per altri 2/3 anni)
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#292 | |
Member
Iscritto dal: Nov 2001
Messaggi: 206
|
Quote:
Fate contest anche con Cuda? Sarebbe interessante vedere la differenza con una compilazione in cuda. |
|
![]() |
![]() |
![]() |
#293 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
No, l'ho semplicemente fatto multicore, ma anche la prima versione era cosi' e con performance non cosi' penose. Vediamo, forse mi sta venendo in mente qualcosa per ridurre.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#294 |
Member
Iscritto dal: Nov 2001
Messaggi: 206
|
Ma anche la programmazione GPGPU è multicore. In particolare ho dato un'occhiata a cuda. Volevo utilizzarlo per costruire un motore IA, ma ho dovuto rimandare a tempi migliori perchè in questo periodo devo finire un'altro proggetto. A prima vista mi sembra troppo incasinato il sistema per gestire più processi. Forse è meglio attendere le schede multicore di intel basate su singoli core x86 (non ricordo il nome).
|
![]() |
![]() |
![]() |
#295 | |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
|
|
![]() |
![]() |
![]() |
#296 |
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Uso Process Explorer, niente di complicato. Purtroppo la mia conoscenza delle API Windows è quasi nulla...
|
![]() |
![]() |
![]() |
#297 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ma i tempi li hai ottenuti utilizzando le ottimizzazioni ?
|
![]() |
![]() |
![]() |
#298 | |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
http://technet.microsoft.com/en-us/s.../bb896653.aspx |
|
![]() |
![]() |
![]() |
#299 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ohé, ho misurato le performance di Repne e Cionci con Process Explorer:
Codice:
AMD Athlon(tm) 64 X2 Dual Core Processor 4800+ 2.50 GHz 896 MB di RAM Microsoft Windows XP Professional (32 bit) Service Pack 3 ![]() Cionci: ![]() Le misure sono effettuate utilizzando il file più grosso(circa 88 MB). |
![]() |
![]() |
![]() |
#300 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Vincenzo, prova questo, dovrebbe essere un po' più veloce (sul mio il 25%), soprattutto se il tuo compilatore non ottimizza bene la STL dovrebbe rendere meglio. Ora guardo di togliere tutti i vector senza perdere prestazioni, e vi devo dire che su GCC 4.2 è davvero difficile, soprattutto nel caso in cui non si sappia a priori la dimensione da allocare. Proverò con un'allocazione a blocchi.
Codice:
#include <algorithm> #include <iostream> #include <fstream> #include <string> #include <vector> #include <cstring> #include <ctime> using namespace std; //#define DATAFILENAME "LottoDataDifficile.txt" //#define SEARCHFILENAME "LottoFindDifficile.txt" #define DATAFILENAME "LOTTO.D1" #define SEARCHFILENAME "LOTTO.D2" class MyBitSet { unsigned int bits[3]; public: MyBitSet() { bits[0] = bits[1] = bits[2] = 0; } void set(unsigned int n) { bits[n >> 5] |= 1 << (n & 0x1F); } bool test(MyBitSet & other) { return ((other.bits[0] & bits[0]) == other.bits[0]) && ((other.bits[1] & bits[1]) == other.bits[1]) && ((other.bits[2] & bits[2]) == other.bits[2]); } }; void parseNumbersString(const string &numbers, int *v, MyBitSet & bits) { unsigned int i = 0; int items = 0; while (i < numbers.size()) { if (numbers[i] >= '0' && numbers[i] <= '9') { int item = numbers[i] - '0'; if (numbers[i+1] >= '0' && numbers[i+1] <= '9') { ++i; item = item * 10 + (numbers[i] - '0'); } v[items] = item; bits.set(item); ++items; } ++i; } } class Drawing { MyBitSet bits; string text; int *v; public: Drawing(int numeberCount, const string &city, const string &date, const string &numbers) { text = date; text.append(" "); text.append(city); text.append(" "); text.append(numbers); v = new int[numeberCount]; parseNumbersString(numbers, v, bits); } const string & toString() { return text; } bool isMatching(MyBitSet &toBeTested) { return bits.test(toBeTested); } int getNumber(int i) { return v[i]; } }; class Database { vector<Drawing *> drawings[91][91]; int numberCount; int *v; public: Database(int numberCount): numberCount(numberCount) { v = new int[numberCount]; } void insertDrawing(Drawing * drawing) { for (int i = 0; i < numberCount; ++i) { for (int j = 0; j < numberCount; ++j) { if (j != i) { drawings[drawing->getNumber(i)][drawing->getNumber(j)].push_back(drawing); } } } } void printDrawings(const string &numbers) { MyBitSet bits; parseNumbersString(numbers, v, bits); vector<Drawing *> &l = drawings[v[0]][v[1]]; bool print = false; //for(vector<Drawing*>::iterator it = l.begin(); it != l.end(); it++) for(unsigned int i = 0; i < l.size(); ++i) { if (l.at(i)->isMatching(bits)) { if(!print) { print = true; cout << "-- " << numbers << " --" << endl; } cout << l.at(i)->toString() << endl; } } } }; int main() { ifstream f(DATAFILENAME); string date, city, numbers; if (f.fail()) { cout << "Errore apertura file dati" << endl; return 1; } getline(f, numbers); getline(f, numbers, ' '); int numberCount; f >> numberCount; if (f.fail()) { cout << "Errore parametri file dati" << endl; return 1; } Database db(numberCount); getline(f, numbers); while (1) { getline(f, date, ' '); if (f.eof() || f.fail()) break; getline(f, city, ' '); getline(f, numbers); Drawing * d = new Drawing(numberCount, city, date, numbers); db.insertDrawing(d); } f.close(); f.clear(); f.open(SEARCHFILENAME); if (f.fail()) { cout << "Errore apertura file di ricerca" << endl; return 1; } int count; getline(f, date, ' '); f >> count; if (f.fail()) { cout << "Errore parametri file di ricerca" << endl; return 1; } getline(f, numbers); for (int i = 0; i < count; ++i) { getline(f, numbers); db.printDrawings(numbers); } return 0; } Ultima modifica di cionci : 23-10-2008 alle 00:38. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:53.