Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Per Huawei l’IA è una questione di storage. Presentate soluzioni dedicate e un SSD da 128 TB
Per Huawei l’IA è una questione di storage. Presentate soluzioni dedicate e un SSD da 128 TB
Inizia l’era dell’AI storage. Durante l’Innovative Data Infrastructure Forum 2024, Huawei ha presentato OceanStor A800, una soluzione innovativa pensata per i carichi di lavoro legati all’intelligenza artificiale generativa
Recensione Google Pixel Tablet: in ritardo ma un ottimo primo passo!
Recensione Google Pixel Tablet: in ritardo ma un ottimo primo passo!
Il Pixel Tablet di Google arriva finalmente anche in Italia e lo fa quasi un anno dopo il suo debutto negli USA e in alcuni paesi nel mondo. Un ritardo che sembra però aver giovato al device che arriva performante e con molte funzionalità uniche che possono renderlo decisamente appetibile.
ASUS ProArt PA32UCXR: 4K, Quantum Dot e Mini-LED i per professionisti dell'immagine
ASUS ProArt PA32UCXR: 4K, Quantum Dot e Mini-LED i per professionisti dell'immagine
Un monitor veramente completo, per funzionalità e prestazioni. La presenza di un colorimetro integrato consente di agevolare le operazioni di calibrazione, anche per il mantenimento periodico delle prestazioni
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-01-2013, 12:57   #1
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
[Vari] Contest 19: Full Text Search(e non solo).

Scaricate i file di input da qui:

https://github.com/hwupgradecontest/...ree/master/All

Si tratta di una serie di opere letterarie che ho preso da qui:

http://www.liberliber.it/

Grazie a Msangi e The_Ouroboros, il link su github dove potete mettere i vostri sorgenti:
https://github.com/hwupgradecontest/contest19

Per aggiungere il proprio codice du github:

The_Ouroboros:
http://www.hwupgrade.it/forum/showpo...&postcount=784

Vicius:
https://github.com/hwupgradecontest/README



Punto A:
Il programma dovrà leggere i file .txt fondendoli e creandone uno solo delle dimensioni specificate dall'utente. Il file di output sarà poi utilizzato per il Punto B: algoritmi di Full Text Seach.
La fusione dei vari file txt va effettuata prendendo le singole righe di ogni file di input e mescolandole, in modo casuale, con quelle di tutti gli altri file.
Vanno escluse, nel file di output, le righe vuote. Vanno inoltre eliminati gli spazi superflui. Due o più spazi consecutivi andranno sostituiti con uno spazio solo. Le tabulazioni vanno sostituite con uno spazio.
Per il punto B utilizzeremo il programma che si rivelerà il migliore dal punto di vista delle prestazioni ma soprattutto dalla qualità dell'output.
Il programma, CUI o GUI, a vostra scelta, dovrà dunque permettere all'utente di specificare il nome del file di output e la dimensione. Nel caso l'utente scelga una dimensione maggiore di quella del totale dei file di input, si ricominci dal primo file e via via con tutti gli altri, mescolando sempre in modo casuale le righe.

Esempio(CUI):


Punto B:
Da definire più in la. Ci occuperemo degli algoritmi per la Full Text Seach e confronteremo le prestazioni(e la qualità dei risultati) con alcuni programmi che vanno per la maggiore nel settore: Lucene, Zettair, Indri.
Punto B.1:
Quote:
B.1:
Si realizzi un programmino che, data in input una stringa di ricerca, indichi l'esatta posizione (riga e colonna) nel file creato al punto A.

Si prendano separatamente i tempi per la creazione dell'indice e quelli per la ricerca.

Se volete utilizzare un algoritmo brute force, senza creare l'indice, siete liberi di farlo.
L'esempio qui: http://www.hwupgrade.it/forum/showpo...&postcount=180


Punto B.2:
Quote:
Si scriva un programmino simile a quello presente nella distribuzioni Linux per contare i caratteri, le parole, le righe, la riga più lunga e la parola più lunga(quest'ultima cosa il comando wc non la fa):


Le parole dovranno essere parole di senso compiuto. "---------" o "........" o "£$%*/*&&&" non sono parole di senso compiuto.
"parola", "ciao", "hello" invece si, sono parole di senso compiuto.
Si veda, inoltre, questo post(grazie a msangi): http://www.hwupgrade.it/forum/showpo...&postcount=618.
E questo(grazie a clockover): http://www.hwupgrade.it/forum/showpo...&postcount=645

Punto B.3
Si modifichi il programmino di cui al punto B.2 in modo da fargli accettare due argomenti dalla riga di comando(oltre al nome del file):

1) Il parametro "-L=d" dove d sta per la dimensione minima delle parole che l'utente desidera per il conteggio. Per esempio, -L=5 significa che l'utente desidera che vengano conteggiate le parole con lunghezza >= 5.

2) Il parametro "-F=file" dove file sta per il nome di un file specificato dall'utente dove sono listati, una parola per riga, le parole che l'utente desidera escludere dalla ricerca. Per esempio:
Codice:
il
lo
la
i
gli
le
Col suddetto file passato come argomento, il programmino dovrà escludere dal conteggio le parole "il", "lo", "la", "i", "gli", "le".

------------------------------------------------------------------------------------------------------------------------------------------------------

E, a cura dell'utente Marco.r:
Punto C:
Catene Markoviane. In preparazione.

Ultima modifica di Vincenzo1968 : 20-02-2013 alle 18:25. Motivo: Aggiornato link file input
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2013, 13:29   #2
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Per esempio, se abbiamo questi file in input:

File 1:
Codice:
file 1 riga 1
file 1      riga 2
file 1 riga 3
File 2:
Codice:
file 2 riga 1

file 2           riga 2
file 2 riga 3
File 3:
Codice:
file 3 riga 1
     file 3        riga 2
file 3 riga 3
Il file risultante dovrà essere, per esempio, così:
Codice:
file 3 riga 2
file 2 riga 2
file 3 riga 1
file 3 riga 3
file 1 riga 3
file 1 riga 1
file 2 riga 3
file 2 riga 1
file 1 riga 2
Come vedete, nel file di output, sono stati eliminati gli spazi superflui e le righe vuote.
Le righe debbono risultare disposte in modo casuale. Una nuova esecuzione del programma darà, ovvviamente, una nuova disposizione delle righe.

Per esempio:
Codice:
file 3 riga 1
file 1 riga 3
file 3 riga 3
file 1 riga 2
file 2 riga 2
file 1 riga 1
file 2 riga 3
file 3 riga 2
file 2 riga 1

Ultima modifica di Vincenzo1968 : 17-01-2013 alle 10:48.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 13-01-2013, 13:51   #3
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Dall'incipit del Cap. IV de I Promessi Sposi di Alessandro Manzoni:

Quote:
Il sole non era ancor tutto apparso sull'orizzonte, quando il padre Cristoforo uscì dal suo convento di Pescarenico, per salire alla casetta dov'era aspettato.
Dall'incipit del Cap. VIII di Quer pasticiaccio brutto de via Merulana di Carlo Emilio Gadda:
Quote:
Il sole non aveva ancora la minima intenzione di apparire all'orizzonte che già il brigadiere Pestalozzi usciva(in motocicletta) dalla caserma degli erre erre ci ci di Marino per catapultarsi alla bottega-laboratorio dove non era minimamente aspettato, almeno in quanto brigadiere fungente.

Ultima modifica di Vincenzo1968 : 17-01-2013 alle 10:06.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2013, 09:29   #4
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
Leggendo il contest una cosa non mi è chiara.

Dici che il programma deve mischiare insieme le righe dei due file in ordine casuale, ma nell'esempio mescoli i file anche partendo da metà di quella che io considererei una riga (un qualcosa che va da newline a newline), quindi vorrei capire: qual'è la tua idea di riga in questo caso?

Ciao

EDIT: Un altra cosa che non ho capito bene è cosa succede quando l'output è maggiore dell'input. Cosa intendi per "si ricomincia dal primo file" ? Intendi che riscrive il testo in ordine dal primo file in poi o intendi che si resetta il mescolamento e si riparte a mescolare i file?
__________________
GPU Compiler Engineer

Ultima modifica di AnonimoVeneziano : 14-01-2013 alle 09:39.
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2013, 15:54   #5
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Vi anticipo già 50 ms per un file da 2 mb

Ero partito usando C++11 e la stl eccetera, e per quanto sia diventata parecchio veloce in sè mi forzava a copiare la memoria in giro... sotto 500 ms non si scendeva.
Il buon vecchio C è ancora imbattuto

EDIT: ok, 43 ms e sto, almeno sul mio SSD.
Un'esecuzione usa ~40 ms per fopen/fread, ~2 ms per fare il parsing dei file e ~0.1 ms per scrivere l'output (questo grazie allo SSD che è una bestia ), probabilmente nel caso dello SSD sarebbe molto più veloce leggendo tutti i file in parallelo, ma d'altra parte nel caso di un HDD meccanico sarebbe molto peggio, e vincerebbe alla grande accorpare tutti i files in un file solo per minimizzare il seek time.

Odio un pò sti problemi che esce Vincenzo1968 perchè finiscono sempre a fare a botte con l'HD
__________________
*ToMmO*

devlog | twitter

Ultima modifica di Tommo : 14-01-2013 alle 16:20.
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2013, 16:18   #6
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
Quote:
Originariamente inviato da Tommo Guarda i messaggi
Vi anticipo già 50 ms per un file da 2 mb

Ero partito usando C++11 e la stl eccetera, e per quanto sia diventata parecchio veloce in sè mi forzava a copiare la memoria in giro... sotto 500 ms non si scendeva.
Il buon vecchio C è ancora imbattuto
Non puoi sperare di usare la STL e di andare veloce ...
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2013, 16:22   #7
Tommo
Senior Member
 
L'Avatar di Tommo
 
Iscritto dal: Feb 2006
Messaggi: 1304
Quote:
Originariamente inviato da AnonimoVeneziano Guarda i messaggi
Non puoi sperare di usare la STL e di andare veloce ...
In realtà il problema era che non esiste un modo per assegnare memoria preesistente a std::string, e quindi non avrei potuto usare il "trucco" che ha tagliato di 10 volte il tempo...
ma come dicevo, a pari algoritmo non sono più lente di C, e di sicuro il codice esce molto più bello a vedersi (e la condivisione di memoria che ho usato è come chiedere bug a manetta )

EDIT: ecco il codice

main.cpp

LineBuffer.h

common_header.h

EDIT2: ho provato a farlo girare su un disco in rete (lag come se piovesse, 13 mb/s max) e come previsto ci mette quasi 1.6 secondi... un dettaglio interessante però è che già alla 3a run ci metteva solo 66 ms, il che prova che Windows è abbastanza furbo da mettere in cache i file usati di recente sul disco più veloce
__________________
*ToMmO*

devlog | twitter

Ultima modifica di Tommo : 14-01-2013 alle 17:36.
Tommo è offline   Rispondi citando il messaggio o parte di esso
Old 14-01-2013, 16:44   #8
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13826
Se qualcuno avesse avuto gli stessi dubbi riguardo al testo del contest queste sono state le risposte di Vincenzo alle mie domande:

Quote:
Quando l'output è maggiore dell'input si riparte dall'inizio. Si prendono tutti i file e si ricomincia a mescolare le righe(di tutti i file) fino a quando il file di output non raggiunge la dimensione voluta.
Non ho capito bene la prima domanda. Considera che nell'esempio ho mescolato le righe a mano; il programma lo devo ancora finire.

T'ho scritto in privato perché m'hanno sospeso e non posso postare nel thread. Potresti cortesemente postare tu la mia risposta?
Al limite specifica che te l'ho chiesto io tramite pm.
A quel punto ho riformulato la mia prima domanda e lui ha risposto che si , bisogna identificare ogni riga e mescolarle insieme (le righe vanno da newline a newline)
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2013, 14:53   #9
The_ouroboros
Senior Member
 
L'Avatar di The_ouroboros
 
Iscritto dal: May 2007
Città: Veneto
Messaggi: 6722
Comunicazione di servizio da Vincenzo1968:

http://classes.soe.ucsc.edu/ism293/S...mp_3_Lemur.pdf

http://ciir.cs.umass.edu/~strohman/indri/

http://www.lemurproject.org/lemur/In...ryLanguage.php

http://myweb.uiowa.edu/cgharris/images/indri.pdf

Serviranno per il punto B.
__________________
Apple Watch Ultra + iPhone 15 Pro Max + Rog Ally
The_ouroboros è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 10:07   #10
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Questa la mia versione in Java: Generate.java.

A leggere tutti i file da disco ci mette circa 800ms. Per creare un file di 5 gb ci impiega poco più di 4 minuti.

Codice:
➜ Contest  time java contest.Generate file -D5GiB
java contest.Generate file -D5GiB  78.23s user 159.79s system 98% cpu 4:01.87 total
Non ho potuto provare la versione di tommo perché stdafx.h cozza un po' con osx e linux. Fare un confronto sullo stesso hardware sarebbe interessante ma non credo che ci sia una grande differenza tra i due. Una vota passato una certa dimensione il limite dovrebbe essere il disco.

Si potrebbe passare a nio per evitare di scopiazzare stringhe qua e là. Eliminare la regex e ripulirsi a mano il testo. Ed usare un executor per distribuire il lavoro tra i vari core. Ma non credo ne valga la pena.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 10:22   #11
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Ragazzi, una cortesia:

per facilitare il compito agli utenti che volessere provare i programmi postati(e soprattutto a me che devo scaricare i sorgenti di tutti e stilare le classifiche), bisognerebbe zippare i sorgenti e metterli su un sito di file sharing.

Ce ne sono un fottìo. Uno dei miei preferiti è:

http://www.filedropper.com/

Non richiede iscrizione e soprattutto, quando uno clicca sul link per scaricare il file, non bisogna aspettare i maledetti trenta secondi di pubblicità(c'è solo da inserire 4 caratteri per il riconoscimento umano).

Edit: Ho visto ora che nel link di Vicius c'è il link diretto che permette di scaricare il file compresso. Ma, se il programma è composto da più file sorgenti?

Ultima modifica di Vincenzo1968 : 17-01-2013 alle 10:31.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 10:30   #12
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Questa la mia versione in Java: Generate.java.

A leggere tutti i file da disco ci mette circa 800ms. Per creare un file di 5 gb ci impiega poco più di 4 minuti.

Codice:
➜ Contest  time java contest.Generate file -D5GiB
java contest.Generate file -D5GiB  78.23s user 159.79s system 98% cpu 4:01.87 total
Non ho potuto provare la versione di tommo perché stdafx.h cozza un po' con osx e linux. Fare un confronto sullo stesso hardware sarebbe interessante ma non credo che ci sia una grande differenza tra i due. Una vota passato una certa dimensione il limite dovrebbe essere il disco.

Si potrebbe passare a nio per evitare di scopiazzare stringhe qua e là. Eliminare la regex e ripulirsi a mano il testo. Ed usare un executor per distribuire il lavoro tra i vari core. Ma non credo ne valga la pena.
Io sono riuscito a compilare la versione di Tommo su Linux ma ho dovuto togliere i file afx e inserire manualmente gli include.

Quindi ragazzuoli, quando utilizzate Visual Studio, create un progetto vuoto altrimenti vengono inseriti gli afx e poi li debbo modificare a mano(per compilarli su Linux). A meno che non decidiate che la vostra versione debba girare solo su Windows.



Comunque il file prodotto dalla versione di Tommo ha qualche problemino(lascia qualche riga vuota e qualche spazio superfluo). Lo sta sistemando.

Ultima modifica di Vincenzo1968 : 17-01-2013 alle 10:57.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 10:55   #13
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515


Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 11:17   #14
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Ah dimenticavo: il tempo dev'essere espresso in secondi.

Quindi non
Quote:
825 ms
ma
Quote:
0.825 secondi
"secondi" scritto per esteso, non abbreviato "s.".

Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 11:33   #15
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da Vincenzo1968 Guarda i messaggi


I package di java proprio non ti entrano in testa . I file .class devono stare nella cartella contest. Devi lanciarlo da fuori dando il nome completo contest.Generate.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 12:44   #16
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
I package di java proprio non ti entrano in testa . I file .class devono stare nella cartella contest. Devi lanciarlo da fuori dando il nome completo contest.Generate.


Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 12:52   #17
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Spiegatemi una cosa. Le funzioni per la gestione dei file in C a 64 bit sono standard(e quindi posso tranquillamente compilare e in Windows e in Linux)?

Per esempio, la funzione "_ftelli64" è standard o è specifica del compilatore Microsoft?
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 12:56   #18
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quando hai compilato i sorgenti ti deve aver creato due file class. Il primo è Generate.class che è il programma principale. E poi c'è anche un Generate$1.class che è la classe anonima creata per TXT_FILES.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 13:26   #19
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515




Non è standard. Mo debbo arrangiarmi con le macro per la compilazione condizionale.

Che debbo usare per GCC/Linux?
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2013, 13:28   #20
Vincenzo1968
Bannato
 
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
Quando hai compilato i sorgenti ti deve aver creato due file class. Il primo è Generate.class che è il programma principale. E poi c'è anche un Generate$1.class che è la classe anonima creata per TXT_FILES.
Ok. Se non funziona nemmeno così le urla le sentirete fin lassù al nord.
Vincenzo1968 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Per Huawei l’IA è una questione di storage. Presentate soluzioni dedicate e un SSD da 128 TB Per Huawei l’IA è una questione di storag...
Recensione Google Pixel Tablet: in ritardo ma un ottimo primo passo! Recensione Google Pixel Tablet: in ritardo ma un...
ASUS ProArt PA32UCXR: 4K, Quantum Dot e Mini-LED i per professionisti dell'immagine ASUS ProArt PA32UCXR: 4K, Quantum Dot e Mini-LED...
HUAWEI WATCH FIT 3: lo smartwatch che ridefinisce design e fitness! Recensione HUAWEI WATCH FIT 3: lo smartwatch che ridefinisc...
HONOR 200 Lite, lo smartphone economico per ritratti, selfie, e non solo. La recensione HONOR 200 Lite, lo smartphone economico per ritr...
Comedy Pet Photo Awards 2024: le simpati...
Amazon, tutte le migliori offerte del we...
Ecco i 3 migliori tablet su Amazon per p...
I robot per le pulizie hanno prezzi sens...
Fire TV, Echo, Blink e Kindle sono tutti...
Oggi ci sono sconti molto interessanti s...
Spazzolini elettrici Oral-B in offerta s...
Corsair MP700 PRO SE: SSD PCIe 5 fino a ...
HUAWEI Pura 70 Ultra è il miglior...
Arriva in Italia la nuova gamma TV Samsu...
NVIDIA Grace Hopper è un successo...
Amazon Seconda Mano (ex Warehouse): pros...
Novità sulle Mappe di Apple: arri...
BYD insiste sull'Europa: nel 2025 second...
Il telescopio spaziale James Webb ha ril...
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: 04:20.


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