Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1297 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Un truc étrange... Différence entre Windows et Linux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Un truc étrange... Différence entre Windows et Linux

n°1622246
Sinner
Trapped Inside This Octavarium
Posté le 11-10-2007 à 13:24:03  profilanswer
 

Bonjour,
 
J'ai codé un ptit programme qui écrit dans des fichiers.
 
Le programme crée 96 fichiers dans chacun desquels il écrit 2000 lignes.
 
Lorsque le code tourne sous Linux, il tourne pendant 10 ou 15 secondes à tout casser. Lorsqu'il tourne sous Windows, il lui faut 10 ou 15 secondes pour écrire UN SEUL fichier. Ce qui rend le traitement un peu long sous Windows.
 
J'ai un processeur Dual Core, donc déjà il ne sait pas le gérer. Il ne tourne que sur un seul processeur, mais tout de même, la différence avec Linux est nettement marquée.
 
C'est normal que Windows soit aussi long ?

mood
Publicité
Posté le 11-10-2007 à 13:24:03  profilanswer
 

n°1622251
Olivier51
Posté le 11-10-2007 à 13:29:04  profilanswer
 

Le code est exactement le meme sur les deux plateforme ? Tu utilises quel API pour ecrire dans un fichier ? Tu fais de la manipulation de texte avant, si oui quel genre de manipulation ?

n°1622256
Sinner
Trapped Inside This Octavarium
Posté le 11-10-2007 à 13:32:50  profilanswer
 

Le code est en effet exactement le même sur les deux plateformes.
 
Pour info voici le code :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define LONG 1024
  5. int main (int argc, char *argv[])
  6. {
  7. int lineCount, atomCount ;
  8. char line[LONG], scaleInfo[LONG], space[] = " ", *energyMax, *energyMin, *energyStep, *fermiLevel, dosFilePath[LONG] ;
  9. FILE *doscarFile, *dosFile ;
  10. lineCount = 1 ;
  11. atomCount = 0 ;
  12. energyStep = "0" ;
  13. /* Opening DOSCAR file */
  14. doscarFile = fopen ("DOSCAR", "r" ) ;
  15. /* Testing the opening procedure */
  16. if (doscarFile == NULL)
  17. {
  18.  fprintf(stderr, "Error while opening the DOSCAR file.\n" ) ;
  19. }
  20. else
  21. {
  22.  fprintf(stderr, "DOSCAR file opened successfully in read only mode.\n" ) ;
  23.  /* Reading POSCAR file line by line */
  24.  while (fgets(line, LONG, doscarFile) != NULL)
  25.  {
  26.   /* Importing basic scales for DoS plotting */
  27.   if (lineCount == 6)
  28.   {
  29.    if (atomCount == 0 )
  30.    {
  31.     mkdir("DOS_FILES", 0755) ;
  32.     strcpy(scaleInfo, line) ;
  33.     energyMax = strtok(scaleInfo, space) ;
  34.     energyMin = strtok(NULL, space) ;
  35.     energyStep = strtok(NULL, space) ;
  36.     fermiLevel = strtok(NULL, space) ;
  37.     fprintf(stderr, "Energy Min : %s eV\nEnergy Max : %s eV\nEnergy Step: %s eV\nFermi Level : %s eV\n", energyMin, energyMax, energyStep, fermiLevel) ;
  38.     atomCount ++ ;
  39.     /* Setting name of first atom DoS file */
  40.     sprintf(dosFilePath, "DOS_FILES/DOS_%d", atomCount) ;
  41.    }
  42.   }
  43.   else if (lineCount > 6 && lineCount < 7 + atoi(energyStep))
  44.   {
  45.    /* Opening Partial DOS file */
  46.    dosFile = fopen (dosFilePath, "a" ) ;
  47.    fputs(line, dosFile) ;
  48.    fclose(dosFile) ;
  49.   }
  50.   else if (lineCount == 7 + atoi(energyStep))
  51.   {
  52.    lineCount = 6 ;
  53.    atomCount ++ ;
  54.    /* Setting name of next atoms DoS files */
  55.    sprintf(dosFilePath, "DOS_FILES/DOS_%d", atomCount) ;
  56.   }
  57.   lineCount ++ ;
  58.  }
  59.  fprintf(stderr, "Number of atoms in cell : %d\n", atomCount) ;
  60. }
  61. /* Closing the DOSCAR file */
  62. fclose (doscarFile) ;
  63. }


 
Edit : Euuuh. En fait non. Je viens de le tester sous Linux au bureau, et c'est long aussi. Pourtant sur mon PC ça carburait :/
 
Edit 2 : Je viens de retester. Sur mon portable, Dual Core avec Mandriva Spring 2007.1 sous VMWare, le code met 10 secondes pour écrire les 96 fichiers.
 
Sur le PC du bureau, il faut quelques minutes.


Message édité par Sinner le 11-10-2007 à 13:52:15
n°1622300
franceso
Posté le 11-10-2007 à 14:16:32  profilanswer
 

C'est pas un peu bourrin d'ouvrir et de fermer le fichier de sortie à chaque écriture ?
 
Tu pourrais peut-être l'ouvrir, écrire toutes tes lignes, et fermer à la fin (juste avant d'ouvrir le fichier suivant). Ca devrait être plus efficace je pense. (mais je dis peut-être des conneries parce que j'ai parcouru le code vraiment brièvement)


---------------
TriScale innov
n°1622307
Sinner
Trapped Inside This Octavarium
Posté le 11-10-2007 à 14:23:15  profilanswer
 

Ah peut être.
 
Je vais tester.

n°1622373
Taz
bisounours-codeur
Posté le 11-10-2007 à 15:39:49  profilanswer
 

bof, le problème c'est que avoir tous ces descripteurs de fichiers ouverts, tu peux vite atteindre une limite système si ton programme évolue (genre 1024 par exemple).

n°1622394
franceso
Posté le 11-10-2007 à 15:50:06  profilanswer
 

Taz a écrit :

bof, le problème c'est que avoir tous ces descripteurs de fichiers ouverts, tu peux vite atteindre une limite système si ton programme évolue (genre 1024 par exemple).

Ouais, mais là si j'ai bien lu, il n'a besoin que d'un seul fd ouvert à la fois puisqu'il écrit dans les fichiers les uns à la suite des autres.


---------------
TriScale innov
n°1622397
Taz
bisounours-codeur
Posté le 11-10-2007 à 15:51:30  profilanswer
 

bah oui ... je soulignais le problème potentiel de ton idée

n°1622417
Olivier51
Posté le 11-10-2007 à 16:07:34  profilanswer
 

Tu utilises quoi comme compilateur sur Windows ?
Les resultats attendus sont-ils correct dans les deux cas ?

n°1622438
Taz
bisounours-codeur
Posté le 11-10-2007 à 16:25:52  profilanswer
 

là c'est a priori limité par le E/S, le compilateur n'y peut pas grand chose.

mood
Publicité
Posté le 11-10-2007 à 16:25:52  profilanswer
 

n°1622476
Olivier51
Posté le 11-10-2007 à 17:07:15  profilanswer
 

Lorsque je parlais de compilateur, je pensais plus aux librairies fournies avec le compilateur.

n°1622499
MEI
|DarthPingoo(tm)|
Posté le 11-10-2007 à 17:35:08  profilanswer
 

J'dit ça comme ça, mais t'es obligé de faire du C ou pas ?  
 
Non parce que avec du C++ en utilisant le fichier comme un Stream ça devrait allé pas mal plus vite. :o


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°1622524
Taz
bisounours-codeur
Posté le 11-10-2007 à 17:56:22  profilanswer
 

Olivier51 a écrit :

Lorsque je parlais de compilateur, je pensais plus aux librairies fournies avec le compilateur.


Wof, ça devrait pas différer des masses. La vraie différence, je pense qu'elle peut venir de NTFS qui aura tendance à fragmenter comme un goret, voire créera un fragment par écriture.

n°1622529
MEI
|DarthPingoo(tm)|
Posté le 11-10-2007 à 18:00:32  profilanswer
 

192000 ouverture/ecriture/fermeture de fichier + 96 mkdir, c'est sur que c'est lent. :D


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°1622567
Sve@r
Posté le 11-10-2007 à 18:41:00  profilanswer
 

franceso a écrit :

...mais je dis peut-être des conneries parce que j'ai parcouru le code vraiment brièvement...


Non non, t'as bien lu. fopen+fclose dans le while => pas tiptop
 

franceso a écrit :

Ca devrait être plus efficace je pense.


Ouaip. Avec le système de bufferisation ça ira nettement mieux. Sûrement pas aussi rapide que Linux (où le C est une seconde langue pour lui) mais entre "un fopen/fclose par boucle" et "un seul fopen/fclose par fichier" la différence sera quand-même bien visible...


Message édité par Sve@r le 11-10-2007 à 18:41:21

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1622576
Olivier51
Posté le 11-10-2007 à 19:02:12  profilanswer
 

Il faudrait voir pour utiliser un outils d'analyse pour tracer le temps dans chaque fonctions, ca irait plus vite (je n'ai pas de nom en tete pour Windows).

n°1622630
bjone
Insert booze to continue
Posté le 11-10-2007 à 21:08:19  profilanswer
 

y'a un anti-virus sur les machines lentes ?

n°1622631
MEI
|DarthPingoo(tm)|
Posté le 11-10-2007 à 21:11:16  profilanswer
 

Hehe ah oui ça l'antivirus sur 192000 I/O ca fait mal... surtout si c'est un truc style AVG :D


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Un truc étrange... Différence entre Windows et Linux

 

Sujets relatifs
Anti-plantage linux[Java / Servlet] Nom de fichiers french-like sous linux
Problème RMI Windows/Linux[ada] Compilateur gnatmake windows Pb...
Plugin pour Windows XP Media Center 2005fonction poll() en C sous linux
[xhtml et CSS] Probleme de lien sur image..(truc de fou lol)[Résolu]Compiler sous Windows pour Linux
Plus de sujets relatifs à : Un truc étrange... Différence entre Windows et Linux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR