diff --git a/doc/How-it-works.md b/doc/How-it-works.md index 4461b6a0dd..a53082b377 100644 --- a/doc/How-it-works.md +++ b/doc/How-it-works.md @@ -109,18 +109,18 @@ set of mechanisms to copy image areas by just adjusting pointers. Most of the time no actual copying is necessary and you can perform operations on large images at low cost. -**Run-time code generation** +**SIMD optimisations** -VIPS uses -Orc, a -run-time compiler, to generate code for some operations. For example, to -compute a convolution on an 8-bit image, VIPS will examine the convolution -matrix and the source image and generate a tiny program to calculate the -convolution. This program is then "compiled" to the vector instruction set -for your CPU, for example SSE3 on most x86 processors. +VIPS uses +Highway, a +C++ library, to optimise various operations with SIMD/vector +instructions. These optimised code paths are flexible and can adapt to +different instruction sets, including those with 'scalable' vectors +(size unknown at compile time). At runtime, dynamic dispatch selects +the best available implementation based on the processor's capabilities, +ensuring optimal performance. -Run-time vector code generation typically speeds operations up by a factor -of three or four. +SIMD typically speeds operations up by a factor of three or four. **Joining operations together** @@ -229,7 +229,7 @@ time you call an operation, VIPS searches the cache for a previous call to the same operation with the same arguments. If it finds a match, you get the previous result again. This can give a huge speedup. -By default, VIPS caches the last 1,000 operation calls. You can also control +By default, VIPS caches the last 100 operation calls. You can also control the cache size by memory use or by files opened. (\* Some vips operations DO have side effects, for example, diff --git a/doc/How-it-works.xml b/doc/How-it-works.xml index 093bd19f41..b237b3e570 100644 --- a/doc/How-it-works.xml +++ b/doc/How-it-works.xml @@ -95,13 +95,13 @@ g_object_unref(region); Like most threaded image processing systems, all VIPS operations have to be free of side-effects. In other words, operations cannot modify images, they can only create new images. This could result in a lot of copying if an operation is only making a small change to a large image so VIPS has a set of mechanisms to copy image areas by just adjusting pointers. Most of the time no actual copying is necessary and you can perform operations on large images at low cost. - Run-time code generation + SIMD optimisations - VIPS uses Orc, a run-time compiler, to generate code for some operations. For example, to compute a convolution on an 8-bit image, VIPS will examine the convolution matrix and the source image and generate a tiny program to calculate the convolution. This program is then compiled to the vector instruction set for your CPU, for example SSE3 on most x86 processors. + VIPS uses Highway, a C++ library, to optimise various operations with SIMD/vector instructions. These optimised code paths are flexible and can adapt to different instruction sets, including those with scalable vectors (size unknown at compile time). At runtime, dynamic dispatch selects the best available implementation based on the processor’s capabilities, ensuring optimal performance. - Run-time vector code generation typically speeds operations up by a factor of three or four. + SIMD typically speeds operations up by a factor of three or four. Joining operations together @@ -191,7 +191,7 @@ g_object_unref(region); Because VIPS operations are free of side-effects*, you can cache them. Every time you call an operation, VIPS searches the cache for a previous call to the same operation with the same arguments. If it finds a match, you get the previous result again. This can give a huge speedup. - By default, VIPS caches the last 1,000 operation calls. You can also control the cache size by memory use or by files opened. + By default, VIPS caches the last 100 operation calls. You can also control the cache size by memory use or by files opened. (* Some vips operations DO have side effects, for example, vips_draw_circle() will draw a circle on an image. These operations emit an invalidate signal on the image they are called on and this signal makes all downstream operations and caches drop their contents.)