Merge remote-tracking branch 'origin/master'
Conflicts: TODO
This commit is contained in:
commit
53589638d0
1
.gitignore
vendored
1
.gitignore
vendored
@ -125,4 +125,5 @@ doc/reference/sgml.stamp
|
||||
doc/reference/xml/
|
||||
doc/html
|
||||
doc/pdf
|
||||
gtkdocerrors
|
||||
|
||||
|
@ -1,6 +1,10 @@
|
||||
26/7/11 started 7.26.1
|
||||
- doc fixups
|
||||
- oops, ==0 missing from a strcmp() in vips7compat
|
||||
- fixed a race in im_XYZ2Lab() table build
|
||||
- added im_concurrency_get() to operation db
|
||||
- better benchmarkn.sh runs for the correct number of CPUs automatically, runs
|
||||
three times for each one, and just reports the fastest
|
||||
|
||||
26/7/11 started 7.26.0
|
||||
- version bunp for 7.26
|
||||
|
17
TODO
17
TODO
@ -8,22 +8,6 @@
|
||||
|
||||
- in benchmark, try:
|
||||
|
||||
vips im_benchmarkn temp.v temp2.v 1
|
||||
vips --vips-concurrency=99 --vips-tile-width=10 --vips-tile-height=10 \
|
||||
im_benchmarkn temp.v temp2a.v 1
|
||||
vips im_avg temp2a.v
|
||||
vips im_avg temp2.v
|
||||
|
||||
get different results :-(
|
||||
|
||||
7.24 seems to fail this test too argh
|
||||
|
||||
first column of tiles is fine, but stuff to the right of that is broken
|
||||
|
||||
|
||||
|
||||
|
||||
- leak check, again
|
||||
|
||||
- vips operation print could show operation flags as well, cf. "vips
|
||||
im_subtract"
|
||||
@ -102,7 +86,6 @@
|
||||
- do we bundle "convert" in the OS X / win32 builds? if we don't we
|
||||
should
|
||||
|
||||
- some way for nip2 to get the vips bin area
|
||||
|
||||
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
|
||||
uname -a
|
||||
gcc --version
|
||||
@ -7,7 +7,7 @@ vips --version
|
||||
# how large an image do you want to process?
|
||||
# sample2.v is 290x442 pixels ... replicate this many times horizontally and
|
||||
# vertically to get a highres image for the benchmark
|
||||
tile=2
|
||||
tile=13
|
||||
|
||||
# how complex an operation do you want to run?
|
||||
# this sets the number of copies of the benchmark we chain together:
|
||||
@ -21,26 +21,44 @@ if [ $? != 0 ]; then
|
||||
echo "build of test image failed -- out of disc space?"
|
||||
exit 1
|
||||
fi
|
||||
echo -n "test image is" `header -f Xsize temp.v`
|
||||
echo " by" `header -f Ysize temp.v` "pixels"
|
||||
echo -n "test image is" `header -f width temp.v`
|
||||
echo " by" `header -f height temp.v` "pixels"
|
||||
max_cpus=`vips im_concurrency_get`
|
||||
|
||||
echo "max cpus = $max_cpus"
|
||||
echo "starting benchmark ..."
|
||||
echo "chain=$chain"
|
||||
|
||||
for cpus in 1 2 3 4 ; do
|
||||
export IM_CONCURRENCY=$cpus
|
||||
|
||||
echo IM_CONCURRENCY=$IM_CONCURRENCY
|
||||
echo time -p vips im_benchmarkn temp.v temp2.v $chain
|
||||
time -p vips im_benchmarkn temp.v temp2-$cpus.v $chain
|
||||
echo /usr/bin/time -f %e vips \
|
||||
--vips-concurrency=xx \
|
||||
--vips-tile-width=64 --vips-tile-height=64 \
|
||||
im_benchmarkn temp.v temp2.v $chain
|
||||
echo reported real-time is best of three runs
|
||||
echo cpus real-time
|
||||
|
||||
for((cpus = 1; cpus <= max_cpus; cpus++)); do
|
||||
t1=`/usr/bin/time -f %e vips \
|
||||
--vips-concurrency=$cpus \
|
||||
--vips-tile-width=64 --vips-tile-height=64 \
|
||||
im_benchmarkn temp.v temp2.v $chain 2>&1`
|
||||
if [ $? != 0 ]; then
|
||||
echo "benchmark failed -- install problem?"
|
||||
exit 1
|
||||
fi
|
||||
t2=`/usr/bin/time -f %e vips \
|
||||
--vips-concurrency=$cpus \
|
||||
--vips-tile-width=64 --vips-tile-height=64 \
|
||||
im_benchmarkn temp.v temp2.v $chain 2>&1`
|
||||
t3=`/usr/bin/time -f %e vips \
|
||||
--vips-concurrency=$cpus \
|
||||
--vips-tile-width=64 --vips-tile-height=64 \
|
||||
im_benchmarkn temp.v temp2.v $chain 2>&1`
|
||||
|
||||
# find pixel average ... should be the same for all IM_CONCURRENCY settings
|
||||
# or we have some kind of terrible bug
|
||||
echo vips im_avg temp2-$cpus.v
|
||||
vips im_avg temp2-$cpus.v
|
||||
# echo $t1 $t2 $t3
|
||||
|
||||
if [[ $t2 < $t1 ]]; then
|
||||
t1=$t2
|
||||
fi
|
||||
if [[ $t3 < $t1 ]]; then
|
||||
t1=$t3
|
||||
fi
|
||||
echo $cpus $t1
|
||||
done
|
||||
|
@ -1,10 +1,6 @@
|
||||
/* @(#) Turn Lab 32bit packed format into displayable rgb. Fast, but very
|
||||
* @(#) inaccurate: for display only!
|
||||
* @(#)
|
||||
* @(#) Usage:
|
||||
* @(#) int im_LabQ2disp( IMAGE *in, IMAGE *out, struct im_col_display *d )
|
||||
* @(#)
|
||||
* @(#) Returns: -1 on error, else 0
|
||||
/* Turn Lab 32bit packed format into displayable rgb. Fast, but very
|
||||
* inaccurate: for display only! Note especially that this dithers and will
|
||||
* give different results on different runs.
|
||||
*
|
||||
* 5/11/97 Steve Perry
|
||||
* - adapted from old ip code
|
||||
|
@ -15,6 +15,8 @@
|
||||
* - ahem, build the LUT outside the eval thread
|
||||
* 2/11/09
|
||||
* - gtkdoc
|
||||
* 3/8/11
|
||||
* - fix a race in the table build
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -74,15 +76,14 @@ imb_XYZ2Lab_tables( void )
|
||||
{
|
||||
static int built_tables = 0;
|
||||
|
||||
int was_built;
|
||||
int i;
|
||||
|
||||
g_mutex_lock( im__global_lock );
|
||||
was_built = built_tables;
|
||||
built_tables = 1;
|
||||
g_mutex_unlock( im__global_lock );
|
||||
if( was_built )
|
||||
|
||||
if( built_tables ) {
|
||||
g_mutex_unlock( im__global_lock );
|
||||
return;
|
||||
}
|
||||
|
||||
for( i = 0; i < QUANT_ELEMENTS; i++ ) {
|
||||
float Y = (double) i / QUANT_ELEMENTS;
|
||||
@ -92,6 +93,10 @@ imb_XYZ2Lab_tables( void )
|
||||
else
|
||||
cbrt_table[i] = cbrt( Y );
|
||||
}
|
||||
|
||||
built_tables = 1;
|
||||
|
||||
g_mutex_unlock( im__global_lock );
|
||||
}
|
||||
|
||||
/* Process a buffer of data.
|
||||
|
@ -435,6 +435,35 @@ static im_function version_desc = {
|
||||
version_args /* Arg list */
|
||||
};
|
||||
|
||||
/* im_concurrency_get() args.
|
||||
*/
|
||||
static im_arg_desc concurrency_get_args[] = {
|
||||
IM_OUTPUT_INT( "concurrency" )
|
||||
};
|
||||
|
||||
/* Call im_concurrency_get() via arg vector.
|
||||
*/
|
||||
static int
|
||||
concurrency_get_vec( im_object *argv )
|
||||
{
|
||||
int *out = ((int *) argv[0]);
|
||||
|
||||
*out = vips_concurrency_get();
|
||||
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
/* Description of im_concurrency_get.
|
||||
*/
|
||||
static im_function concurrency_get_desc = {
|
||||
"im_concurrency_get", /* Name */
|
||||
"get concurrency level", /* Description */
|
||||
0, /* Flags */
|
||||
concurrency_get_vec, /* Dispatch function */
|
||||
VIPS_NUMBER( concurrency_get_args ), /* Size of arg list */
|
||||
concurrency_get_args /* Arg list */
|
||||
};
|
||||
|
||||
/* im_cache() args.
|
||||
*/
|
||||
static im_arg_desc cache_args[] = {
|
||||
@ -518,6 +547,7 @@ static im_function binfile_desc = {
|
||||
static im_function *iofuncs_list[] = {
|
||||
&binfile_desc,
|
||||
&cache_desc,
|
||||
&concurrency_get_desc,
|
||||
&getext_desc,
|
||||
&guess_prefix_desc,
|
||||
&guess_libdir_desc,
|
||||
|
Loading…
Reference in New Issue
Block a user