From d643247965337aae790abe62ef297abc3cc63c3d Mon Sep 17 00:00:00 2001 From: cristy Date: Sun, 6 Jan 2013 16:56:13 +0000 Subject: [PATCH] --- MagickCore/cache.c | 2 +- MagickCore/colormap.c | 3 ++- MagickCore/composite.c | 3 ++- MagickCore/decorate.c | 21 ++++++++------------- MagickCore/effect.c | 4 ++-- MagickCore/resize.c | 3 ++- MagickCore/shear.c | 19 ++++++------------- MagickCore/thread-private.h | 16 ++++++---------- MagickCore/thread.c | 1 - MagickCore/transform.c | 24 ++++++++++-------------- MagickWand/wand-view.c | 10 +++++----- 11 files changed, 44 insertions(+), 62 deletions(-) diff --git a/MagickCore/cache.c b/MagickCore/cache.c index afe01aed4..a35be2581 100644 --- a/MagickCore/cache.c +++ b/MagickCore/cache.c @@ -4914,7 +4914,7 @@ 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 magick_schedule(static,image->rows/2) shared(status) + #pragma omp parallel for schedule(static,4) magick_threads(image,image,1,1) #endif for (y=0; y < (ssize_t) image->rows; y++) { diff --git a/MagickCore/colormap.c b/MagickCore/colormap.c index e6ac95a0c..4b8aabc6a 100644 --- a/MagickCore/colormap.c +++ b/MagickCore/colormap.c @@ -206,7 +206,8 @@ MagickExport MagickBooleanType CycleColormapImage(Image *image, status=MagickTrue; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for magick_schedule(static,image->rows/2) shared(status) + #pragma omp parallel for schedule(static,4) \ + magick_threads(image,image,1,1) #endif for (y=0; y < (ssize_t) image->rows; y++) { diff --git a/MagickCore/composite.c b/MagickCore/composite.c index f7ac52dc1..47597e615 100644 --- a/MagickCore/composite.c +++ b/MagickCore/composite.c @@ -2455,7 +2455,8 @@ 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 magick_schedule(static,image->rows/2) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + magick_threads(texture_image,image,1,1) #endif for (y=0; y < (ssize_t) image->rows; y++) { diff --git a/MagickCore/decorate.c b/MagickCore/decorate.c index c66445e92..3032f2193 100644 --- a/MagickCore/decorate.c +++ b/MagickCore/decorate.c @@ -384,8 +384,8 @@ MagickExport Image *FrameImage(const Image *image,const FrameInfo *frame_info, Draw sides of ornamental border. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for magick_schedule(static,image->rows/2) \ - shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + magick_threads(image,frame_image,1,1) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -663,11 +663,6 @@ MagickExport MagickBooleanType RaiseImage(Image *image, foreground, background; -#if defined(MAGICKCORE_OPENMP_SUPPORT) - size_t - height; -#endif - ssize_t y; @@ -696,8 +691,8 @@ MagickExport MagickBooleanType RaiseImage(Image *image, progress=0; image_view=AcquireAuthenticCacheView(image,exception); #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for schedule(static,raise_info->height/2) \ - shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + magick_threads(image,image,1,1) #endif for (y=0; y < (ssize_t) raise_info->height; y++) { @@ -804,8 +799,8 @@ MagickExport MagickBooleanType RaiseImage(Image *image, } } #if defined(MAGICKCORE_OPENMP_SUPPORT) - height=image->rows-2*raise_info->height; - #pragma omp parallel for schedule(static,height/2) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + magick_threads(image,image,image->rows-2*raise_info->height,1) #endif for (y=(ssize_t) raise_info->height; y < (ssize_t) (image->rows-raise_info->height); y++) { @@ -890,8 +885,8 @@ MagickExport MagickBooleanType RaiseImage(Image *image, } } #if defined(MAGICKCORE_OPENMP_SUPPORT) - height=image->rows-2*raise_info->height; - #pragma omp parallel for schedule(static,height/2) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + magick_threads(image,image,image->rows-2*raise_info->height,1) #endif for (y=(ssize_t) (image->rows-raise_info->height); y < (ssize_t) image->rows; y++) { diff --git a/MagickCore/effect.c b/MagickCore/effect.c index 95babc689..4815ac6d0 100644 --- a/MagickCore/effect.c +++ b/MagickCore/effect.c @@ -1283,7 +1283,7 @@ static void Hull(const Image *image,const ssize_t x_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,4) \ magick_threads(image,image,rows,1) #endif for (y=0; y < (ssize_t) rows; y++) @@ -1320,7 +1320,7 @@ static void Hull(const Image *image,const ssize_t x_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,4) \ magick_threads(image,image,rows,1) #endif for (y=0; y < (ssize_t) rows; y++) diff --git a/MagickCore/resize.c b/MagickCore/resize.c index ef48b3ad0..6e82f68e1 100644 --- a/MagickCore/resize.c +++ b/MagickCore/resize.c @@ -2798,7 +2798,8 @@ 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,sample_image->rows/2) shared(status) + #pragma omp parallel for schedule(static,4) shared(status) \ + magick_threads(image,sample_image,1,1) #endif for (y=0; y < (ssize_t) sample_image->rows; y++) { diff --git a/MagickCore/shear.c b/MagickCore/shear.c index adfe58bf3..156e6b438 100644 --- a/MagickCore/shear.c +++ b/MagickCore/shear.c @@ -977,11 +977,6 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations, RectangleInfo page; -#if defined(MAGICKCORE_OPENMP_SUPPORT) - size_t - chunk; -#endif - ssize_t y; @@ -1032,9 +1027,8 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations, GetPixelCacheTileSize(image,&tile_width,&tile_height); tile_width=image->columns; #if defined(MAGICKCORE_OPENMP_SUPPORT) - chunk=image->rows/tile_height/2; - #pragma omp parallel for magick_schedule(static,chunk) \ - shared(progress,status) + #pragma omp parallel for schedule(static,4) \ + magick_threads(image,image,image->rows/tile_height,1) #endif for (tile_y=0; tile_y < (ssize_t) image->rows; tile_y+=(ssize_t) tile_height) { @@ -1158,8 +1152,8 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations, Rotate 180 degrees. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - #pragma omp parallel for magick_schedule(static,image->rows/2) \ - shared(progress,status) + #pragma omp parallel for schedule(static,4) \ + magick_threads(image,image,1,1) #endif for (y=0; y < (ssize_t) image->rows; y++) { @@ -1256,9 +1250,8 @@ MagickExport Image *IntegralRotateImage(const Image *image,size_t rotations, GetPixelCacheTileSize(image,&tile_width,&tile_height); tile_width=image->columns; #if defined(MAGICKCORE_OPENMP_SUPPORT) - chunk=image->rows/tile_height/2; - #pragma omp parallel for magick_schedule(static,chunk) \ - shared(progress,status) + #pragma omp parallel for schedule(static,4) \ + magick_threads(image,image,image->rows/tile_height,1) #endif for (tile_y=0; tile_y < (ssize_t) image->rows; tile_y+=(ssize_t) tile_height) { diff --git a/MagickCore/thread-private.h b/MagickCore/thread-private.h index fea333008..456ed0f93 100644 --- a/MagickCore/thread-private.h +++ b/MagickCore/thread-private.h @@ -30,16 +30,12 @@ extern "C" { Single threaded unless workload justifies the threading overhead. */ #define WorkloadThreshold() (16*GetMagickResourceLimit(ThreadResource)) -#define magick_threads(source,destination,rows,expression) \ - if (((rows) > WorkloadThreshold()) && (expression)) \ - num_threads((source) != (destination) ? \ - GetMagickResourceLimit(ThreadResource) : \ - GetImagePixelCacheType(source) != DiskCache ? \ - GetMagickResourceLimit(ThreadResource) : \ - GetMagickResourceLimit(ThreadResource) < 2 ? \ - GetMagickResourceLimit(ThreadResource) : 2) -#define magick_schedule(type,chunk) \ - schedule(type,(chunk) < 1 ? 1 : (chunk)) +#define magick_threads(source,destination,chunk,expression) \ + num_threads((expression) == 0 ? 1 : ((chunk) > WorkloadThreshold()) && \ + (GetImagePixelCacheType(source) != DiskCache) && \ + (GetImagePixelCacheType(destination) != DiskCache) ? \ + GetMagickResourceLimit(ThreadResource) : \ + GetMagickResourceLimit(ThreadResource) < 2 ? 1 : 2) #if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ > 10)) #define MagickCachePrefetch(address,mode,locality) \ diff --git a/MagickCore/thread.c b/MagickCore/thread.c index cd90b0da6..dcff73b8b 100644 --- a/MagickCore/thread.c +++ b/MagickCore/thread.c @@ -106,7 +106,6 @@ MagickExport MagickBooleanType MagickDeleteThreadKey(MagickThreadKey key) key=(MagickThreadKey) RelinquishMagickMemory(key); return(MagickTrue); #endif - } /* diff --git a/MagickCore/transform.c b/MagickCore/transform.c index 7a9c08d5a..1b68a35f4 100644 --- a/MagickCore/transform.c +++ b/MagickCore/transform.c @@ -205,11 +205,6 @@ MagickExport Image *ChopImage(const Image *image,const RectangleInfo *chop_info, RectangleInfo extent; -#if defined(MAGICKCORE_OPENMP_SUPPORT) - size_t - height; -#endif - ssize_t y; @@ -255,7 +250,8 @@ 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,extent.y/2) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(status) \ + magick_threads(image,chop_image,1,1) #endif for (y=0; y < (ssize_t) extent.y; y++) { @@ -325,8 +321,8 @@ MagickExport Image *ChopImage(const Image *image,const RectangleInfo *chop_info, Extract chop image. */ #if defined(MAGICKCORE_OPENMP_SUPPORT) - height=image->rows-(extent.y+extent.height); - #pragma omp parallel for schedule(static,height/2) shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(progress,status) \ + magick_threads(image,chop_image,1,1) #endif for (y=0; y < (ssize_t) (image->rows-(extent.y+extent.height)); y++) { @@ -683,8 +679,8 @@ 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,crop_image->rows/2) \ - shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(status) \ + magick_threads(image,crop_image,1,1) #endif for (y=0; y < (ssize_t) crop_image->rows; y++) { @@ -1253,8 +1249,8 @@ 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,flip_image->rows/2) \ - shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(status) \ + magick_threads(image,flip_image,1,1) #endif for (y=0; y < (ssize_t) flip_image->rows; y++) { @@ -1400,8 +1396,8 @@ 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,flop_image->rows/2) \ - shared(progress,status) + #pragma omp parallel for schedule(static,4) shared(status) \ + magick_threads(image,flop_image,1,1) #endif for (y=0; y < (ssize_t) flop_image->rows; y++) { diff --git a/MagickWand/wand-view.c b/MagickWand/wand-view.c index 79d7a6450..5f71c10a7 100644 --- a/MagickWand/wand-view.c +++ b/MagickWand/wand-view.c @@ -291,7 +291,7 @@ WandExport MagickBooleanType DuplexTransferWandViewIterator(WandView *source, progress=0; #if defined(MAGICKCORE_OPENMP_SUPPORT) height=source->extent.height-source->extent.y; - #pragma omp parallel for schedule(static) shared(progress,status) \ + #pragma omp parallel for schedule(static,4) shared(progress,status) \ magick_threads(source_image,destination_image,height,1) #endif for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) @@ -544,7 +544,7 @@ WandExport MagickBooleanType GetWandViewIterator(WandView *source, progress=0; #if defined(MAGICKCORE_OPENMP_SUPPORT) height=source->extent.height-source->extent.y; - #pragma omp parallel for schedule(static) shared(progress,status) \ + #pragma omp parallel for schedule(static,4) shared(progress,status) \ magick_threads(source_image,source_image,height,1) #endif for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) @@ -947,7 +947,7 @@ WandExport MagickBooleanType SetWandViewIterator(WandView *destination, progress=0; #if defined(MAGICKCORE_OPENMP_SUPPORT) height=destination->extent.height-destination->extent.y; - #pragma omp parallel for schedule(static) shared(progress,status) \ + #pragma omp parallel for schedule(static,4) shared(progress,status) \ magick_threads(destination_image,destination_image,height,1) #endif for (y=destination->extent.y; y < (ssize_t) destination->extent.height; y++) @@ -1084,7 +1084,7 @@ WandExport MagickBooleanType TransferWandViewIterator(WandView *source, progress=0; #if defined(MAGICKCORE_OPENMP_SUPPORT) height=source->extent.height-source->extent.y; - #pragma omp parallel for schedule(static) shared(progress,status) \ + #pragma omp parallel for schedule(static,4) shared(progress,status) \ magick_threads(source_image,destination_image,height,1) #endif for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) @@ -1238,7 +1238,7 @@ WandExport MagickBooleanType UpdateWandViewIterator(WandView *source, progress=0; #if defined(MAGICKCORE_OPENMP_SUPPORT) height=source->extent.height-source->extent.y; - #pragma omp parallel for schedule(static) shared(progress,status) \ + #pragma omp parallel for schedule(static,4) shared(progress,status) \ magick_threads(source_image,source_image,height,1) #endif for (y=source->extent.y; y < (ssize_t) source->extent.height; y++) -- 2.40.0