diff --git a/MagickCore/attribute.c b/MagickCore/attribute.c index 7eb5448c51..d782aad541 100644 --- a/MagickCore/attribute.c +++ b/MagickCore/attribute.c @@ -168,7 +168,9 @@ MagickExport RectangleInfo GetImageBoundingBox(const Image *image, status=MagickTrue; GetPixelInfo(image,&zero); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -290,7 +292,7 @@ MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception) assert(image->signature == MagickSignature); if (image->debug != MagickFalse) (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); - number_threads=GetOpenMPMaximumThreads(); + number_threads=(size_t) GetMagickResourceLimit(ThreadResource); current_depth=(size_t *) AcquireQuantumMemory(number_threads, sizeof(*current_depth)); if (current_depth == (size_t *) NULL) @@ -304,7 +306,9 @@ MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception) i; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(status) + #pragma omp parallel for schedule(static) shared(status) \ + if ((image->colors) > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) image->colors; i++) { @@ -384,7 +388,9 @@ MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception) depth_map[i]=depth; } #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -447,7 +453,9 @@ MagickExport size_t GetImageDepth(const Image *image,ExceptionInfo *exception) Compute pixel depth. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -930,7 +938,9 @@ MagickExport MagickBooleanType SetImageDepth(Image *image, i; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(status) + #pragma omp parallel for schedule(static) shared(status) \ + if (image->colors > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) image->colors; i++) { @@ -972,7 +982,9 @@ MagickExport MagickBooleanType SetImageDepth(Image *image, depth_map[i]=ScaleAnyToQuantum(ScaleQuantumToAny((Quantum) i,range), range); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1035,7 +1047,9 @@ MagickExport MagickBooleanType SetImageDepth(Image *image, Scale pixels to desired depth. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { diff --git a/MagickCore/cache-view.c b/MagickCore/cache-view.c index 70b695536a..d673bfe16e 100644 --- a/MagickCore/cache-view.c +++ b/MagickCore/cache-view.c @@ -54,6 +54,7 @@ #include "MagickCore/exception.h" #include "MagickCore/exception-private.h" #include "MagickCore/pixel-accessor.h" +#include "MagickCore/resource_.h" #include "MagickCore/string_.h" #include "MagickCore/thread-private.h" @@ -164,7 +165,7 @@ MagickExport CacheView *AcquireVirtualCacheView(const Image *image, ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); (void) ResetMagickMemory(cache_view,0,sizeof(*cache_view)); cache_view->image=ReferenceImage((Image *) image); - cache_view->number_threads=GetOpenMPMaximumThreads(); + cache_view->number_threads=GetMagickResourceLimit(ThreadResource); cache_view->nexus_info=AcquirePixelCacheNexus(cache_view->number_threads); cache_view->virtual_pixel_method=GetImageVirtualPixelMethod(image); cache_view->debug=IsEventLogging(); diff --git a/MagickCore/cache.c b/MagickCore/cache.c index 2fc01c6776..249db2d0a1 100644 --- a/MagickCore/cache.c +++ b/MagickCore/cache.c @@ -201,7 +201,7 @@ MagickPrivate Cache AcquirePixelCache(const size_t number_threads) cache_info->id=GetMagickThreadId(); cache_info->number_threads=number_threads; if (number_threads == 0) - cache_info->number_threads=GetOpenMPMaximumThreads(); + cache_info->number_threads=(size_t) GetMagickResourceLimit(ThreadResource); cache_info->nexus_info=AcquirePixelCacheNexus(cache_info->number_threads); if (cache_info->nexus_info == (NexusInfo **) NULL) ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed"); @@ -898,7 +898,7 @@ static MagickBooleanType PixelCacheCloneUnoptimized(CacheInfo *clone_info, clone_offset+=sizeof(Quantum); } } - if (y < clone_info->rows) + if (y < (ssize_t) clone_info->rows) { /* Set remaining columns as undefined. @@ -1017,7 +1017,7 @@ static MagickBooleanType PixelCacheCloneUnoptimized(CacheInfo *clone_info, clone_offset+=length; } } - if (y < clone_info->rows) + if (y < (ssize_t) clone_info->rows) { /* Set remaining rows as undefined. @@ -1856,7 +1856,7 @@ static inline MagickBooleanType ValidatePixelCacheMorphology(const Image *image) (memcmp(p,q,image->number_channels*sizeof(*p)) != 0) || (image->metacontent_extent != cache_info->metacontent_extent) || (cache_info->nexus_info == (NexusInfo **) NULL) || - (cache_info->number_threads < GetOpenMPMaximumThreads())) + (cache_info->number_threads < (size_t) GetMagickResourceLimit(ThreadResource))) return(MagickFalse); return(MagickTrue); } @@ -4898,7 +4898,9 @@ static MagickBooleanType SetCacheAlphaChannel(Image *image,const Quantum alpha, status=MagickTrue; image_view=AcquireVirtualCacheView(image,exception); /* must be virtual */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(status) + #pragma omp parallel for schedule(static) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { diff --git a/MagickCore/channel.c b/MagickCore/channel.c index 6f5f9b190b..1ca7f64883 100644 --- a/MagickCore/channel.c +++ b/MagickCore/channel.c @@ -49,6 +49,7 @@ #include "MagickCore/monitor-private.h" #include "MagickCore/option.h" #include "MagickCore/pixel-accessor.h" +#include "MagickCore/resource_.h" #include "MagickCore/string-private.h" #include "MagickCore/token.h" #include "MagickCore/utility.h" @@ -126,7 +127,8 @@ static MagickBooleanType ChannelImage(Image *destination_image, status; size_t - height; + height, + width; ssize_t y; @@ -135,8 +137,11 @@ static MagickBooleanType ChannelImage(Image *destination_image, source_view=AcquireVirtualCacheView(source_image,exception); destination_view=AcquireAuthenticCacheView(destination_image,exception); height=MagickMin(source_image->rows,destination_image->rows); + width=MagickMin(source_image->columns,destination_image->columns); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(status) + #pragma omp parallel for schedule(static) shared(status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) height; y++) { @@ -153,9 +158,6 @@ static MagickBooleanType ChannelImage(Image *destination_image, register ssize_t x; - size_t - width; - if (status == MagickFalse) continue; p=GetCacheViewVirtualPixels(source_view,0,y,source_image->columns,1, @@ -173,7 +175,6 @@ static MagickBooleanType ChannelImage(Image *destination_image, if ((destination_traits == UndefinedPixelTrait) || (source_traits == UndefinedPixelTrait)) continue; - width=MagickMin(source_image->columns,destination_image->columns); for (x=0; x < (ssize_t) width; x++) { if (channel_op == AssignChannelOp) @@ -654,7 +655,9 @@ MagickExport Image *SeparateImage(const Image *image, image_view=AcquireVirtualCacheView(image,exception); separate_view=AcquireAuthenticCacheView(separate_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -715,7 +718,7 @@ MagickExport Image *SeparateImage(const Image *image, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_SeparateImage) + #pragma omp critical (MagickCore_SeparateImage) #endif proceed=SetImageProgress(image,SeparateImageTag,progress++,image->rows); if (proceed == MagickFalse) diff --git a/MagickCore/colormap.c b/MagickCore/colormap.c index 5a420c1e1f..50c6621f02 100644 --- a/MagickCore/colormap.c +++ b/MagickCore/colormap.c @@ -62,6 +62,7 @@ #include "MagickCore/pixel-accessor.h" #include "MagickCore/quantize.h" #include "MagickCore/quantum.h" +#include "MagickCore/resource_.h" #include "MagickCore/semaphore.h" #include "MagickCore/string_.h" #include "MagickCore/token.h" @@ -203,7 +204,9 @@ MagickExport MagickBooleanType CycleColormapImage(Image *image, status=MagickTrue; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -327,7 +330,9 @@ MagickExport MagickBooleanType SortColormapByIntensity(Image *image, Assign index values to colormap entries. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if (image->colors > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) image->colors; i++) image->colormap[i].alpha=(double) i; diff --git a/MagickCore/colorspace.c b/MagickCore/colorspace.c index 3b264e0c41..120443bb61 100644 --- a/MagickCore/colorspace.c +++ b/MagickCore/colorspace.c @@ -61,6 +61,7 @@ #include "MagickCore/quantize.h" #include "MagickCore/quantum.h" #include "MagickCore/quantum-private.h" +#include "MagickCore/resource_.h" #include "MagickCore/string_.h" #include "MagickCore/string-private.h" #include "MagickCore/utility.h" @@ -243,7 +244,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, } image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -302,7 +305,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, GetPixelInfo(image,&zero); image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -358,7 +363,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, } image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -422,7 +429,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, } image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -486,7 +495,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, } image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -550,7 +561,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, } image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -656,7 +669,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, black=pow(10.0,(reference_black-reference_white)*(gamma/density)* 0.002/film_gamma); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) logmap[i]=ScaleMapToQuantum((MagickRealType) (MaxMap*(reference_white+ @@ -664,7 +679,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, 0.002/film_gamma))/1024.0)); image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -739,7 +756,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, primary_info.y=(double) (MaxMap+1.0)/2.0; primary_info.z=(double) (MaxMap+1.0)/2.0; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -764,7 +783,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, G = 0.29900*R+0.58700*G+0.11400*B */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -797,7 +818,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, primary_info.y=(double) (MaxMap+1.0)/2.0; primary_info.z=(double) (MaxMap+1.0)/2.0; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -821,7 +844,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, G = 0.21260*R+0.71520*G+0.07220*B */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -852,7 +877,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, primary_info.y=(double) (MaxMap+1.0)/2.0; primary_info.z=(double) (MaxMap+1.0)/2.0; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -875,7 +902,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, Mostly removal of a gamma function, but with a linear component */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -909,7 +938,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, Z = 0.0193339*R+0.1191920*G+0.9503041*B */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -979,7 +1010,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, primary_info.y=(double) (MaxMap+1.0)/2.0; primary_info.z=(double) (MaxMap+1.0)/2.0; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -1010,7 +1043,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, primary_info.y=(double) (MaxMap+1.0)/2.0; primary_info.z=(double) (MaxMap+1.0)/2.0; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -1041,7 +1076,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, primary_info.y=(double) (MaxMap+1.0)/2.0; primary_info.z=(double) (MaxMap+1.0)/2.0; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -1063,7 +1100,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, Linear conversion tables. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -1093,7 +1132,9 @@ static MagickBooleanType sRGBTransformImage(Image *image, */ image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1708,7 +1749,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, } image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1767,7 +1810,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, GetPixelInfo(image,&zero); image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1823,7 +1868,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, } image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1889,7 +1936,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, } image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1955,7 +2004,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, } image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -2021,7 +2072,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, } image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -2136,7 +2189,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, return(MagickFalse); image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -2218,7 +2273,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, through QuantumRange. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -2253,7 +2310,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, through QuantumRange. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -2286,7 +2345,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, through QuantumRange. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -2316,7 +2377,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, B = 0.0*R+0.0*G+1.0*B */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -2350,7 +2413,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, B = 0.0556434*X-0.2040259*Y+1.057225*Z */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -2378,7 +2443,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, YCC is scaled by 1.3584. C1 zero is 156 and C2 is at 137. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -2411,7 +2478,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, through QuantumRange. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -2446,7 +2515,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, through QuantumRange. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -2479,7 +2550,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, through QuantumRange. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -2505,7 +2578,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, Linear conversion tables. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -2535,7 +2610,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, */ image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -2639,7 +2716,9 @@ static MagickBooleanType TransformsRGBImage(Image *image, Convert PseudoClass image. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if (image->colors > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) image->colors; i++) { diff --git a/MagickCore/compare.c b/MagickCore/compare.c index fefc1aca1e..420feec75f 100644 --- a/MagickCore/compare.c +++ b/MagickCore/compare.c @@ -177,7 +177,9 @@ MagickExport Image *CompareImages(Image *image,const Image *reconstruct_image, reconstruct_view=AcquireVirtualCacheView(reconstruct_image,exception); highlight_view=AcquireAuthenticCacheView(highlight_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -325,7 +327,9 @@ static MagickBooleanType GetAbsoluteDistortion(const Image *image, image_view=AcquireVirtualCacheView(image,exception); reconstruct_view=AcquireVirtualCacheView(reconstruct_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -394,7 +398,7 @@ static MagickBooleanType GetAbsoluteDistortion(const Image *image, q+=GetPixelChannels(reconstruct_image); } #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_GetAbsoluteError) + #pragma omp critical (MagickCore_GetAbsoluteError) #endif for (i=0; i <= MaxPixelChannels; i++) distortion[i]+=channel_distortion[i]; @@ -449,7 +453,9 @@ static MagickBooleanType GetFuzzDistortion(const Image *image, image_view=AcquireVirtualCacheView(image,exception); reconstruct_view=AcquireVirtualCacheView(reconstruct_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -515,7 +521,7 @@ static MagickBooleanType GetFuzzDistortion(const Image *image, q+=GetPixelChannels(reconstruct_image); } #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_GetMeanSquaredError) + #pragma omp critical (MagickCore_GetMeanSquaredError) #endif for (i=0; i <= MaxPixelChannels; i++) distortion[i]+=channel_distortion[i]; @@ -549,7 +555,9 @@ static MagickBooleanType GetMeanAbsoluteDistortion(const Image *image, image_view=AcquireVirtualCacheView(image,exception); reconstruct_view=AcquireVirtualCacheView(reconstruct_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -614,7 +622,7 @@ static MagickBooleanType GetMeanAbsoluteDistortion(const Image *image, q+=GetPixelChannels(reconstruct_image); } #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_GetMeanAbsoluteError) + #pragma omp critical (MagickCore_GetMeanAbsoluteError) #endif for (i=0; i <= MaxPixelChannels; i++) distortion[i]+=channel_distortion[i]; @@ -743,7 +751,9 @@ static MagickBooleanType GetMeanSquaredDistortion(const Image *image, image_view=AcquireVirtualCacheView(image,exception); reconstruct_view=AcquireVirtualCacheView(reconstruct_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -809,7 +819,7 @@ static MagickBooleanType GetMeanSquaredDistortion(const Image *image, q+=GetPixelChannels(reconstruct_image); } #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_GetMeanSquaredError) + #pragma omp critical (MagickCore_GetMeanSquaredError) #endif for (i=0; i <= MaxPixelChannels; i++) distortion[i]+=channel_distortion[i]; @@ -977,7 +987,9 @@ static MagickBooleanType GetPeakAbsoluteDistortion(const Image *image, image_view=AcquireVirtualCacheView(image,exception); reconstruct_view=AcquireVirtualCacheView(reconstruct_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1044,7 +1056,7 @@ static MagickBooleanType GetPeakAbsoluteDistortion(const Image *image, q+=GetPixelChannels(reconstruct_image); } #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_GetPeakAbsoluteError) + #pragma omp critical (MagickCore_GetPeakAbsoluteError) #endif for (i=0; i <= MaxPixelChannels; i++) if (channel_distortion[i] > distortion[i]) @@ -1586,7 +1598,9 @@ MagickExport Image *SimilarityImage(Image *image,const Image *reference, progress=0; similarity_view=AcquireAuthenticCacheView(similarity_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) (image->rows-reference->rows+1); y++) { @@ -1615,7 +1629,7 @@ MagickExport Image *SimilarityImage(Image *image,const Image *reference, similarity=GetSimilarityMetric(image,reference,metric,x,y,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_SimilarityImage) + #pragma omp critical (MagickCore_SimilarityImage) #endif if (similarity < *similarity_metric) { @@ -1654,9 +1668,9 @@ MagickExport Image *SimilarityImage(Image *image,const Image *reference, if (image->progress_monitor != (MagickProgressMonitor) NULL) { #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_SimilarityImage) + #pragma omp critical (MagickCore_SimilarityImage) #endif - if (IfMagickFalse( SetImageProgress(image,SimilarityImageTag, + if (IfMagickFalse(SetImageProgress(image,SimilarityImageTag, progress++,image->rows) )) status=MagickFalse; } diff --git a/MagickCore/composite.c b/MagickCore/composite.c index f0e46aad6c..ae6b03574c 100644 --- a/MagickCore/composite.c +++ b/MagickCore/composite.c @@ -334,7 +334,9 @@ static MagickBooleanType CompositeOverImage(Image *image, composite_view=AcquireVirtualCacheView(composite_image,exception); image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -518,7 +520,7 @@ static MagickBooleanType CompositeOverImage(Image *image, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_CompositeImage) + #pragma omp critical (MagickCore_CompositeImage) #endif proceed=SetImageProgress(image,CompositeImageTag,progress++, image->rows); @@ -607,7 +609,9 @@ MagickExport MagickBooleanType CompositeImage(Image *image, composite_view=AcquireVirtualCacheView(composite_image,exception); image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((composite_image->rows*composite_image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) composite_image->rows; y++) { @@ -1166,7 +1170,9 @@ MagickExport MagickBooleanType CompositeImage(Image *image, composite_view=AcquireVirtualCacheView(composite_image,exception); image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -2364,7 +2370,9 @@ MagickExport MagickBooleanType TextureImage(Image *image,const Image *texture, Tile texture onto the image background. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(status) + #pragma omp parallel for schedule(static) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y+=(ssize_t) texture_image->rows) { @@ -2413,7 +2421,9 @@ MagickExport MagickBooleanType TextureImage(Image *image,const Image *texture, texture_view=AcquireVirtualCacheView(texture_image,exception); image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(status) + #pragma omp parallel for schedule(static) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { diff --git a/MagickCore/decorate.c b/MagickCore/decorate.c index 3eafe541e5..e202a51edd 100644 --- a/MagickCore/decorate.c +++ b/MagickCore/decorate.c @@ -55,6 +55,7 @@ #include "MagickCore/pixel-accessor.h" #include "MagickCore/quantum.h" #include "MagickCore/quantum-private.h" +#include "MagickCore/resource_.h" #include "MagickCore/thread-private.h" #include "MagickCore/transform.h" @@ -231,7 +232,7 @@ MagickExport Image *FrameImage(const Image *image,const FrameInfo *frame_info, } if ((IsGrayColorspace(image->colorspace) != MagickFalse) && (IsPixelInfoGray(&image->matte_color) == MagickFalse)) - SetImageColorspace(frame_image,sRGBColorspace,exception); + (void) SetImageColorspace(frame_image,sRGBColorspace,exception); if ((frame_image->border_color.matte != MagickFalse) && (frame_image->matte == MagickFalse)) (void) SetImageAlpha(frame_image,OpaqueAlpha,exception); @@ -383,7 +384,9 @@ MagickExport Image *FrameImage(const Image *image,const FrameInfo *frame_info, Draw sides of ornamental border. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -687,7 +690,9 @@ MagickExport MagickBooleanType RaiseImage(Image *image, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((raise_info->height*raise_info->width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) raise_info->height; y++) { @@ -792,7 +797,9 @@ MagickExport MagickBooleanType RaiseImage(Image *image, } } #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=(ssize_t) raise_info->height; y < (ssize_t) (image->rows-raise_info->height); y++) { @@ -874,7 +881,9 @@ MagickExport MagickBooleanType RaiseImage(Image *image, } } #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=(ssize_t) (image->rows-raise_info->height); y < (ssize_t) image->rows; y++) { diff --git a/MagickCore/distort.c b/MagickCore/distort.c index d70bd8e538..d99b7952da 100644 --- a/MagickCore/distort.c +++ b/MagickCore/distort.c @@ -63,6 +63,7 @@ #include "MagickCore/resample.h" #include "MagickCore/resample-private.h" #include "MagickCore/registry.h" +#include "MagickCore/resource_.h" #include "MagickCore/semaphore.h" #include "MagickCore/shear.h" #include "MagickCore/string_.h" @@ -2312,7 +2313,9 @@ MagickExport Image *DistortImage(const Image *image,DistortImageMethod method, UndefinedVirtualPixelMethod,MagickFalse,exception); distort_view=AcquireAuthenticCacheView(distort_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((distort_image->rows*distort_image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (j=0; j < (ssize_t) distort_image->rows; j++) { @@ -2732,7 +2735,7 @@ if ( d.x == 0.5 && d.y == 0.5 ) { proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_DistortImage) + #pragma omp critical (MagickCore_DistortImage) #endif proceed=SetImageProgress(image,DistortImageTag,progress++, image->rows); @@ -3036,7 +3039,9 @@ MagickExport Image *SparseColorImage(const Image *image, progress=0; sparse_view=AcquireAuthenticCacheView(sparse_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((sparse_image->rows*sparse_image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (j=0; j < (ssize_t) sparse_image->rows; j++) { @@ -3223,7 +3228,7 @@ MagickExport Image *SparseColorImage(const Image *image, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_SparseColorImage) + #pragma omp critical (MagickCore_SparseColorImage) #endif proceed=SetImageProgress(image,SparseColorTag,progress++,image->rows); if (proceed == MagickFalse) diff --git a/MagickCore/draw.c b/MagickCore/draw.c index 03de5dd694..f874ab5e4b 100644 --- a/MagickCore/draw.c +++ b/MagickCore/draw.c @@ -74,6 +74,7 @@ #include "MagickCore/property.h" #include "MagickCore/resample.h" #include "MagickCore/resample-private.h" +#include "MagickCore/resource_.h" #include "MagickCore/string_.h" #include "MagickCore/string-private.h" #include "MagickCore/thread-private.h" @@ -1102,6 +1103,10 @@ MagickExport MagickBooleanType DrawAffineImage(Image *image, SegmentInfo edge; + size_t + height, + width; + ssize_t start, stop, @@ -1158,10 +1163,14 @@ MagickExport MagickBooleanType DrawAffineImage(Image *image, GetPixelInfo(image,&zero); start=(ssize_t) ceil(edge.y1-0.5); stop=(ssize_t) ceil(edge.y2-0.5); + height=(size_t) (floor(edge.y2+0.5)-ceil(edge.y1-0.5)); + width=(size_t) (floor(edge.x2+0.5)-ceil(edge.x1-0.5)); source_view=AcquireVirtualCacheView(source,exception); image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(status) + #pragma omp parallel for schedule(static) shared(status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=start; y <= stop; y++) { @@ -3225,6 +3234,10 @@ MagickExport MagickBooleanType DrawGradientImage(Image *image, RectangleInfo bounding_box; + size_t + height, + width; + ssize_t y; @@ -3244,9 +3257,13 @@ MagickExport MagickBooleanType DrawGradientImage(Image *image, bounding_box=gradient->bounding_box; status=MagickTrue; GetPixelInfo(image,&zero); + height=bounding_box.height-bounding_box.y; + width=bounding_box.width-bounding_box.x; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(status) + #pragma omp parallel for schedule(static) shared(status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=bounding_box.y; y < (ssize_t) bounding_box.height; y++) { @@ -3552,7 +3569,7 @@ static PolygonInfo **DestroyPolygonThreadSet(PolygonInfo **polygon_info) i; assert(polygon_info != (PolygonInfo **) NULL); - for (i=0; i < (ssize_t) GetOpenMPMaximumThreads(); i++) + for (i=0; i < (ssize_t) GetMagickResourceLimit(ThreadResource); i++) if (polygon_info[i] != (PolygonInfo *) NULL) polygon_info[i]=DestroyPolygonInfo(polygon_info[i]); polygon_info=(PolygonInfo **) RelinquishMagickMemory(polygon_info); @@ -3574,13 +3591,12 @@ static PolygonInfo **AcquirePolygonThreadSet(const DrawInfo *draw_info, size_t number_threads; - number_threads=GetOpenMPMaximumThreads(); + number_threads=(size_t) GetMagickResourceLimit(ThreadResource); polygon_info=(PolygonInfo **) AcquireQuantumMemory(number_threads, sizeof(*polygon_info)); if (polygon_info == (PolygonInfo **) NULL) return((PolygonInfo **) NULL); - (void) ResetMagickMemory(polygon_info,0,GetOpenMPMaximumThreads()* - sizeof(*polygon_info)); + (void) ResetMagickMemory(polygon_info,0,number_threads*sizeof(*polygon_info)); path_info=ConvertPrimitiveToPath(draw_info,primitive_info); if (path_info == (PathInfo *) NULL) return(DestroyPolygonThreadSet(polygon_info)); @@ -3791,6 +3807,10 @@ static MagickBooleanType DrawPolygonPrimitive(Image *image, SegmentInfo bounds; + size_t + height, + width; + ssize_t start, stop, @@ -3845,6 +3865,8 @@ static MagickBooleanType DrawPolygonPrimitive(Image *image, image->rows ? (double) image->rows-1.0 : bounds.y2; status=MagickTrue; image_view=AcquireAuthenticCacheView(image,exception); + height=(size_t) (floor(bounds.y2+0.5)-ceil(bounds.y1-0.5)); + width=(size_t) (floor(bounds.x2+0.5)-ceil(bounds.x1-0.5)); if (primitive_info->coordinates == 1) { /* @@ -3853,7 +3875,9 @@ static MagickBooleanType DrawPolygonPrimitive(Image *image, start=(ssize_t) ceil(bounds.y1-0.5); stop=(ssize_t) floor(bounds.y2+0.5); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(status) + #pragma omp parallel for schedule(static) shared(status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=start; y <= stop; y++) { @@ -3915,7 +3939,9 @@ static MagickBooleanType DrawPolygonPrimitive(Image *image, start=(ssize_t) ceil(bounds.y1-0.5); stop=(ssize_t) floor(bounds.y2+0.5); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(status) + #pragma omp parallel for schedule(static) shared(status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=start; y <= stop; y++) { diff --git a/MagickCore/effect.c b/MagickCore/effect.c index a688194509..984a25477f 100644 --- a/MagickCore/effect.c +++ b/MagickCore/effect.c @@ -294,7 +294,9 @@ MagickExport Image *AdaptiveBlurImage(const Image *image,const double radius, edge_view=AcquireVirtualCacheView(edge_image,exception); blur_view=AcquireAuthenticCacheView(blur_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((blur_image->rows*blur_image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) blur_image->rows; y++) { @@ -620,7 +622,9 @@ MagickExport Image *AdaptiveSharpenImage(const Image *image,const double radius, edge_view=AcquireVirtualCacheView(edge_image,exception); sharp_view=AcquireAuthenticCacheView(sharp_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((sharp_image->rows*sharp_image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) sharp_image->rows; y++) { @@ -949,7 +953,9 @@ MagickExport Image *BlurImage(const Image *image,const double radius, image_view=AcquireVirtualCacheView(image,exception); blur_view=AcquireAuthenticCacheView(blur_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1078,7 +1084,9 @@ MagickExport Image *BlurImage(const Image *image,const double radius, image_view=AcquireVirtualCacheView(blur_image,exception); blur_view=AcquireAuthenticCacheView(blur_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((blur_image->rows*blur_image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (x=0; x < (ssize_t) blur_image->columns; x++) { @@ -1288,7 +1296,9 @@ static void Hull(const ssize_t x_offset,const ssize_t y_offset, q=g+(columns+2); r=p+(y_offset*(columns+2)+x_offset); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if ((rows*columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) rows; y++) { @@ -1324,7 +1334,9 @@ static void Hull(const ssize_t x_offset,const ssize_t y_offset, r=q+(y_offset*(columns+2)+x_offset); s=q-(y_offset*(columns+2)+x_offset); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) + #pragma omp parallel for schedule(static) \ + if ((rows*columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) rows; y++) { @@ -1949,7 +1961,9 @@ MagickExport Image *MotionBlurImage(const Image *image,const double radius, motion_view=AcquireVirtualCacheView(image,exception); blur_view=AcquireAuthenticCacheView(blur_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -2726,7 +2740,9 @@ MagickExport Image *RadialBlurImage(const Image *image,const double angle, radial_view=AcquireVirtualCacheView(image,exception); blur_view=AcquireAuthenticCacheView(blur_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -3020,7 +3036,9 @@ MagickExport Image *SelectiveBlurImage(const Image *image,const double radius, image_view=AcquireVirtualCacheView(image,exception); blur_view=AcquireAuthenticCacheView(blur_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -3273,7 +3291,9 @@ MagickExport Image *ShadeImage(const Image *image,const MagickBooleanType gray, image_view=AcquireVirtualCacheView(image,exception); shade_view=AcquireAuthenticCacheView(shade_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -3601,7 +3621,8 @@ MagickExport Image *SpreadImage(const Image *image,const double radius, spread_view=AcquireAuthenticCacheView(spread_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) #pragma omp parallel for schedule(static,8) shared(progress,status) \ - if (key == ~0UL) num_threads(GetMagickResourceLimit(ThreadResource)) + if (((image->rows*image->columns) > 8192) && (key == ~0UL)) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -3740,7 +3761,9 @@ MagickExport Image *UnsharpMaskImage(const Image *image,const double radius, image_view=AcquireVirtualCacheView(image,exception); unsharp_view=AcquireAuthenticCacheView(unsharp_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { diff --git a/MagickCore/enhance.c b/MagickCore/enhance.c index 2610990aa5..cb0104a821 100644 --- a/MagickCore/enhance.c +++ b/MagickCore/enhance.c @@ -69,6 +69,7 @@ #include "MagickCore/quantum-private.h" #include "MagickCore/resample.h" #include "MagickCore/resample-private.h" +#include "MagickCore/resource_.h" #include "MagickCore/statistic.h" #include "MagickCore/string_.h" #include "MagickCore/string-private.h" @@ -342,7 +343,9 @@ MagickExport MagickBooleanType ClutImage(Image *image,const Image *clut_image, adjust=(ssize_t) (clut_image->interpolate == IntegerInterpolatePixel ? 0 : 1); clut_view=AcquireVirtualCacheView(clut_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) + #pragma omp parallel for schedule(static,4) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -354,7 +357,9 @@ MagickExport MagickBooleanType ClutImage(Image *image,const Image *clut_image, clut_view=DestroyCacheView(clut_view); image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -384,11 +389,16 @@ MagickExport MagickBooleanType ClutImage(Image *image,const Image *clut_image, continue; } GetPixelInfoPixel(image,q,&pixel); - pixel.red=clut_map[ScaleQuantumToMap(pixel.red)].red; - pixel.green=clut_map[ScaleQuantumToMap(pixel.green)].green; - pixel.blue=clut_map[ScaleQuantumToMap(pixel.blue)].blue; - pixel.black=clut_map[ScaleQuantumToMap(pixel.black)].black; - pixel.alpha=clut_map[ScaleQuantumToMap(pixel.alpha)].alpha; + pixel.red=clut_map[ScaleQuantumToMap( + ClampToQuantum(pixel.red))].red; + pixel.green=clut_map[ScaleQuantumToMap( + ClampToQuantum(pixel.green))].green; + pixel.blue=clut_map[ScaleQuantumToMap( + ClampToQuantum(pixel.blue))].blue; + pixel.black=clut_map[ScaleQuantumToMap( + ClampToQuantum(pixel.black))].black; + pixel.alpha=clut_map[ScaleQuantumToMap( + ClampToQuantum(pixel.alpha))].alpha; SetPixelInfoPixel(image,&pixel,q); q+=GetPixelChannels(image); } @@ -698,7 +708,9 @@ MagickExport MagickBooleanType ColorDecisionListImage(Image *image, ThrowBinaryException(ResourceLimitError,"MemoryAllocationFailed", image->filename); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) + #pragma omp parallel for schedule(static,4) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -718,7 +730,9 @@ MagickExport MagickBooleanType ColorDecisionListImage(Image *image, Apply transfer function to colormap. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if (image->colors > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) image->colors; i++) { @@ -745,7 +759,9 @@ MagickExport MagickBooleanType ColorDecisionListImage(Image *image, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -900,7 +916,9 @@ MagickExport MagickBooleanType ContrastImage(Image *image, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1086,7 +1104,9 @@ MagickExport MagickBooleanType ContrastStretchImage(Image *image, */ number_channels=GetPixelChannels(image); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) number_channels; i++) { @@ -1123,7 +1143,9 @@ MagickExport MagickBooleanType ContrastStretchImage(Image *image, sizeof(*stretch_map)); number_channels=GetPixelChannels(image); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) number_channels; i++) { @@ -1154,7 +1176,9 @@ MagickExport MagickBooleanType ContrastStretchImage(Image *image, Stretch-contrast colormap. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if (image->colors > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (j=0; j < (ssize_t) image->colors; j++) { @@ -1195,7 +1219,9 @@ MagickExport MagickBooleanType ContrastStretchImage(Image *image, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1347,7 +1373,9 @@ MagickExport Image *EnhanceImage(const Image *image,ExceptionInfo *exception) image_view=AcquireVirtualCacheView(image,exception); enhance_view=AcquireAuthenticCacheView(enhance_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1578,7 +1606,9 @@ MagickExport MagickBooleanType EqualizeImage(Image *image, */ number_channels=GetPixelChannels(image); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) number_channels; i++) { @@ -1599,7 +1629,9 @@ MagickExport MagickBooleanType EqualizeImage(Image *image, sizeof(*equalize_map)); number_channels=GetPixelChannels(image); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) number_channels; i++) { @@ -1628,7 +1660,9 @@ MagickExport MagickBooleanType EqualizeImage(Image *image, Equalize colormap. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if (image->colors > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (j=0; j < (ssize_t) image->colors; j++) { @@ -1672,7 +1706,9 @@ MagickExport MagickBooleanType EqualizeImage(Image *image, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1810,7 +1846,9 @@ MagickExport MagickBooleanType GammaImage(Image *image,const double gamma, (void) ResetMagickMemory(gamma_map,0,(MaxMap+1)*sizeof(*gamma_map)); if (gamma != 0.0) #if defined(MAGICKCORE_OPENMP_SUPPORT) && (MaxMap > 256) - #pragma omp parallel for + #pragma omp parallel for \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) gamma_map[i]=ScaleMapToQuantum((MagickRealType) (MaxMap*pow((double) i/ @@ -1821,7 +1859,9 @@ MagickExport MagickBooleanType GammaImage(Image *image,const double gamma, Gamma-correct colormap. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if (image->colors > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) image->colors; i++) { @@ -1846,7 +1886,9 @@ MagickExport MagickBooleanType GammaImage(Image *image,const double gamma, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -2015,7 +2057,9 @@ MagickExport MagickBooleanType HaldClutImage(Image *image, hald_view=AcquireVirtualCacheView(hald_image,exception); image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -2195,7 +2239,9 @@ MagickExport MagickBooleanType LevelImage(Image *image,const double black_point, (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); if (image->storage_class == PseudoClass) #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if (image->colors > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) image->colors; i++) { @@ -2222,7 +2268,9 @@ MagickExport MagickBooleanType LevelImage(Image *image,const double black_point, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -2361,7 +2409,9 @@ MagickExport MagickBooleanType LevelizeImage(Image *image, (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); if (image->storage_class == PseudoClass) #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if (image->colors > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) image->colors; i++) { @@ -2388,7 +2438,9 @@ MagickExport MagickBooleanType LevelizeImage(Image *image, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -2872,7 +2924,9 @@ MagickExport MagickBooleanType ModulateImage(Image *image,const char *modulate, Modulate colormap. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if (image->colors > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) image->colors; i++) switch (colorspace) @@ -2908,7 +2962,9 @@ MagickExport MagickBooleanType ModulateImage(Image *image,const char *modulate, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -3040,7 +3096,9 @@ MagickExport MagickBooleanType NegateImage(Image *image, Negate colormap. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if (image->colors > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) image->colors; i++) { @@ -3068,7 +3126,9 @@ MagickExport MagickBooleanType NegateImage(Image *image, if (grayscale != MagickFalse) { #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -3141,7 +3201,9 @@ MagickExport MagickBooleanType NegateImage(Image *image, Negate image. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -3320,7 +3382,9 @@ MagickExport MagickBooleanType SigmoidalContrastImage(Image *image, image->filename); (void) ResetMagickMemory(sigmoidal_map,0,(MaxMap+1)*sizeof(*sigmoidal_map)); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if (MaxMap > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i <= (ssize_t) MaxMap; i++) { @@ -3383,7 +3447,9 @@ MagickExport MagickBooleanType SigmoidalContrastImage(Image *image, Sigmoidal-contrast enhance colormap. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if (image->colors > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) image->colors; i++) { @@ -3408,7 +3474,9 @@ MagickExport MagickBooleanType SigmoidalContrastImage(Image *image, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { diff --git a/MagickCore/feature.c b/MagickCore/feature.c index 39163a31bc..eb32c4607a 100644 --- a/MagickCore/feature.c +++ b/MagickCore/feature.c @@ -80,6 +80,7 @@ #include "MagickCore/quantize.h" #include "MagickCore/quantum-private.h" #include "MagickCore/random_.h" +#include "MagickCore/resource_.h" #include "MagickCore/segment.h" #include "MagickCore/semaphore.h" #include "MagickCore/signature-private.h" @@ -222,7 +223,9 @@ MagickExport ChannelFeatures *GetImageFeatures(const Image *image, status=MagickTrue; image_view=AcquireVirtualCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -592,7 +595,9 @@ MagickExport ChannelFeatures *GetImageFeatures(const Image *image, Compute texture features. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((number_grays*number_grays) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < 4; i++) { @@ -776,7 +781,9 @@ MagickExport ChannelFeatures *GetImageFeatures(const Image *image, Compute more texture features. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((number_grays*number_grays) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < 4; i++) { @@ -851,7 +858,9 @@ MagickExport ChannelFeatures *GetImageFeatures(const Image *image, Compute more texture features. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((number_grays*number_grays) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < 4; i++) { @@ -971,7 +980,9 @@ MagickExport ChannelFeatures *GetImageFeatures(const Image *image, (void) ResetMagickMemory(&variance,0,sizeof(variance)); (void) ResetMagickMemory(&sum_squares,0,sizeof(sum_squares)); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((number_grays*number_grays) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < 4; i++) { @@ -1122,7 +1133,9 @@ MagickExport ChannelFeatures *GetImageFeatures(const Image *image, Compute more texture features. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((number_grays*number_grays) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < 4; i++) { diff --git a/MagickCore/fourier.c b/MagickCore/fourier.c index 139ed4e497..2ccd3cee3e 100644 --- a/MagickCore/fourier.c +++ b/MagickCore/fourier.c @@ -55,6 +55,7 @@ #include "MagickCore/pixel-accessor.h" #include "MagickCore/property.h" #include "MagickCore/quantum-private.h" +#include "MagickCore/resource_.h" #include "MagickCore/thread-private.h" #if defined(MAGICKCORE_FFTW_DELEGATE) #if defined(MAGICKCORE_HAVE_COMPLEX_H) diff --git a/MagickCore/fx.c b/MagickCore/fx.c index 808f8e3123..4037b2e608 100644 --- a/MagickCore/fx.c +++ b/MagickCore/fx.c @@ -312,7 +312,8 @@ MagickExport Image *AddNoiseImage(const Image *image,const NoiseType noise_type, key=GetRandomSecretKey(random_info[0]); #if defined(MAGICKCORE_OPENMP_SUPPORT) #pragma omp parallel for schedule(static,4) shared(progress,status) \ - if (key == ~0UL) num_threads(GetMagickResourceLimit(ThreadResource)) + if (((image->rows*image->columns) > 8192) && (key == ~0UL)) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -478,7 +479,9 @@ MagickExport Image *BlueShiftImage(const Image *image,const double factor, image_view=AcquireVirtualCacheView(image,exception); shift_view=AcquireAuthenticCacheView(shift_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -740,7 +743,9 @@ MagickExport Image *ColorizeImage(const Image *image,const char *blend, image_view=AcquireVirtualCacheView(image,exception); colorize_view=AcquireAuthenticCacheView(colorize_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -946,7 +951,9 @@ MagickExport Image *ColorMatrixImage(const Image *image, image_view=AcquireVirtualCacheView(image,exception); color_view=AcquireAuthenticCacheView(color_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -2935,7 +2942,7 @@ static FxInfo **DestroyFxThreadSet(FxInfo **fx_info) i; assert(fx_info != (FxInfo **) NULL); - for (i=0; i < (ssize_t) GetOpenMPMaximumThreads(); i++) + for (i=0; i < (ssize_t) GetMagickResourceLimit(ThreadResource); i++) if (fx_info[i] != (FxInfo *) NULL) fx_info[i]=DestroyFxInfo(fx_info[i]); fx_info=(FxInfo **) RelinquishMagickMemory(fx_info); @@ -2960,7 +2967,7 @@ static FxInfo **AcquireFxThreadSet(const Image *image,const char *expression, size_t number_threads; - number_threads=GetOpenMPMaximumThreads(); + number_threads=(size_t) GetMagickResourceLimit(ThreadResource); fx_info=(FxInfo **) AcquireQuantumMemory(number_threads,sizeof(*fx_info)); if (fx_info == (FxInfo **) NULL) return((FxInfo **) NULL); @@ -3040,7 +3047,9 @@ MagickExport Image *FxImage(const Image *image,const char *expression, image_view=AcquireVirtualCacheView(image,exception); fx_view=AcquireAuthenticCacheView(fx_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) fx_image->rows; y++) { @@ -3238,7 +3247,9 @@ MagickExport Image *ImplodeImage(const Image *image,const double amount, image_view=AcquireVirtualCacheView(image,exception); implode_view=AcquireAuthenticCacheView(implode_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -3482,7 +3493,9 @@ MagickExport Image *MorphImages(const Image *image, image_view=AcquireVirtualCacheView(morph_image,exception); morph_view=AcquireAuthenticCacheView(morph_images,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((morph_image->rows*morph_image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) morph_images->rows; y++) { @@ -4137,7 +4150,9 @@ MagickExport Image *SepiaToneImage(const Image *image,const double threshold, image_view=AcquireVirtualCacheView(image,exception); sepia_view=AcquireAuthenticCacheView(sepia_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -4428,7 +4443,8 @@ MagickExport Image *SketchImage(const Image *image,const double radius, random_view=AcquireAuthenticCacheView(random_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) #pragma omp parallel for schedule(static,4) shared(status) \ - if (key == ~0UL) num_threads(GetMagickResourceLimit(ThreadResource)) + if (((image->rows*image->columns) > 8192) && (key == ~0UL)) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) random_image->rows; y++) { @@ -4601,7 +4617,9 @@ MagickExport MagickBooleanType SolarizeImage(Image *image, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -5085,7 +5103,9 @@ MagickExport Image *SwirlImage(const Image *image,double degrees, image_view=AcquireVirtualCacheView(image,exception); swirl_view=AcquireAuthenticCacheView(swirl_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -5318,7 +5338,9 @@ MagickExport Image *TintImage(const Image *image,const char *blend, image_view=AcquireVirtualCacheView(image,exception); tint_view=AcquireAuthenticCacheView(tint_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -5621,7 +5643,9 @@ MagickExport Image *WaveImage(const Image *image,const double amplitude, (void) SetCacheViewVirtualPixelMethod(image_view, BackgroundVirtualPixelMethod); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) wave_image->rows; y++) { diff --git a/MagickCore/image-view.c b/MagickCore/image-view.c index 4dba5afa14..b0e0699520 100644 --- a/MagickCore/image-view.c +++ b/MagickCore/image-view.c @@ -1,4 +1,4 @@ -/* + /* %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % % @@ -68,9 +68,6 @@ struct _ImageView CacheView *view; - size_t - number_threads; - ExceptionInfo *exception; @@ -117,7 +114,6 @@ MagickExport ImageView *CloneImageView(const ImageView *image_view) clone_view->description=ConstantString(image_view->description); clone_view->extent=image_view->extent; clone_view->view=CloneCacheView(image_view->view); - clone_view->number_threads=image_view->number_threads; clone_view->exception=AcquireExceptionInfo(); InheritException(clone_view->exception,image_view->exception); clone_view->debug=image_view->debug; @@ -225,6 +221,10 @@ MagickExport MagickBooleanType DuplexTransferImageViewIterator( MagickOffsetType progress; + size_t + height, + width; + ssize_t y; @@ -240,8 +240,12 @@ MagickExport MagickBooleanType DuplexTransferImageViewIterator( return(MagickFalse); status=MagickTrue; progress=0; + height=source->extent.height-source->extent.y; + width=source->extent.width-source->extent.x; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) num_threads(source->number_threads) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) { @@ -293,7 +297,7 @@ MagickExport MagickBooleanType DuplexTransferImageViewIterator( proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_DuplexTransferImageViewIterator) + #pragma omp critical (MagickCore_DuplexTransferImageViewIterator) #endif proceed=SetImageProgress(source_image,source->description,progress++, source->extent.height); @@ -535,6 +539,10 @@ MagickExport MagickBooleanType GetImageViewIterator(ImageView *source, MagickOffsetType progress; + size_t + height, + width; + ssize_t y; @@ -545,8 +553,12 @@ MagickExport MagickBooleanType GetImageViewIterator(ImageView *source, source_image=source->image; status=MagickTrue; progress=0; + height=source->extent.height-source->extent.y; + width=source->extent.width-source->extent.x; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) num_threads(source->number_threads) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((width*height) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) { @@ -573,7 +585,7 @@ MagickExport MagickBooleanType GetImageViewIterator(ImageView *source, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_GetImageViewIterator) + #pragma omp critical (MagickCore_GetImageViewIterator) #endif proceed=SetImageProgress(source_image,source->description,progress++, source->extent.height); @@ -721,7 +733,6 @@ MagickExport ImageView *NewImageView(Image *image,ExceptionInfo *exception) image_view->extent.height=image->rows; image_view->extent.x=0; image_view->extent.y=0; - image_view->number_threads=GetOpenMPMaximumThreads(); image_view->exception=AcquireExceptionInfo(); image_view->debug=IsEventLogging(); image_view->signature=MagickSignature; @@ -778,7 +789,6 @@ MagickExport ImageView *NewImageViewRegion(Image *image,const ssize_t x, image_view->extent.height=height; image_view->extent.x=x; image_view->extent.y=y; - image_view->number_threads=GetOpenMPMaximumThreads(); image_view->exception=AcquireExceptionInfo(); image_view->debug=IsEventLogging(); image_view->signature=MagickSignature; @@ -874,6 +884,10 @@ MagickExport MagickBooleanType SetImageViewIterator(ImageView *destination, MagickOffsetType progress; + size_t + height, + width; + ssize_t y; @@ -888,8 +902,12 @@ MagickExport MagickBooleanType SetImageViewIterator(ImageView *destination, return(MagickFalse); status=MagickTrue; progress=0; + height=destination->extent.height-destination->extent.y; + width=destination->extent.width-destination->extent.x; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) num_threads(destination->number_threads) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=destination->extent.y; y < (ssize_t) destination->extent.height; y++) { @@ -922,7 +940,7 @@ MagickExport MagickBooleanType SetImageViewIterator(ImageView *destination, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_SetImageViewIterator) + #pragma omp critical (MagickCore_SetImageViewIterator) #endif proceed=SetImageProgress(destination_image,destination->description, progress++,destination->extent.height); @@ -938,41 +956,6 @@ MagickExport MagickBooleanType SetImageViewIterator(ImageView *destination, % % % % % % -% S e t I m a g e V i e w T h r e a d s % -% % -% % -% % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% SetImageViewThreads() sets the number of threads in a thread team. -% -% The format of the SetImageViewDescription method is: -% -% void SetImageViewThreads(ImageView *image_view, -% const size_t number_threads) -% -% A description of each parameter follows: -% -% o image_view: the image view. -% -% o number_threads: the number of threads in a thread team. -% -*/ -MagickExport void SetImageViewThreads(ImageView *image_view, - const size_t number_threads) -{ - assert(image_view != (ImageView *) NULL); - assert(image_view->signature == MagickSignature); - image_view->number_threads=number_threads; - if (number_threads > GetOpenMPMaximumThreads()) - image_view->number_threads=GetOpenMPMaximumThreads(); -} - -/* -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % -% % -% % % T r a n s f e r I m a g e V i e w I t e r a t o r % % % % % @@ -1029,6 +1012,10 @@ MagickExport MagickBooleanType TransferImageViewIterator(ImageView *source, MagickOffsetType progress; + size_t + height, + width; + ssize_t y; @@ -1044,8 +1031,12 @@ MagickExport MagickBooleanType TransferImageViewIterator(ImageView *source, return(MagickFalse); status=MagickTrue; progress=0; + height=source->extent.height-source->extent.y; + width=source->extent.width-source->extent.x; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) num_threads(source->number_threads) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) { @@ -1089,7 +1080,7 @@ MagickExport MagickBooleanType TransferImageViewIterator(ImageView *source, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_TransferImageViewIterator) + #pragma omp critical (MagickCore_TransferImageViewIterator) #endif proceed=SetImageProgress(source_image,source->description,progress++, source->extent.height); @@ -1155,6 +1146,10 @@ MagickExport MagickBooleanType UpdateImageViewIterator(ImageView *source, MagickOffsetType progress; + size_t + height, + width; + ssize_t y; @@ -1168,8 +1163,12 @@ MagickExport MagickBooleanType UpdateImageViewIterator(ImageView *source, return(MagickFalse); status=MagickTrue; progress=0; + height=source->extent.height-source->extent.y; + width=source->extent.width-source->extent.x; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) num_threads(source->number_threads) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) { @@ -1199,7 +1198,7 @@ MagickExport MagickBooleanType UpdateImageViewIterator(ImageView *source, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_UpdateImageViewIterator) + #pragma omp critical (MagickCore_UpdateImageViewIterator) #endif proceed=SetImageProgress(source_image,source->description,progress++, source->extent.height); diff --git a/MagickCore/image.c b/MagickCore/image.c index c8da3d8df7..6682bc0c3f 100644 --- a/MagickCore/image.c +++ b/MagickCore/image.c @@ -83,6 +83,7 @@ #include "MagickCore/property.h" #include "MagickCore/quantize.h" #include "MagickCore/random_.h" +#include "MagickCore/resource_.h" #include "MagickCore/segment.h" #include "MagickCore/semaphore.h" #include "MagickCore/signature-private.h" @@ -534,7 +535,9 @@ MagickExport Image *AppendImages(const Image *images, y_offset-=geometry.y; image_view=AcquireVirtualCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(status) + #pragma omp parallel for schedule(static) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1641,7 +1644,9 @@ MagickExport MagickBooleanType IsHighDynamicRangeImage(const Image *image, status=MagickTrue; image_view=AcquireVirtualCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1895,7 +1900,9 @@ MagickExport Image *NewMagickImage(const ImageInfo *image_info, status=MagickTrue; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -2166,7 +2173,9 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image, break; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -2244,7 +2253,9 @@ MagickExport MagickBooleanType SetImageAlphaChannel(Image *image, break; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -2431,7 +2442,9 @@ MagickExport MagickBooleanType SetImageColor(Image *image, status=MagickTrue; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -3084,7 +3097,9 @@ MagickExport MagickBooleanType SetImageAlpha(Image *image,const Quantum alpha, status=MagickTrue; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -3738,7 +3753,9 @@ MagickExport MagickBooleanType SyncImage(Image *image,ExceptionInfo *exception) status=MagickTrue; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(range_exception,status) + #pragma omp parallel for schedule(static,4) shared(range_exception,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { diff --git a/MagickCore/morphology.c b/MagickCore/morphology.c index c08c136eae..5bb357089e 100644 --- a/MagickCore/morphology.c +++ b/MagickCore/morphology.c @@ -71,6 +71,7 @@ #include "MagickCore/pixel-accessor.h" #include "MagickCore/prepress.h" #include "MagickCore/quantize.h" +#include "MagickCore/resource_.h" #include "MagickCore/registry.h" #include "MagickCore/semaphore.h" #include "MagickCore/splay-tree.h" @@ -2586,7 +2587,9 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image, x; #if defined(MAGICKCORE_OPENMP_SUPPORT) -#pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (x=0; x < (ssize_t) image->columns; x++) { @@ -2745,7 +2748,7 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_MorphologyImage) + #pragma omp critical (MagickCore_MorphologyImage) #endif proceed=SetImageProgress(image,MorphologyTag,progress++,image->rows); if (proceed == MagickFalse) @@ -2762,7 +2765,9 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image, ** Normal handling of horizontal or rectangular kernels (row by row) */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -3288,7 +3293,7 @@ static ssize_t MorphologyPrimitive(const Image *image,Image *morphology_image, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_MorphologyImage) + #pragma omp critical (MagickCore_MorphologyImage) #endif proceed=SetImageProgress(image,MorphologyTag,progress++,image->rows); if (proceed == MagickFalse) @@ -4581,8 +4586,9 @@ MagickExport void ScaleGeometryKernelInfo (KernelInfo *kernel, const char *geometry) { //GeometryFlags - int + MagickStatusType flags; + GeometryInfo args; diff --git a/MagickCore/paint.c b/MagickCore/paint.c index 8c54a1353d..a70d1fa8bc 100644 --- a/MagickCore/paint.c +++ b/MagickCore/paint.c @@ -55,6 +55,7 @@ #include "MagickCore/monitor-private.h" #include "MagickCore/paint.h" #include "MagickCore/pixel-accessor.h" +#include "MagickCore/resource_.h" #include "MagickCore/statistic.h" #include "MagickCore/string_.h" #include "MagickCore/thread-private.h" @@ -499,7 +500,7 @@ static size_t **DestroyHistogramThreadSet(size_t **histogram) i; assert(histogram != (size_t **) NULL); - for (i=0; i < (ssize_t) GetOpenMPMaximumThreads(); i++) + for (i=0; i < (ssize_t) GetMagickResourceLimit(ThreadResource); i++) if (histogram[i] != (size_t *) NULL) histogram[i]=(size_t *) RelinquishMagickMemory(histogram[i]); histogram=(size_t **) RelinquishMagickMemory(histogram); @@ -515,7 +516,7 @@ static size_t **AcquireHistogramThreadSet(const size_t count) **histogram, number_threads; - number_threads=GetOpenMPMaximumThreads(); + number_threads=(size_t) GetMagickResourceLimit(ThreadResource); histogram=(size_t **) AcquireQuantumMemory(number_threads,sizeof(*histogram)); if (histogram == (size_t **) NULL) return((size_t **) NULL); @@ -590,7 +591,9 @@ MagickExport Image *OilPaintImage(const Image *image,const double radius, image_view=AcquireVirtualCacheView(image,exception); paint_view=AcquireAuthenticCacheView(paint_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -790,7 +793,9 @@ MagickExport MagickBooleanType OpaquePaintImage(Image *image, GetPixelInfo(image,&zero); image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -916,7 +921,9 @@ MagickExport MagickBooleanType TransparentPaintImage(Image *image, GetPixelInfo(image,&zero); image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1042,7 +1049,9 @@ MagickExport MagickBooleanType TransparentPaintImageChroma(Image *image, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { diff --git a/MagickCore/prepress.c b/MagickCore/prepress.c index 0559f6e3c6..2817407fc5 100644 --- a/MagickCore/prepress.c +++ b/MagickCore/prepress.c @@ -49,6 +49,7 @@ #include "MagickCore/memory_.h" #include "MagickCore/pixel-accessor.h" #include "MagickCore/prepress.h" +#include "MagickCore/resource_.h" #include "MagickCore/registry.h" #include "MagickCore/semaphore.h" #include "MagickCore/splay-tree.h" @@ -110,7 +111,9 @@ MagickExport double GetImageTotalInkDensity(Image *image, total_ink_density=0.0; image_view=AcquireVirtualCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -135,7 +138,7 @@ MagickExport double GetImageTotalInkDensity(Image *image, GetPixelBlue(image,p)+GetPixelBlack(image,p); if (density > total_ink_density) #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_GetImageTotalInkDensity) + #pragma omp critical (MagickCore_GetImageTotalInkDensity) #endif { if (density > total_ink_density) diff --git a/MagickCore/profile.c b/MagickCore/profile.c index 9bd8e57d33..59ff358a87 100644 --- a/MagickCore/profile.c +++ b/MagickCore/profile.c @@ -59,6 +59,7 @@ #include "MagickCore/property.h" #include "MagickCore/quantum.h" #include "MagickCore/quantum-private.h" +#include "MagickCore/resource_.h" #include "MagickCore/splay-tree.h" #include "MagickCore/string_.h" #include "MagickCore/thread-private.h" @@ -357,7 +358,7 @@ static unsigned short **DestroyPixelThreadSet(unsigned short **pixels) i; assert(pixels != (unsigned short **) NULL); - for (i=0; i < (ssize_t) GetOpenMPMaximumThreads(); i++) + for (i=0; i < (ssize_t) GetMagickResourceLimit(ThreadResource); i++) if (pixels[i] != (unsigned short *) NULL) pixels[i]=(unsigned short *) RelinquishMagickMemory(pixels[i]); pixels=(unsigned short **) RelinquishMagickMemory(pixels); @@ -376,7 +377,7 @@ static unsigned short **AcquirePixelThreadSet(const size_t columns, size_t number_threads; - number_threads=GetOpenMPMaximumThreads(); + number_threads=GetMagickResourceLimit(ThreadResource); pixels=(unsigned short **) AcquireQuantumMemory(number_threads, sizeof(*pixels)); if (pixels == (unsigned short **) NULL) @@ -398,7 +399,7 @@ static cmsHTRANSFORM *DestroyTransformThreadSet(cmsHTRANSFORM *transform) i; assert(transform != (cmsHTRANSFORM *) NULL); - for (i=0; i < (ssize_t) GetOpenMPMaximumThreads(); i++) + for (i=0; i < (ssize_t) GetMagickResourceLimit(ThreadResource); i++) if (transform[i] != (cmsHTRANSFORM) NULL) cmsDeleteTransform(transform[i]); transform=(cmsHTRANSFORM *) RelinquishMagickMemory(transform); @@ -419,7 +420,7 @@ static cmsHTRANSFORM *AcquireTransformThreadSet(Image *image, size_t number_threads; - number_threads=GetOpenMPMaximumThreads(); + number_threads=GetMagickResourceLimit(ThreadResource); transform=(cmsHTRANSFORM *) AcquireQuantumMemory(number_threads, sizeof(*transform)); if (transform == (cmsHTRANSFORM *) NULL) @@ -6040,7 +6041,9 @@ MagickExport MagickBooleanType ProfileImage(Image *image,const char *name, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -6115,7 +6118,7 @@ MagickExport MagickBooleanType ProfileImage(Image *image,const char *name, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) -#pragma omp critical (MagickCore_ProfileImage) + #pragma omp critical (MagickCore_ProfileImage) #endif proceed=SetImageProgress(image,ProfileImageTag,progress++, image->rows); diff --git a/MagickCore/quantize.c b/MagickCore/quantize.c index b52dbec179..09b8e480a4 100644 --- a/MagickCore/quantize.c +++ b/MagickCore/quantize.c @@ -197,6 +197,7 @@ #include "MagickCore/quantize.h" #include "MagickCore/quantum.h" #include "MagickCore/quantum-private.h" +#include "MagickCore/resource_.h" #include "MagickCore/string_.h" #include "MagickCore/thread-private.h" @@ -541,7 +542,9 @@ static MagickBooleanType AssignImageColors(Image *image,CubeInfo *cube_info, status=MagickTrue; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1417,7 +1420,7 @@ static RealPixelInfo **DestroyPixelThreadSet(RealPixelInfo **pixels) i; assert(pixels != (RealPixelInfo **) NULL); - for (i=0; i < (ssize_t) GetOpenMPMaximumThreads(); i++) + for (i=0; i < (ssize_t) GetMagickResourceLimit(ThreadResource); i++) if (pixels[i] != (RealPixelInfo *) NULL) pixels[i]=(RealPixelInfo *) RelinquishMagickMemory(pixels[i]); pixels=(RealPixelInfo **) RelinquishMagickMemory(pixels); @@ -1435,7 +1438,7 @@ static RealPixelInfo **AcquirePixelThreadSet(const size_t count) size_t number_threads; - number_threads=GetOpenMPMaximumThreads(); + number_threads=(size_t) GetMagickResourceLimit(ThreadResource); pixels=(RealPixelInfo **) AcquireQuantumMemory(number_threads, sizeof(*pixels)); if (pixels == (RealPixelInfo **) NULL) @@ -2377,7 +2380,9 @@ MagickExport MagickBooleanType PosterizeImage(Image *image,const size_t levels, (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename); if (image->storage_class == PseudoClass) #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if (image->colors > 256) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (i=0; i < (ssize_t) image->colors; i++) { @@ -2404,7 +2409,9 @@ MagickExport MagickBooleanType PosterizeImage(Image *image,const size_t levels, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -3300,7 +3307,9 @@ static MagickBooleanType SetGrayscaleImage(Image *image, status=MagickTrue; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -3328,7 +3337,7 @@ static MagickBooleanType SetGrayscaleImage(Image *image, if (colormap_index[intensity] < 0) { #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_SetGrayscaleImage) + #pragma omp critical (MagickCore_SetGrayscaleImage) #endif if (colormap_index[intensity] < 0) { @@ -3377,7 +3386,9 @@ static MagickBooleanType SetGrayscaleImage(Image *image, status=MagickTrue; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { diff --git a/MagickCore/quantum.c b/MagickCore/quantum.c index 223f2eee8a..bc28973dde 100644 --- a/MagickCore/quantum.c +++ b/MagickCore/quantum.c @@ -168,7 +168,7 @@ static MagickBooleanType AcquireQuantumPixels(QuantumInfo *quantum_info, assert(quantum_info != (QuantumInfo *) NULL); assert(quantum_info->signature == MagickSignature); - quantum_info->number_threads=GetOpenMPMaximumThreads(); + quantum_info->number_threads=GetMagickResourceLimit(ThreadResource); quantum_info->pixels=(unsigned char **) AcquireQuantumMemory( quantum_info->number_threads,sizeof(*quantum_info->pixels)); if (quantum_info->pixels == (unsigned char **) NULL) diff --git a/MagickCore/resample.c b/MagickCore/resample.c index a90badafd8..a7e8eba994 100644 --- a/MagickCore/resample.c +++ b/MagickCore/resample.c @@ -59,6 +59,7 @@ #include "MagickCore/resample.h" #include "MagickCore/resize.h" #include "MagickCore/resize-private.h" +#include "MagickCore/resource_.h" #include "MagickCore/token.h" #include "MagickCore/transform.h" #include "MagickCore/signature-private.h" diff --git a/MagickCore/resize.c b/MagickCore/resize.c index 5653f49579..469c98c552 100644 --- a/MagickCore/resize.c +++ b/MagickCore/resize.c @@ -66,6 +66,7 @@ #include "MagickCore/resample-private.h" #include "MagickCore/resize.h" #include "MagickCore/resize-private.h" +#include "MagickCore/resource_.h" #include "MagickCore/string_.h" #include "MagickCore/string-private.h" #include "MagickCore/thread-private.h" @@ -950,7 +951,8 @@ MagickPrivate ResizeFilter *AcquireResizeFilter(const Image *image, /* Define coefficents for Gaussian */ resize_filter->coefficient[0]=value; /* note sigma too */ resize_filter->coefficient[1]=1.0/(2.0*value*value); /* sigma scaling */ - resize_filter->coefficient[2]=1.0/(Magick2PI*value*value); + resize_filter->coefficient[2]=(MagickRealType) + (1.0/(Magick2PI*value*value)); /* normalization - not actually needed or used! */ if ( value > 0.5 ) resize_filter->support *= value/0.5; /* increase support */ @@ -1591,7 +1593,9 @@ MagickExport Image *InterpolativeResizeImage(const Image *image, scale.x=(double) image->columns/resize_image->columns; scale.y=(double) image->rows/resize_image->rows; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((resize_image->rows*resize_image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) resize_image->rows; y++) { @@ -1650,7 +1654,7 @@ MagickExport Image *InterpolativeResizeImage(const Image *image, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_InterpolativeResizeImage) + #pragma omp critical (MagickCore_InterpolativeResizeImage) #endif proceed=SetImageProgress(image,InterpolativeResizeImageTag,progress++, image->rows); @@ -2096,7 +2100,7 @@ static ContributionInfo **DestroyContributionThreadSet( i; assert(contribution != (ContributionInfo **) NULL); - for (i=0; i < (ssize_t) GetOpenMPMaximumThreads(); i++) + for (i=0; i < (ssize_t) GetMagickResourceLimit(ThreadResource); i++) if (contribution[i] != (ContributionInfo *) NULL) contribution[i]=(ContributionInfo *) RelinquishAlignedMemory( contribution[i]); @@ -2115,7 +2119,7 @@ static ContributionInfo **AcquireContributionThreadSet(const size_t count) size_t number_threads; - number_threads=GetOpenMPMaximumThreads(); + number_threads=(size_t) GetMagickResourceLimit(ThreadResource); contribution=(ContributionInfo **) AcquireQuantumMemory(number_threads, sizeof(*contribution)); if (contribution == (ContributionInfo **) NULL) @@ -2199,7 +2203,9 @@ static MagickBooleanType HorizontalFilter(const ResizeFilter *resize_filter, image_view=AcquireVirtualCacheView(image,exception); resize_view=AcquireAuthenticCacheView(resize_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((resize_image->rows*resize_image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (x=0; x < (ssize_t) resize_image->columns; x++) { @@ -2347,7 +2353,7 @@ static MagickBooleanType HorizontalFilter(const ResizeFilter *resize_filter, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_HorizontalFilter) + #pragma omp critical (MagickCore_HorizontalFilter) #endif proceed=SetImageProgress(image,ResizeImageTag,(*offset)++,span); if( IfMagickFalse(proceed) ) @@ -2416,7 +2422,9 @@ static MagickBooleanType VerticalFilter(const ResizeFilter *resize_filter, image_view=AcquireVirtualCacheView(image,exception); resize_view=AcquireAuthenticCacheView(resize_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) resize_image->rows; y++) { @@ -2562,7 +2570,7 @@ static MagickBooleanType VerticalFilter(const ResizeFilter *resize_filter, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_VerticalFilter) + #pragma omp critical (MagickCore_VerticalFilter) #endif proceed=SetImageProgress(image,ResizeImageTag,(*offset)++,span); if( IfMagickFalse(proceed) ) @@ -2770,7 +2778,9 @@ MagickExport Image *SampleImage(const Image *image,const size_t columns, image_view=AcquireVirtualCacheView(image,exception); sample_view=AcquireAuthenticCacheView(sample_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((sample_image->rows*sample_image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) sample_image->rows; y++) { diff --git a/MagickCore/resource.c b/MagickCore/resource.c index 2415099abe..0e6af9da69 100644 --- a/MagickCore/resource.c +++ b/MagickCore/resource.c @@ -1146,7 +1146,6 @@ MagickExport MagickBooleanType SetMagickResourceLimit(const ResourceType type, if (value != (char *) NULL) resource_info.thread_limit=MagickMin(limit,StringToSizeType(value, 100.0)); - SetOpenMPMaximumThreads((int) resource_info.thread_limit); break; } case TimeResource: diff --git a/MagickCore/segment.c b/MagickCore/segment.c index bbee6bd547..7df551d921 100644 --- a/MagickCore/segment.c +++ b/MagickCore/segment.c @@ -99,6 +99,7 @@ #include "MagickCore/quantize.h" #include "MagickCore/quantum.h" #include "MagickCore/quantum-private.h" +#include "MagickCore/resource_.h" #include "MagickCore/segment.h" #include "MagickCore/string_.h" @@ -530,7 +531,9 @@ static MagickBooleanType Classify(Image *image,short **extrema, */ image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { diff --git a/MagickCore/shear.c b/MagickCore/shear.c index 7e568b732b..30a2aa805d 100644 --- a/MagickCore/shear.c +++ b/MagickCore/shear.c @@ -572,7 +572,9 @@ static void RadonProjection(RadonInfo *source_cells, q=swap; } #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) + #pragma omp parallel for schedule(static,4) \ + if ((p->width*p->height) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (x=0; x < (ssize_t) p->width; x++) { @@ -652,7 +654,9 @@ static MagickBooleanType RadonTransform(const Image *image, status=MagickTrue; image_view=AcquireVirtualCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -701,7 +705,9 @@ static MagickBooleanType RadonTransform(const Image *image, RadonProjection(source_cells,destination_cells,-1,projection); (void) ResetRadonCells(source_cells); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1023,7 +1029,9 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations, */ GetPixelCacheTileSize(image,&tile_width,&tile_height); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (tile_y=0; tile_y < (ssize_t) image->rows; tile_y+=(ssize_t) tile_height) { @@ -1147,7 +1155,9 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations, Rotate 180 degrees. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1243,7 +1253,9 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations, */ GetPixelCacheTileSize(image,&tile_width,&tile_height); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (tile_y=0; tile_y < (ssize_t) image->rows; tile_y+=(ssize_t) tile_height) { @@ -1445,7 +1457,9 @@ static MagickBooleanType XShearImage(Image *image,const MagickRealType degrees, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) height; y++) { @@ -1660,7 +1674,9 @@ static MagickBooleanType YShearImage(Image *image,const MagickRealType degrees, background=image->background_color; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (x=0; x < (ssize_t) width; x++) { diff --git a/MagickCore/statistic.c b/MagickCore/statistic.c index 845326a8b8..c22e2d296c 100644 --- a/MagickCore/statistic.c +++ b/MagickCore/statistic.c @@ -141,7 +141,7 @@ static PixelChannels **DestroyPixelThreadSet(PixelChannels **pixels) i; assert(pixels != (PixelChannels **) NULL); - for (i=0; i < (ssize_t) GetOpenMPMaximumThreads(); i++) + for (i=0; i < (ssize_t) GetMagickResourceLimit(ThreadResource); i++) if (pixels[i] != (PixelChannels *) NULL) pixels[i]=(PixelChannels *) RelinquishMagickMemory(pixels[i]); pixels=(PixelChannels **) RelinquishMagickMemory(pixels); @@ -161,7 +161,7 @@ static PixelChannels **AcquirePixelThreadSet(const Image *image, length, number_threads; - number_threads=GetOpenMPMaximumThreads(); + number_threads=(size_t) GetMagickResourceLimit(ThreadResource); pixels=(PixelChannels **) AcquireQuantumMemory(number_threads, sizeof(*pixels)); if (pixels == (PixelChannels **) NULL) @@ -506,7 +506,8 @@ MagickExport Image *EvaluateImages(const Image *images, { #if defined(MAGICKCORE_OPENMP_SUPPORT) #pragma omp parallel for schedule(static) shared(progress,status) \ - if (key == ~0UL) num_threads(GetMagickResourceLimit(ThreadResource)) + if (((evaluate_image->rows*evaluate_image->columns) > 8192) && (key == ~0UL)) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) evaluate_image->rows; y++) { @@ -614,7 +615,8 @@ MagickExport Image *EvaluateImages(const Image *images, { #if defined(MAGICKCORE_OPENMP_SUPPORT) #pragma omp parallel for schedule(static) shared(progress,status) \ - if (key == ~0UL) num_threads(GetMagickResourceLimit(ThreadResource)) + if (((evaluate_image->rows*evaluate_image->columns) > 8192) && (key == ~0UL)) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) evaluate_image->rows; y++) { @@ -820,7 +822,8 @@ MagickExport MagickBooleanType EvaluateImage(Image *image, image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) #pragma omp parallel for schedule(static,4) shared(progress,status) \ - if (key == ~0UL) num_threads(GetMagickResourceLimit(ThreadResource)) + if (((image->rows*image->columns) > 8192) && (key == ~0UL)) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -878,7 +881,7 @@ MagickExport MagickBooleanType EvaluateImage(Image *image, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_EvaluateImage) + #pragma omp critical (MagickCore_EvaluateImage) #endif proceed=SetImageProgress(image,EvaluateImageTag,progress++,image->rows); if (proceed == MagickFalse) @@ -1052,7 +1055,9 @@ MagickExport MagickBooleanType FunctionImage(Image *image, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1107,7 +1112,7 @@ MagickExport MagickBooleanType FunctionImage(Image *image, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_FunctionImage) + #pragma omp critical (MagickCore_FunctionImage) #endif proceed=SetImageProgress(image,FunctionImageTag,progress++,image->rows); if (proceed == MagickFalse) @@ -1315,7 +1320,9 @@ MagickExport MagickBooleanType GetImageKurtosis(const Image *image, sum_fourth_power=0.0; image_view=AcquireVirtualCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(status) + #pragma omp parallel for schedule(static) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1443,7 +1450,9 @@ MagickExport MagickBooleanType GetImageRange(const Image *image,double *minima, *minima=MagickHuge; image_view=AcquireVirtualCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(status) + #pragma omp parallel for schedule(static) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1813,7 +1822,7 @@ static PixelList **DestroyPixelListThreadSet(PixelList **pixel_list) i; assert(pixel_list != (PixelList **) NULL); - for (i=0; i < (ssize_t) GetOpenMPMaximumThreads(); i++) + for (i=0; i < (ssize_t) GetMagickResourceLimit(ThreadResource); i++) if (pixel_list[i] != (PixelList *) NULL) pixel_list[i]=DestroyPixelList(pixel_list[i]); pixel_list=(PixelList **) RelinquishMagickMemory(pixel_list); @@ -1852,7 +1861,7 @@ static PixelList **AcquirePixelListThreadSet(const size_t width, size_t number_threads; - number_threads=GetOpenMPMaximumThreads(); + number_threads=(size_t) GetMagickResourceLimit(ThreadResource); pixel_list=(PixelList **) AcquireQuantumMemory(number_threads, sizeof(*pixel_list)); if (pixel_list == (PixelList **) NULL) @@ -2264,7 +2273,9 @@ MagickExport Image *StatisticImage(const Image *image,const StatisticType type, image_view=AcquireVirtualCacheView(image,exception); statistic_view=AcquireAuthenticCacheView(statistic_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((statistic_image->rows*statistic_image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) statistic_image->rows; y++) { @@ -2410,7 +2421,7 @@ MagickExport Image *StatisticImage(const Image *image,const StatisticType type, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_StatisticImage) + #pragma omp critical (MagickCore_StatisticImage) #endif proceed=SetImageProgress(image,StatisticImageTag,progress++, image->rows); diff --git a/MagickCore/thread-private.h b/MagickCore/thread-private.h index 6f34e489f9..f39b3b37d4 100644 --- a/MagickCore/thread-private.h +++ b/MagickCore/thread-private.h @@ -31,9 +31,6 @@ extern "C" { #define MagickCachePrefetch(address,mode,locality) #endif -#define omp_throttle(factor) num_threads(omp_get_max_threads() >> \ - (factor) == 0 ? 1 : omp_get_max_threads() >> (factor)) - #if defined(MAGICKCORE_THREAD_SUPPORT) typedef pthread_mutex_t MagickMutexType; #elif defined(MAGICKCORE_WINDOWS_SUPPORT) @@ -97,20 +94,11 @@ static inline MagickBooleanType IsMagickThreadEqual(const MagickThreadType id) */ static inline size_t GetOpenMPMaximumThreads(void) { - static size_t - maximum_threads = 1; - #if defined(MAGICKCORE_OPENMP_SUPPORT) - { - ssize_t - threads; - - threads=omp_get_max_threads(); - if (threads > (ssize_t) maximum_threads) - maximum_threads=threads; - } + return(omp_get_max_threads()); +#else + return(1); #endif - return(maximum_threads); } static inline int GetOpenMPThreadId(void) diff --git a/MagickCore/threshold.c b/MagickCore/threshold.c index 056d164c0d..ebc3754881 100644 --- a/MagickCore/threshold.c +++ b/MagickCore/threshold.c @@ -205,7 +205,9 @@ MagickExport Image *AdaptiveThresholdImage(const Image *image, image_view=AcquireVirtualCacheView(image,exception); threshold_view=AcquireAuthenticCacheView(threshold_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -304,7 +306,7 @@ MagickExport Image *AdaptiveThresholdImage(const Image *image, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_AdaptiveThresholdImage) + #pragma omp critical (MagickCore_AdaptiveThresholdImage) #endif proceed=SetImageProgress(image,AdaptiveThresholdImageTag,progress++, image->rows); @@ -391,7 +393,9 @@ MagickExport MagickBooleanType BilevelImage(Image *image,const double threshold, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,8) shared(progress,status) + #pragma omp parallel for schedule(static,8) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -443,7 +447,7 @@ MagickExport MagickBooleanType BilevelImage(Image *image,const double threshold, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_BilevelImage) + #pragma omp critical (MagickCore_BilevelImage) #endif proceed=SetImageProgress(image,ThresholdImageTag,progress++, image->rows); @@ -557,7 +561,9 @@ MagickExport MagickBooleanType BlackThresholdImage(Image *image, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,8) shared(progress,status) + #pragma omp parallel for schedule(static,8) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -699,7 +705,9 @@ MagickExport MagickBooleanType ClampImage(Image *image,ExceptionInfo *exception) progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,8) shared(progress,status) + #pragma omp parallel for schedule(static,8) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -751,7 +759,7 @@ MagickExport MagickBooleanType ClampImage(Image *image,ExceptionInfo *exception) proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_ClampImage) + #pragma omp critical (MagickCore_ClampImage) #endif proceed=SetImageProgress(image,ClampImageTag,progress++, image->rows); @@ -1322,7 +1330,9 @@ MagickExport MagickBooleanType OrderedPosterizeImage(Image *image, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,8) shared(progress,status) + #pragma omp parallel for schedule(static,8) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1390,7 +1400,7 @@ MagickExport MagickBooleanType OrderedPosterizeImage(Image *image, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) -#pragma omp critical (MagickCore_OrderedPosterizeImage) + #pragma omp critical (MagickCore_OrderedPosterizeImage) #endif proceed=SetImageProgress(image,DitherImageTag,progress++,image->rows); if (proceed == MagickFalse) @@ -1502,7 +1512,8 @@ MagickExport MagickBooleanType RandomThresholdImage(Image *image, image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) #pragma omp parallel for schedule(static,8) shared(progress,status) \ - if (key == ~0UL) num_threads(GetMagickResourceLimit(ThreadResource)) + if (((image->rows*image->columns) > 8192) && (key == ~0UL)) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1569,7 +1580,7 @@ MagickExport MagickBooleanType RandomThresholdImage(Image *image, proceed; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp critical (MagickCore_RandomThresholdImage) + #pragma omp critical (MagickCore_RandomThresholdImage) #endif proceed=SetImageProgress(image,ThresholdImageTag,progress++, image->rows); @@ -1684,7 +1695,9 @@ MagickExport MagickBooleanType WhiteThresholdImage(Image *image, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,8) shared(progress,status) + #pragma omp parallel for schedule(static,8) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { diff --git a/MagickCore/transform.c b/MagickCore/transform.c index 2de77e5952..9bb966d515 100644 --- a/MagickCore/transform.c +++ b/MagickCore/transform.c @@ -160,7 +160,9 @@ MagickExport Image *ChopImage(const Image *image,const RectangleInfo *chop_info, image_view=AcquireVirtualCacheView(image,exception); chop_view=AcquireAuthenticCacheView(chop_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((extent.y*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) extent.y; y++) { @@ -230,7 +232,9 @@ MagickExport Image *ChopImage(const Image *image,const RectangleInfo *chop_info, Extract chop image. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) (image->rows-(extent.y+extent.height)); y++) { @@ -585,7 +589,9 @@ MagickExport Image *CropImage(const Image *image,const RectangleInfo *geometry, image_view=AcquireVirtualCacheView(image,exception); crop_view=AcquireAuthenticCacheView(crop_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((crop_image->rows*crop_image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) crop_image->rows; y++) { @@ -946,7 +952,9 @@ MagickExport Image *ExcerptImage(const Image *image, image_view=AcquireVirtualCacheView(image,exception); excerpt_view=AcquireAuthenticCacheView(excerpt_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((excerpt_image->rows*excerpt_image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) excerpt_image->rows; y++) { @@ -1153,7 +1161,9 @@ MagickExport Image *FlipImage(const Image *image,ExceptionInfo *exception) image_view=AcquireVirtualCacheView(image,exception); flip_view=AcquireAuthenticCacheView(flip_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((flip_image->rows*flip_image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) flip_image->rows; y++) { @@ -1299,7 +1309,9 @@ MagickExport Image *FlopImage(const Image *image,ExceptionInfo *exception) image_view=AcquireVirtualCacheView(image,exception); flop_view=AcquireAuthenticCacheView(flop_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((flop_image->rows*flop_image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) flop_image->rows; y++) { @@ -1428,7 +1440,9 @@ static inline MagickBooleanType CopyImageRegion(Image *destination, source_view=AcquireVirtualCacheView(source,exception); destination_view=AcquireAuthenticCacheView(destination,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(status) + #pragma omp parallel for schedule(static) shared(status) \ + if ((rows*columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) rows; y++) { @@ -1756,7 +1770,9 @@ MagickExport Image *SpliceImage(const Image *image, image_view=AcquireVirtualCacheView(image,exception); splice_view=AcquireAuthenticCacheView(splice_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((splice_geometry.y*splice_geometry.x) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) splice_geometry.y; y++) { @@ -1860,7 +1876,9 @@ MagickExport Image *SpliceImage(const Image *image, } } #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((splice_geometry.y*splice_geometry.x) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=(ssize_t) (splice_geometry.y+splice_geometry.height); y < (ssize_t) splice_image->rows; y++) @@ -2211,7 +2229,9 @@ MagickExport Image *TransposeImage(const Image *image,ExceptionInfo *exception) image_view=AcquireVirtualCacheView(image,exception); transpose_view=AcquireAuthenticCacheView(transpose_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -2360,7 +2380,9 @@ MagickExport Image *TransverseImage(const Image *image,ExceptionInfo *exception) image_view=AcquireVirtualCacheView(image,exception); transverse_view=AcquireAuthenticCacheView(transverse_image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) { diff --git a/MagickWand/mogrify.c b/MagickWand/mogrify.c index f3d4ca4215..67d23239c2 100644 --- a/MagickWand/mogrify.c +++ b/MagickWand/mogrify.c @@ -175,7 +175,7 @@ WandExport MagickBooleanType MagickCommandGenesis(ImageInfo *image_info, } return(status); } - number_threads=GetOpenMPMaximumThreads(); + number_threads=(size_t) GetMagickResourceLimit(ThreadResource); serial=0.0; for (n=1; n <= (ssize_t) number_threads; n++) { diff --git a/MagickWand/wand-view.c b/MagickWand/wand-view.c index 316cc59fc3..434a4d9c79 100644 --- a/MagickWand/wand-view.c +++ b/MagickWand/wand-view.c @@ -80,9 +80,6 @@ struct _WandView CacheView *view; - size_t - number_threads; - PixelWand ***pixel_wands; @@ -143,10 +140,9 @@ WandExport WandView *CloneWandView(const WandView *wand_view) wand_view->exception); clone_view->view=CloneCacheView(wand_view->view); clone_view->extent=wand_view->extent; - clone_view->number_threads=wand_view->number_threads; clone_view->exception=AcquireExceptionInfo(); InheritException(clone_view->exception,wand_view->exception); - for (i=0; i < (ssize_t) wand_view->number_threads; i++) + for (i=0; i < (ssize_t) GetMagickResourceLimit(ThreadResource); i++) clone_view->pixel_wands[i]=ClonePixelWands((const PixelWand **) wand_view->pixel_wands[i],wand_view->extent.width); clone_view->debug=wand_view->debug; @@ -180,13 +176,13 @@ WandExport WandView *CloneWandView(const WandView *wand_view) */ static PixelWand ***DestroyPixelsThreadSet(PixelWand ***pixel_wands, - const size_t number_wands,const size_t number_threads) + const size_t number_wands) { register ssize_t i; assert(pixel_wands != (PixelWand ***) NULL); - for (i=0; i < (ssize_t) number_threads; i++) + for (i=0; i < (ssize_t) GetMagickResourceLimit(ThreadResource); i++) if (pixel_wands[i] != (PixelWand **) NULL) pixel_wands[i]=DestroyPixelWands(pixel_wands[i],number_wands); pixel_wands=(PixelWand ***) RelinquishMagickMemory(pixel_wands); @@ -198,7 +194,7 @@ WandExport WandView *DestroyWandView(WandView *wand_view) assert(wand_view != (WandView *) NULL); assert(wand_view->signature == WandSignature); wand_view->pixel_wands=DestroyPixelsThreadSet(wand_view->pixel_wands, - wand_view->extent.width,wand_view->number_threads); + wand_view->extent.width); wand_view->image=DestroyImage(wand_view->image); wand_view->view=DestroyCacheView(wand_view->view); wand_view->exception=DestroyExceptionInfo(wand_view->exception); @@ -273,6 +269,10 @@ WandExport MagickBooleanType DuplexTransferWandViewIterator(WandView *source, MagickOffsetType progress; + size_t + height, + width; + ssize_t y; @@ -288,8 +288,12 @@ WandExport MagickBooleanType DuplexTransferWandViewIterator(WandView *source, return(MagickFalse); status=MagickTrue; progress=0; + height=source->extent.height-source->extent.y; + width=source->extent.width-source->extent.x; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) num_threads(source->number_threads) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) { @@ -524,6 +528,10 @@ WandExport MagickBooleanType GetWandViewIterator(WandView *source, MagickOffsetType progress; + size_t + height, + width; + ssize_t y; @@ -534,8 +542,12 @@ WandExport MagickBooleanType GetWandViewIterator(WandView *source, source_image=source->wand->images; status=MagickTrue; progress=0; + height=source->extent.height-source->extent.y; + width=source->extent.width-source->extent.x; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) num_threads(source->number_threads) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) { @@ -704,8 +716,7 @@ WandExport MagickBooleanType IsWandView(const WandView *wand_view) % */ -static PixelWand ***AcquirePixelsThreadSet(const size_t number_wands, - const size_t number_threads) +static PixelWand ***AcquirePixelsThreadSet(const size_t number_wands) { PixelWand ***pixel_wands; @@ -713,6 +724,10 @@ static PixelWand ***AcquirePixelsThreadSet(const size_t number_wands, register ssize_t i; + size_t + number_threads; + + number_threads=(size_t) GetMagickResourceLimit(ThreadResource); pixel_wands=(PixelWand ***) AcquireQuantumMemory(number_threads, sizeof(*pixel_wands)); if (pixel_wands == (PixelWand ***) NULL) @@ -722,7 +737,7 @@ static PixelWand ***AcquirePixelsThreadSet(const size_t number_wands, { pixel_wands[i]=NewPixelWands(number_wands); if (pixel_wands[i] == (PixelWand **) NULL) - return(DestroyPixelsThreadSet(pixel_wands,number_wands,number_threads)); + return(DestroyPixelsThreadSet(pixel_wands,number_wands)); } return(pixel_wands); } @@ -751,9 +766,7 @@ WandExport WandView *NewWandView(MagickWand *wand) wand_view->view=AcquireVirtualCacheView(wand_view->wand->images,exception); wand_view->extent.width=wand->images->columns; wand_view->extent.height=wand->images->rows; - wand_view->number_threads=GetOpenMPMaximumThreads(); - wand_view->pixel_wands=AcquirePixelsThreadSet(wand_view->extent.width, - wand_view->number_threads); + wand_view->pixel_wands=AcquirePixelsThreadSet(wand_view->extent.width); wand_view->exception=exception; if (wand_view->pixel_wands == (PixelWand ***) NULL) ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed", @@ -817,10 +830,8 @@ WandExport WandView *NewWandViewExtent(MagickWand *wand,const ssize_t x, wand_view->extent.height=height; wand_view->extent.x=x; wand_view->extent.y=y; - wand_view->number_threads=GetOpenMPMaximumThreads(); wand_view->exception=exception; - wand_view->pixel_wands=AcquirePixelsThreadSet(wand_view->extent.width, - wand_view->number_threads); + wand_view->pixel_wands=AcquirePixelsThreadSet(wand_view->extent.width); if (wand_view->pixel_wands == (PixelWand ***) NULL) ThrowWandFatalException(ResourceLimitFatalError,"MemoryAllocationFailed", GetExceptionMessage(errno)); @@ -917,6 +928,10 @@ WandExport MagickBooleanType SetWandViewIterator(WandView *destination, MagickOffsetType progress; + size_t + height, + width; + ssize_t y; @@ -931,8 +946,12 @@ WandExport MagickBooleanType SetWandViewIterator(WandView *destination, return(MagickFalse); status=MagickTrue; progress=0; + height=destination->extent.height-destination->extent.y; + width=destination->extent.width-destination->extent.x; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) num_threads(destination->number_threads) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=destination->extent.y; y < (ssize_t) destination->extent.height; y++) { @@ -990,41 +1009,6 @@ WandExport MagickBooleanType SetWandViewIterator(WandView *destination, % % % % % % -% S e t W a n d V i e w T h r e a d s % -% % -% % -% % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% SetWandViewThreads() sets the number of threads in a thread team. -% -% The format of the SetWandViewDescription method is: -% -% void SetWandViewThreads(WandView *image_view, -% const size_t number_threads) -% -% A description of each parameter follows: -% -% o image_view: the image view. -% -% o number_threads: the number of threads in a thread team. -% -*/ -MagickExport void SetWandViewThreads(WandView *image_view, - const size_t number_threads) -{ - assert(image_view != (WandView *) NULL); - assert(image_view->signature == MagickSignature); - image_view->number_threads=number_threads; - if (number_threads > GetOpenMPMaximumThreads()) - image_view->number_threads=GetOpenMPMaximumThreads(); -} - -/* -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % -% % -% % % T r a n s f e r W a n d V i e w I t e r a t o r % % % % % @@ -1081,6 +1065,10 @@ WandExport MagickBooleanType TransferWandViewIterator(WandView *source, MagickOffsetType progress; + size_t + height, + width; + ssize_t y; @@ -1096,8 +1084,12 @@ WandExport MagickBooleanType TransferWandViewIterator(WandView *source, return(MagickFalse); status=MagickTrue; progress=0; + height=source->extent.height-source->extent.y; + width=source->extent.width-source->extent.x; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) num_threads(source->number_threads) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) { @@ -1230,6 +1222,10 @@ WandExport MagickBooleanType UpdateWandViewIterator(WandView *source, MagickOffsetType progress; + size_t + height, + width; + ssize_t y; @@ -1243,8 +1239,12 @@ WandExport MagickBooleanType UpdateWandViewIterator(WandView *source, return(MagickFalse); status=MagickTrue; progress=0; + height=source->extent.height-source->extent.y; + width=source->extent.width-source->extent.x; #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static) shared(progress,status) num_threads(source->number_threads) + #pragma omp parallel for schedule(static) shared(progress,status) \ + if ((height*width) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) { diff --git a/coders/hald.c b/coders/hald.c index 34c310f940..714244d27f 100644 --- a/coders/hald.c +++ b/coders/hald.c @@ -56,6 +56,7 @@ #include "MagickCore/monitor-private.h" #include "MagickCore/pixel-accessor.h" #include "MagickCore/quantum-private.h" +#include "MagickCore/resource_.h" #include "MagickCore/static.h" #include "MagickCore/string_.h" #include "MagickCore/string-private.h" @@ -124,7 +125,9 @@ static Image *ReadHALDImage(const ImageInfo *image_info, image->columns=(size_t) (level*cube_size); image->rows=(size_t) (level*cube_size); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,8) shared(status) + #pragma omp parallel for schedule(static,8) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y+=(ssize_t) level) { diff --git a/config/delegates.xml b/config/delegates.xml index 9e5bc104c6..7efccd74cc 100644 --- a/config/delegates.xml +++ b/config/delegates.xml @@ -79,7 +79,7 @@ - + @@ -89,7 +89,7 @@ - + diff --git a/filters/analyze.c b/filters/analyze.c index 0ca9019abd..1ed2bed6e6 100644 --- a/filters/analyze.c +++ b/filters/analyze.c @@ -145,7 +145,9 @@ ModuleExport size_t analyzeImage(Image **images,const int argc, status=MagickTrue; image_view=AcquireVirtualCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,4) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + if ((image->rows*image->columns) > 8192) \ + num_threads(GetMagickResourceLimit(ThreadResource)) #endif for (y=0; y < (ssize_t) image->rows; y++) {