]> granicus.if.org Git - imagemagick/commitdiff
Use linear scaling for the number of threads.
authorDirk Lemstra <dirk@git.imagemagick.org>
Thu, 12 Jan 2017 23:16:24 +0000 (00:16 +0100)
committerDirk Lemstra <dirk@git.imagemagick.org>
Thu, 12 Jan 2017 23:16:24 +0000 (00:16 +0100)
MagickCore/thread-private.h

index dfbc4fd5fb31e5d845166c31718639f39d9cc258..1b2e263c470dc23bc6dd2bfd7b8edad9184a8fce 100644 (file)
@@ -30,14 +30,12 @@ extern "C" {
   Single threaded unless workload justifies the threading overhead.
 */
 #define magick_threads(source,destination,chunk,expression) \
-  num_threads((expression) == 0 ? 1 : \
-    ((chunk) > (32*GetMagickResourceLimit(ThreadResource))) && \
-     ((GetImagePixelCacheType(source) == MemoryCache) || \
-      (GetImagePixelCacheType(source) == MapCache)) && \
-     ((GetImagePixelCacheType(destination) == MemoryCache) || \
-      (GetImagePixelCacheType(destination) == MapCache)) ? \
-      GetMagickResourceLimit(ThreadResource) : \
-      GetMagickResourceLimit(ThreadResource) < 2 ? 1 : 2)
+  num_threads((expression) != 0 && \
+    ((GetImagePixelCacheType(source) == MemoryCache) || \
+     (GetImagePixelCacheType(source) == MapCache)) && \
+    ((GetImagePixelCacheType(destination) == MemoryCache) || \
+     (GetImagePixelCacheType(destination) == MapCache)) ? \
+    max(1,min(GetMagickResourceLimit(ThreadResource),(chunk) / 16)) : 1)
 
 #if defined(__clang__) || (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ > 10))
 #define MagickCachePrefetch(address,mode,locality) \