Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37779455
en ru br
Репозитории ALT

Группа :: Архивирование/Прочее
Пакет: par2cmdline

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: par2cmdline-openmp-support.patch
Скачать


From a96a30154d06b30f8e623271aab9d5555726a55f Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Mon, 9 Jun 2014 16:43:58 +0300
Subject: [PATCH 01/16] Add flags for OpenMP.
---
 Makefile.am | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile.am b/Makefile.am
index d6bc12d..c5dc65d 100755
--- a/Makefile.am
+++ b/Makefile.am
@@ -47,7 +47,7 @@
 	verificationpacket.cpp verificationpacket.h
 
 LDADD = -lstdc++
-AM_CXXFLAGS = -Wall
+AM_CXXFLAGS = -Wall $(OPENMP_CXXFLAGS)
 
 EXTRA_DIST = PORTING ROADMAP par2cmdline.sln par2cmdline.vcproj \
 	     par2.1 \
From 442eea6b927d6b8714d2fb1a4d33a9de70e9dab8 Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Mon, 9 Jun 2014 17:07:29 +0300
Subject: [PATCH 02/16] Add check for OpenMP.
---
 configure.ac | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/configure.ac b/configure.ac
index 6d36d10..3456fca 100755
--- a/configure.ac
+++ b/configure.ac
@@ -35,7 +37,8 @@ dnl Checks for programs.
 AC_PROG_CXX
 AC_PROG_INSTALL
 
-dnl Checks for libraries.
+dnl Set language to C++
+AC_LANG(C++)
 
 dnl Checks for header files.
 AC_HEADER_DIRENT
@@ -52,6 +55,9 @@ AC_C_INLINE
 AC_SYS_LARGEFILE
 AC_FUNC_FSEEKO
 
+dnl Check for OpenMP
+AC_OPENMP
+
 dnl Checks for library functions.
 AC_FUNC_MEMCMP
 AC_CHECK_FUNCS([stricmp] [strcasecmp])
From 262288bdc6e6e9cea8384701646b2c2f3269ee27 Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Mon, 9 Jun 2014 17:10:56 +0300
Subject: [PATCH 03/16] ...
---
 AUTHORS | 6 ++++++
 1 file changed, 6 insertions(+)
diff --git a/AUTHORS b/AUTHORS
index 74df19d..a50c1ae 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,3 +1,9 @@
+par2cmdline-mt:
+
+Jussi Kansanen <jussi.kansanen@gmail.com>
+
+par2cmdline:
+
 Peter Brian Clements <peterbclements@users.sourceforge.net>
 Marcel Partap <mpartap@gmx.net>
 Ike Devolder <ike.devolder@gmail.com>
From c05a96d459a045f0f43a7e6aa29388acf7fabb1c Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Mon, 9 Jun 2014 17:20:10 +0300
Subject: [PATCH 04/16] Parallelize creator with OpenMP.
---
 par2creator.cpp | 2 ++
 1 file changed, 2 insertions(+)
diff --git a/par2creator.cpp b/par2creator.cpp
index fa8fcc8..baed047 100644
--- a/par2creator.cpp
+++ b/par2creator.cpp
@@ -924,6 +924,7 @@ bool Par2Creator::ProcessData(u64 blockoffset, size_t blocklength)
     }
 
     // For each output block
+    #pragma omp parallel for
     for (u32 outputblock=0; outputblock<recoveryblockcount; outputblock++)
     {
       // Select the appropriate part of the output buffer
@@ -941,6 +942,7 @@ bool Par2Creator::ProcessData(u64 blockoffset, size_t blocklength)
 
         if (oldfraction != newfraction)
         {
+          #pragma omp critical
           cout << "Processing: " << newfraction/10 << '.' << newfraction%10 << "%\r" << flush;
         }
       }
From da8001d1e27e6d0a7526f6ca34215710ddd745d0 Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Mon, 9 Jun 2014 17:25:24 +0300
Subject: [PATCH 05/16] Parallelize repair with OpenMP.
---
 par2repairer.cpp | 2 ++
 1 file changed, 2 insertions(+)
diff --git a/par2repairer.cpp b/par2repairer.cpp
index d3d3cf3..15ca316 100644
--- a/par2repairer.cpp
+++ b/par2repairer.cpp
@@ -2198,6 +2198,7 @@ bool Par2Repairer::ProcessData(u64 blockoffset, size_t blocklength)
       }
 
       // For each output block
+      #pragma omp parallel for      
       for (u32 outputindex=0; outputindex<missingblockcount; outputindex++)
       {
         // Select the appropriate part of the output buffer
@@ -2215,6 +2216,7 @@ bool Par2Repairer::ProcessData(u64 blockoffset, size_t blocklength)
 
           if (oldfraction != newfraction)
           {
+            #pragma omp critical
             cout << "Repairing: " << newfraction/10 << '.' << newfraction%10 << "%\r" << flush;
           }
         }
From c4fc9152c7ec7ead7ad30899c6bd6f48bad8f662 Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Mon, 9 Jun 2014 17:28:50 +0300
Subject: [PATCH 06/16] Include omp.h for OpenMP
---
 par2cmdline.h | 6 ++++++
 1 file changed, 6 insertions(+)
diff --git a/par2cmdline.h b/par2cmdline.h
index d3ba66d..bcbb534 100644
--- a/par2cmdline.h
+++ b/par2cmdline.h
@@ -300,5 +300,11 @@ using namespace std;
 #define DEBUG_NEW new(_NORMAL_BLOCK, THIS_FILE, __LINE__)
 #endif
 
+// OpenMP
+#ifdef _OPENMP
+# include <omp.h>
+#endif
+
+
 #endif // __PARCMDLINE_H__
 
From 312d097088cf3abdd5f36cd4b54ccd5b54372e85 Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Mon, 9 Jun 2014 18:07:58 +0300
Subject: [PATCH 07/16] Add a command line option for settings number of
 threads.
---
 commandline.cpp | 34 ++++++++++++++++++++++++++++++++--
 1 file changed, 32 insertions(+), 2 deletions(-)
diff --git a/commandline.cpp b/commandline.cpp
index 3136003..f8cc559 100644
--- a/commandline.cpp
+++ b/commandline.cpp
@@ -91,6 +91,7 @@
   cout << "Copyright (C) 2003-2015 Peter Brian Clements." << endl
     << "Copyright (C) 2011-2012 Marcel Partap." << endl
     << "Copyright (C) 2012-2015 Ike Devolder." << endl
+    << "Copyright (C) 2014 Jussi Kansanen." << endl
     << endl
     << "par2cmdline comes with ABSOLUTELY NO WARRANTY." << endl
     << endl
@@ -118,7 +119,12 @@ void CommandLine::usage(void)
     "\n"
     "  -a<file> : Set the main par2 archive name\n"
     "  -b<n>    : Set the Block-Count\n"
-    "  -s<n>    : Set the Block-Size (Don't use both -b and -s)\n"
+    "  -s<n>    : Set the Block-Size (Don't use both -b and -s)\n";
+#ifdef _OPENMP
+  cout << 
+    "  -t<n>    : Number of threads to use (" << omp_get_max_threads() << " detected)\n";  
+#endif
+  cout << 
     "  -r<n>    : Level of Redundancy (%%)\n"
     "  -r<c><n> : Redundancy target size, <c>=g(iga),m(ega),k(ilo) bytes\n"
     "  -c<n>    : Recovery block count (Don't use both -r and -c)\n"
@@ -336,6 +342,30 @@ bool CommandLine::Parse(int argc, char *argv[])
             }
           }
           break;
+        
+        case 't':  // Set the amount of threads
+          {
+            u32 nthreads = 0;
+            char *p = &argv[0][2];
+            
+            while (*p && isdigit(*p))
+            {
+              nthreads = nthreads * 10 + (*p - '0');
+              p++;
+            }
+            
+            if (!nthreads) 
+            {
+              cerr << "Invalid thread option: " << argv[0] << endl;
+              return false;
+            }
+
+            // Sets the number of threads to use            
+            omp_set_num_threads(nthreads);
+            
+          }
+          break;
+
 
         case 'r':  // Set the amount of redundancy required
           {
From 157d739a55ed18a4070a5090a154207d47657299 Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Mon, 9 Jun 2014 19:03:09 +0300
Subject: [PATCH 08/16] Update man page.
---
 par2.1 | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/par2.1 b/par2.1
index 019220f..5c45b25 100644
--- a/par2.1
+++ b/par2.1
@@ -51,6 +51,9 @@ Set the Block\(hyCount
 .B \-s<n>
 .RB "Set the Block\(hySize (don't use both " "\-b" " and " "\-s" ")"
 .TP
+.B \-t<n>
+.RB "Number of threads to use (Auto-detected)"
+.TP
 .B \-r<n>
 Level of redundancy (percentage)
 .TP
@@ -95,3 +98,7 @@ Peter Brian Clements <peterbclements@users.sourceforge.net>
 Marcel Partap <mpartap@gmx.net>
 .br
 Ike Devolder <ike.devolder@gmail.com>
+.br
+par2cmdline-mt: Jussi Kansanen <jussi.kansanen@gmail.com>
+.br
+
From a5d828620135a17e960420f71a575fd27cf9d14b Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Mon, 9 Jun 2014 19:12:37 +0300
Subject: [PATCH 09/16] Enable OpenMP.
---
 par2cmdline.vcproj | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
From 39edd3264bc394254692f81b9922601f532264f1 Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Mon, 9 Jun 2014 19:18:32 +0300
Subject: [PATCH 10/16] Update READMEs.
---
 README    |  8 ++++++--
 README.md | 11 +++++++----
 2 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/README b/README
index a8dd396..0b1eec6 100644
--- a/README
+++ b/README
@@ -1,6 +1,9 @@
-par2cmdline is a PAR 2.0 compatible file verification and repair tool.
+par2cmdline-mt is a multithreaded (OpenMP) PAR 2.0 compatible file verification and repair tool.
 
 To see the ongoing development see
+https://github.com/jkansanen/par2cmdline-mt
+
+Par2cmdline was forked from
 https://github.com/BlackIkeEagle/par2cmdline
 
 The original development was done on Sourceforge but stalled.
@@ -66,7 +69,7 @@ If you have only downloaded a precompiled executable, then the source
 code should be available from the same location where you downloaded the
 executable from.
 
-If you have MS Visual Studio .NET, then just open the par2cmdline.sln
+*NOT TESTED WITH PAR2CMDLINE-MT* If you have MS Visual Studio .NET, then just open the par2cmdline.sln
 file and compile. You should then copy par2cmdline.exe to an appropriate
 location that is on your path.
 
@@ -106,6 +109,7 @@ The command line parameters for par2cmdline are as follow:
                required on create, optional for verify and repair
     -b<n>    : Set the Block-Count
     -s<n>    : Set the Block-Size (Don't use both -b and -s)
+    -t<n>    : Number of threads to use (Auto-detected)
     -r<n>    : Level of Redundancy (%)
     -r<c><n> : Redundancy target size, <c>=g(iga),m(ega),k(ilo) bytes
     -c<n>    : Recovery block count (don't use both -r and -c)
diff --git a/README.md b/README.md
index e1acf66..b9770f2 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,10 @@
-#par2cmdline
+#par2cmdline-mt
 
-**par2cmdline** is a PAR 2.0 compatible file verification and repair tool.
+**par2cmdline-mt** is a multithreaded (OpenMP) PAR 2.0 compatible file verification and repair tool.
 
-To see the ongoing development see <https://github.com/BlackIkeEagle/par2cmdline>
+To see the ongoing development see <https://github.com/jkansanen/par2cmdline-mt>
+
+Par2cmdline was forked from <https://github.com/BlackIkeEagle/par2cmdline>
 
 The original development was done on Sourceforge but stalled.
 
@@ -46,7 +48,7 @@ You should have received par2cmdline in the form of source code which you can co
 
 If you have only downloaded a precompiled executable, then the source code should be available from the same location where you downloaded the executable from.
 
-If you have MS Visual Studio .NET, then just open the *par2cmdline.sln* file and compile. You should then copy *par2cmdline.exe* to an appropriate location that is on your path.
+*NOT TESTED WITH PAR2CMDLINE-MT* If you have MS Visual Studio .NET, then just open the *par2cmdline.sln* file and compile. You should then copy *par2cmdline.exe* to an appropriate location that is on your path.
 
 To compile on Linux and other Unix variants use the following commands:
 
@@ -84,6 +86,7 @@ The command line parameters for par2cmdline are as follow:
                required on create, optional for verify and repair
     -b<n>    : Set the Block-Count
     -s<n>    : Set the Block-Size (Don't use both -b and -s)
+    -t<n>    : Number of threads to use (Auto-detected)   
     -r<n>    : Level of Redundancy (%)
     -r<c><n> : Redundancy target size, <c>=g(iga),m(ega),k(ilo) bytes
     -c<n>    : Recovery block count (don't use both -r and -c)
From 426d72c4ca3f282e2a4d9fd03648ec3614755865 Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Tue, 10 Jun 2014 12:55:54 +0300
Subject: [PATCH 11/16] Update command line options.
---
 commandline.cpp | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/commandline.cpp b/commandline.cpp
index f8cc559..425b47b 100644
--- a/commandline.cpp
+++ b/commandline.cpp
@@ -119,12 +119,7 @@ void CommandLine::usage(void)
     "\n"
     "  -a<file> : Set the main par2 archive name\n"
     "  -b<n>    : Set the Block-Count\n"
-    "  -s<n>    : Set the Block-Size (Don't use both -b and -s)\n";
-#ifdef _OPENMP
-  cout << 
-    "  -t<n>    : Number of threads to use (" << omp_get_max_threads() << " detected)\n";  
-#endif
-  cout << 
+    "  -s<n>    : Set the Block-Size (Don't use both -b and -s)\n"
     "  -r<n>    : Level of Redundancy (%%)\n"
     "  -r<c><n> : Redundancy target size, <c>=g(iga),m(ega),k(ilo) bytes\n"
     "  -c<n>    : Recovery block count (Don't use both -r and -c)\n"
@@ -132,7 +127,12 @@ void CommandLine::usage(void)
     "  -u       : Uniform recovery file sizes\n"
     "  -l       : Limit size of recovery files (Don't use both -u and -l)\n"
     "  -n<n>    : Number of recovery files (Don't use both -n and -l)\n"
-    "  -m<n>    : Memory (in MB) to use\n"
+    "  -m<n>    : Memory (in MB) to use\n";
+#ifdef _OPENMP
+  cout << 
+    "  -t<n>    : Number of threads to use (" << omp_get_max_threads() << " detected)\n";
+#endif
+  cout << 
     "  -v [-v]  : Be more verbose\n"
     "  -q [-q]  : Be more quiet (-q -q gives silence)\n"
     "  -p       : Purge backup files and par files on successful recovery or\n"
From 307c992d86b95033cfb823bc6961c3e413b39042 Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Tue, 10 Jun 2014 12:58:37 +0300
Subject: [PATCH 12/16] Update READMEs.
---
 README    | 2 +-
 README.md | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/README b/README
index 0b1eec6..0ce51d2 100644
--- a/README
+++ b/README
@@ -109,7 +109,6 @@ The command line parameters for par2cmdline are as follow:
                required on create, optional for verify and repair
     -b<n>    : Set the Block-Count
     -s<n>    : Set the Block-Size (Don't use both -b and -s)
-    -t<n>    : Number of threads to use (Auto-detected)
     -r<n>    : Level of Redundancy (%)
     -r<c><n> : Redundancy target size, <c>=g(iga),m(ega),k(ilo) bytes
     -c<n>    : Recovery block count (don't use both -r and -c)
@@ -118,6 +117,7 @@ The command line parameters for par2cmdline are as follow:
     -l       : Limit size of recovery files (Don't use both -u and -l)
     -n<n>    : Number of recovery files (Don't use both -n and -l)
     -m<n>    : Memory (in MB) to use
+    -t<n>    : Number of threads to use (Auto-detected)
     -v [-v]  : Be more verbose
     -q [-q]  : Be more quiet (-qq gives silence)
     -p       : Purge backup files and par files on successful recovery or
diff --git a/README.md b/README.md
index b9770f2..248009b 100644
--- a/README.md
+++ b/README.md
@@ -86,7 +86,7 @@ The command line parameters for par2cmdline are as follow:
                required on create, optional for verify and repair
     -b<n>    : Set the Block-Count
     -s<n>    : Set the Block-Size (Don't use both -b and -s)
-    -t<n>    : Number of threads to use (Auto-detected)   
+   
     -r<n>    : Level of Redundancy (%)
     -r<c><n> : Redundancy target size, <c>=g(iga),m(ega),k(ilo) bytes
     -c<n>    : Recovery block count (don't use both -r and -c)
@@ -95,6 +95,7 @@ The command line parameters for par2cmdline are as follow:
     -l       : Limit size of recovery files (Don't use both -u and -l)
     -n<n>    : Number of recovery files (Don't use both -n and -l)
     -m<n>    : Memory (in MB) to use
+    -t<n>    : Number of threads to use (Auto-detected)    
     -v [-v]  : Be more verbose
     -q [-q]  : Be more quiet (-qq gives silence)
     -p       : Purge backup files and par files on successful recovery or
From 1bf8a78702d5e231d8ab40fee2e263bee7aaa0ad Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Tue, 10 Jun 2014 13:08:52 +0300
Subject: [PATCH 13/16] Update man page.
---
 par2.1 | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/par2.1 b/par2.1
index 5c45b25..b6e912a 100644
--- a/par2.1
+++ b/par2.1
@@ -50,9 +50,7 @@ Set the Block\(hyCount
 .TP
 .B \-s<n>
 .RB "Set the Block\(hySize (don't use both " "\-b" " and " "\-s" ")"
-.TP
-.B \-t<n>
-.RB "Number of threads to use (Auto-detected)"
+
 .TP
 .B \-r<n>
 Level of redundancy (percentage)
@@ -78,6 +76,9 @@ Uniform recovery file sizes
 .B \-m<n>
 Memory (in MB) to use
 .TP
+.B \-t<n>
+.RB "Number of threads to use (Auto-detected)"
+.TP
 .B \-v [\-v]
 Be more verbose
 .TP
From eaf83a4c0f834ad7f9da07bbb08c9a7d0b2a1181 Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Tue, 10 Jun 2014 13:13:18 +0300
Subject: [PATCH 14/16] Update README.md
---
 README.md | 1 -
 1 file changed, 1 deletion(-)
diff --git a/README.md b/README.md
index 248009b..8417693 100644
--- a/README.md
+++ b/README.md
@@ -86,7 +86,6 @@ The command line parameters for par2cmdline are as follow:
                required on create, optional for verify and repair
     -b<n>    : Set the Block-Count
     -s<n>    : Set the Block-Size (Don't use both -b and -s)
-   
     -r<n>    : Level of Redundancy (%)
     -r<c><n> : Redundancy target size, <c>=g(iga),m(ega),k(ilo) bytes
     -c<n>    : Recovery block count (don't use both -r and -c)
From 0e5c05dc6641611b4a0dc2deaa42d28da8f4ee13 Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Wed, 8 Apr 2015 20:14:43 +0300
Subject: [PATCH 15/16] Dont set number of threads if OpenMP isn't used
 (reported by Yutaka Sawada).
---
 commandline.cpp | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/commandline.cpp b/commandline.cpp
index 073947f..1d47072 100644
--- a/commandline.cpp
+++ b/commandline.cpp
@@ -129,10 +129,10 @@ void CommandLine::usage(void)
     "  -n<n>    : Number of recovery files (Don't use both -n and -l)\n"
     "  -m<n>    : Memory (in MB) to use\n";
 #ifdef _OPENMP
-  cout << 
+  cout <<
     "  -t<n>    : Number of threads to use (" << omp_get_max_threads() << " detected)\n";
 #endif
-  cout << 
+  cout <<
     "  -v [-v]  : Be more verbose\n"
     "  -q [-q]  : Be more quiet (-q -q gives silence)\n"
     "  -p       : Purge backup files and par files on successful recovery or\n"
@@ -342,12 +342,13 @@ bool CommandLine::Parse(int argc, char *argv[])
             }
           }
           break;
-        
+
+#ifdef _OPENMP
         case 't':  // Set the amount of threads
           {
             u32 nthreads = 0;
             char *p = &argv[0][2];
-            
+
             while (*p && isdigit(*p))
             {
               nthreads = nthreads * 10 + (*p - '0');
@@ -360,13 +361,12 @@ bool CommandLine::Parse(int argc, char *argv[])
               return false;
             }
 
-            // Sets the number of threads to use            
+            // Sets the number of threads to use
             omp_set_num_threads(nthreads);
-            
+
           }
           break;
-
-
+#endif
         case 'r':  // Set the amount of redundancy required
           {
             if (operation != opCreate)
From 131980f0d83f224305bf66d313b6319d09d525ba Mon Sep 17 00:00:00 2001
From: Jussi Kansanen <jussi.kansanen@gmail.com>
Date: Wed, 5 Aug 2015 23:27:28 +0300
Subject: [PATCH] Fix race condition in progress indicator (reported by
 Phaneron).
---
 par2creator.cpp  | 1 +
 par2repairer.cpp | 1 +
 2 files changed, 2 insertions(+)
diff --git a/par2creator.cpp b/par2creator.cpp
index 3679b56..099d9a0 100644
--- a/par2creator.cpp
+++ b/par2creator.cpp
@@ -937,6 +937,7 @@ bool Par2Creator::ProcessData(u64 blockoffset, size_t blocklength)
       {
         // Update a progress indicator
         u32 oldfraction = (u32)(1000 * progress / totaldata);
+        #pragma omp atomic
         progress += blocklength;
         u32 newfraction = (u32)(1000 * progress / totaldata);
 
diff --git a/par2repairer.cpp b/par2repairer.cpp
index 351488d..73c5b77 100644
--- a/par2repairer.cpp
+++ b/par2repairer.cpp
@@ -2231,6 +2231,7 @@ bool Par2Repairer::ProcessData(u64 blockoffset, size_t blocklength)
         {
           // Update a progress indicator
           u32 oldfraction = (u32)(1000 * progress / totaldata);
+          #pragma omp atomic
           progress += blocklength;
           u32 newfraction = (u32)(1000 * progress / totaldata);
 
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin