revise cache sizing
we had output buffers too large, input caches too small see https://github.com/jcupitt/libvips/issues/639
This commit is contained in:
parent
38b65478e5
commit
e01a90f7cf
@ -1,5 +1,7 @@
|
|||||||
7/4/17 started 8.5.3
|
7/4/17 started 8.5.3
|
||||||
- more link fixing in docs
|
- more link fixing in docs
|
||||||
|
- revise cache sizing again to help out of order errors under heavy load, thanks
|
||||||
|
kleisauke
|
||||||
|
|
||||||
25/3/17 started 8.5.2
|
25/3/17 started 8.5.2
|
||||||
- better behaviour for truncated PNG files, thanks Yury
|
- better behaviour for truncated PNG files, thanks Yury
|
||||||
|
2
TODO
2
TODO
@ -1,5 +1,3 @@
|
|||||||
- add analytics tags to docs output
|
|
||||||
|
|
||||||
- not sure about utf8 error messages on win
|
- not sure about utf8 error messages on win
|
||||||
|
|
||||||
- strange:
|
- strange:
|
||||||
|
@ -935,7 +935,12 @@ vips_line_cache_build( VipsObject *object )
|
|||||||
vips_get_tile_size( block_cache->in,
|
vips_get_tile_size( block_cache->in,
|
||||||
&tile_width, &tile_height, &n_lines );
|
&tile_width, &tile_height, &n_lines );
|
||||||
block_cache->tile_width = block_cache->in->Xsize;
|
block_cache->tile_width = block_cache->in->Xsize;
|
||||||
block_cache->max_tiles = 1 + 2 * n_lines / block_cache->tile_height;
|
|
||||||
|
/* Output has two buffers n_lines height, so 2 * n_lines is the maximum
|
||||||
|
* non-locality from threading. Add another n_lines for conv / reducev
|
||||||
|
* etc.
|
||||||
|
*/
|
||||||
|
block_cache->max_tiles = 3 * n_lines / block_cache->tile_height;
|
||||||
|
|
||||||
VIPS_DEBUG_MSG( "vips_line_cache_build: n_lines = %d\n",
|
VIPS_DEBUG_MSG( "vips_line_cache_build: n_lines = %d\n",
|
||||||
n_lines );
|
n_lines );
|
||||||
|
@ -48,9 +48,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#define VIPS_DEBUG
|
|
||||||
#define VIPS_DEBUG_RED
|
#define VIPS_DEBUG_RED
|
||||||
#define DEBUG_OUT_OF_THREADS
|
#define DEBUG_OUT_OF_THREADS
|
||||||
|
#define VIPS_DEBUG
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
@ -1011,6 +1011,10 @@ vips__threadpool_init( void )
|
|||||||
* Pick a tile size and a buffer height for this image and the current
|
* Pick a tile size and a buffer height for this image and the current
|
||||||
* value of vips_concurrency_get(). The buffer height
|
* value of vips_concurrency_get(). The buffer height
|
||||||
* will always be a multiple of tile_height.
|
* will always be a multiple of tile_height.
|
||||||
|
*
|
||||||
|
* The buffer height is the height of each buffer we fill in sink disc. Since
|
||||||
|
* we have two buffers, the largest range of input locality is twice the output
|
||||||
|
* buffer size, plus whatever margin we add for things like convolution.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
vips_get_tile_size( VipsImage *im,
|
vips_get_tile_size( VipsImage *im,
|
||||||
@ -1054,9 +1058,10 @@ vips_get_tile_size( VipsImage *im,
|
|||||||
* to a multiple of tileheight.
|
* to a multiple of tileheight.
|
||||||
*/
|
*/
|
||||||
*n_lines = vips__tile_height *
|
*n_lines = vips__tile_height *
|
||||||
(1 + nthr / VIPS_MAX( 1, im->Xsize / vips__tile_width )) * 2;
|
VIPS_MAX( 1,
|
||||||
*n_lines = VIPS_MAX( *n_lines, vips__fatstrip_height * nthr * 2 );
|
nthr / VIPS_MAX( 1, im->Xsize / vips__tile_width ) );
|
||||||
*n_lines = VIPS_MAX( *n_lines, vips__thinstrip_height * nthr * 2 );
|
*n_lines = VIPS_MAX( *n_lines, vips__fatstrip_height * nthr );
|
||||||
|
*n_lines = VIPS_MAX( *n_lines, vips__thinstrip_height * nthr );
|
||||||
*n_lines = VIPS_ROUND_UP( *n_lines, *tile_height );
|
*n_lines = VIPS_ROUND_UP( *n_lines, *tile_height );
|
||||||
|
|
||||||
/* We make this assumption in several places.
|
/* We make this assumption in several places.
|
||||||
|
Loading…
Reference in New Issue
Block a user