Quad rapide

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Quad rapide

Message par SPH »

Salut,

je cherche a faire une routine la plus rapide possible. J'ai pompé la doc mais je me disais que peut etre avec des pointeurs ou je ne sais quelles joyeusetés de PB, on pouvais faire mieux ? :

Code : Tout sélectionner

  If ReadFile(0, "d:\quad\1.avi") ; Si le fichier peut être lu , on continue...
    While Eof(0) = 0         ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
      ReadQuad(0)      ; Affiche ligne par ligne le contenu du fichier
    Wend
    CloseFile(0)             ; Ferme le fichier précédemment ouvert
  Else
    MessageRequester("Information","Impossible d'ouvrir le fichier!")
  EndIf
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Quad rapide

Message par SPH »

Je demande ca car j'ai cette impression de vitesse enorme quand c'est codé en C (ou autres)...
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Quad rapide

Message par Ar-S »

ça me prend 45ms pour un fichier de 20mo.. si tu donnes pas de referents ni sur la taille de ton avi ni sur ton chrono on est mal barré pour comparer.
6983ms pour un fichier de 688mo
Je trouve ça plutôt rapide

Code : Tout sélectionner

DisableDebugger
start = ElapsedMilliseconds()
If ReadFile(0, "G:\CLIP\Eddy de Pretto - Fête de trop (Clip Officiel) [720p].mp4") ; Si le fichier peut être lu , on continue...
    While Eof(0) = 0         ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
      ReadQuad(0)      ; Affiche ligne par ligne le contenu du fichier
    Wend
t = ElapsedMilliseconds()-start
MessageRequester("t",Str(t))    
    
    CloseFile(0)             ; Ferme le fichier précédemment ouvert
  Else
    MessageRequester("Information","Impossible d'ouvrir le fichier!")
  EndIf
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Quad rapide

Message par SPH »

Maintenant que tu as des references de temps, penses tu qu'il y a une routine plus rapide que celle de la doc ?
(asm)??
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Quad rapide

Message par Ar-S »

Je ne connais pas l'asm..
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Quad rapide

Message par nico »

Oui, il y a plus rapide en affectant directement les données à un tableau comme ceci:

Code : Tout sélectionner

DisableDebugger

; Ce test crée un fichier dont la taille est un multiple de 8, il faudra donc penser à adapter le code
; Création d'un fichier pour le test, prendra un certain temps, soyez patient.
If CreateFile(0, "c:\test.txt")
    For a=0 To 99999999  ; ecriture d'un fichier de (781250 ko soit lus de 781Mo)
        WriteQuad(0,a)
    Next a
    CloseFile(0)
EndIf


start = ElapsedMilliseconds()

Dim tableau.q(0)

If ReadFile(1, "c:\test.txt") ; Si le fichier peut être lu , on continue...
    longueur=(Lof(1)/8)-1
    ReDim tableau(longueur)
    ReadData(1, @tableau(), Lof(1))

    ; Affectation quasi instantanée, soit un tiers de seconde!!!
    
;   ces lignes ne servent que pour vérifier éventuellement le contenu    
;     For a=0 To 10 ;que les 10 premiers sinon mettre la variable longueur
;         Debug tableau(a)
;     Next a
        
    CloseFile(1)
    
    t = ElapsedMilliseconds()-start
    MessageRequester("t",Str(t))    

Else
    MessageRequester("Information","Impossible d'ouvrir le fichier!")
EndIf
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Quad rapide

Message par Ollivier »

J'ai threadé en 16 morceaux. Ça me semble encore plus rapide.

Code : Tout sélectionner

;********************************************************************************************************************************************************************************************************************************************************** 
#ThQ = 16
fName.S = "C:\test.txt"
If 0                                          ; <<<< creer le fichier dans un premier temps en mettant 1
        If CreateFile(0, fName)
                For a = 0 To 99999999
                        WriteQuad(0, a)
                Next
                
        EndIf
        End
EndIf

fsize = FileSize(fName)

startNico0 = ElapsedMilliseconds()

Dim tableau.q(0)

If ReadFile(1, fName)
        longueur = (Lof(1) / 8) - 1
        ReDim tableau(longueur)
        ReadData(1, @tableau(), Lof(1) )
        CloseFile(1)
Else
        MessageRequester("", "ProblèmeN")
EndIf

tNico0 = ElapsedMilliseconds() - startNico0



startOlli = ElapsedMilliseconds()

Structure Buff2
        fid.I
        *x
        name.S
        fpos.I
        fpart.I
        ok.I
EndStructure

Procedure ready(*a.Buff2)
        *a\fid = ReadFile(#PB_Any, *a\Name, #PB_File_SharedRead)
        If *a\fid
                FileSeek(*a\fid, *a\fpos)
                ReadData(*a\fid, *a\x, *a\fpart)
                CloseFile(*a\fid)
        Else
                MessageRequester("", "Problème")
        EndIf
        *a\ok = 1
EndProcedure

*x = AllocateMemory(fsize, #PB_Memory_NoClear)
#ThMax = #ThQ - 1
part = (fsize + #ThMax) / #ThQ

Dim *f.Buff2(#ThMax)

For I = 0 To #ThMax
        *f(I) = AllocateMemory(SizeOf(Buff2) )
        
        *f(I)\Name = fName
        *f(I)\fpart = part
        *f(I)\fpos = part * I
        *f(I)\x = *x + (part * I)
        
        CreateThread(@ready(), *f(I) )
        Delay(1)
Next

Structure QuadGran
        Q.Q[1000000000]        
EndStructure

Define *n.QuadGran = *x

recheck:
Delay(1)
For I = 0 To #ThMax
        If *f(I)\ok = 0
                Goto recheck
        EndIf
        
Next

tOlli = ElapsedMilliseconds() - startOlli

startNico = ElapsedMilliseconds()

Dim tableau.q(0)

If ReadFile(1, fName)
        longueur = (Lof(1) / 8) - 1
        ReDim tableau(longueur)
        ReadData(1, @tableau(), Lof(1) )
        CloseFile(1)
Else
        MessageRequester("", "ProblèmeN")
EndIf

tNico = ElapsedMilliseconds() - startNico

dv = 4
sb = 8

MessageRequester("t", "Delta Nico test 1 = " + Str(tNico0) + Chr(10) + "Delta Olli test 2 = " + Str(tOlli) + Chr(10) + "Delta Nico test 3 = " + Str(tNico)+ Chr(10) + Str(tableau(fsize / 8 - sb) ) + Chr(10) + Str(*n\Q[fsize / 8 - sb] ) )
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Quad rapide

Message par SPH »

Merci, je regarde ca 8)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Quad rapide

Message par SPH »

En effet, c'est beauuuucoup plus rapide !!
Merci a vous 2 :idea:
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
Répondre