<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://www.vips.ecs.soton.ac.uk/skins/common/feed.css"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.vips.ecs.soton.ac.uk/index.php?title=Special:Recentchanges&amp;hidemyself=0&amp;limit=500&amp;hideminor=1&amp;feed=atom</id>
		<title>VipsWiki - Recent changes [en]</title>
		<link rel="self" type="application/atom+xml" href="http://www.vips.ecs.soton.ac.uk/index.php?title=Special:Recentchanges&amp;hidemyself=0&amp;limit=500&amp;hideminor=1&amp;feed=atom"/>
		<link rel="alternate" type="text/html" href="http://www.vips.ecs.soton.ac.uk/index.php?title=Special:Recentchanges"/>
		<updated>2013-05-18T18:31:38Z</updated>
		<subtitle>Track the most recent changes to the wiki on this page.</subtitle>
		<generator>MediaWiki 1.6.6</generator>

	<entry>
		<id>http://www.vips.ecs.soton.ac.uk/index.php?title=How_it_works</id>
		<title>How it works</title>
		<link rel="alternate" type="text/html" href="http://www.vips.ecs.soton.ac.uk/index.php?title=How_it_works"/>
				<updated>2013-05-17T12:48:24Z</updated>
		
		<summary type="html">&lt;p&gt;/* Partial images */ &lt;/p&gt;

			&lt;table border='0' width='98%' cellpadding='0' cellspacing='4' style=&quot;background-color: white;&quot;&gt;
			&lt;tr&gt;
				&lt;td colspan='2' width='50%' align='center' style=&quot;background-color: white;&quot;&gt;Revision as of 12:48, 17 May 2013&lt;/td&gt;
				&lt;td colspan='2' width='50%' align='center' style=&quot;background-color: white;&quot;&gt;Current revision&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;&lt;td colspan=&quot;2&quot; align=&quot;left&quot;&gt;&lt;strong&gt;Line 53:&lt;/strong&gt;&lt;/td&gt;
&lt;td colspan=&quot;2&quot; align=&quot;left&quot;&gt;&lt;strong&gt;Line 53:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;The stored function comes in three parts: a start function, a generate function and a stop function. The start function creates a state, the generate function uses the state plus a requested area to calculate pixel values and the stop function frees the state again. Breaking the stored function into three parts is good for SMP scaling: resource allocation and synchronisation mostly happens in start functions, so generate functions can run without having to talk to each other.&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;The stored function comes in three parts: a start function, a generate function and a stop function. The start function creates a state, the generate function uses the state plus a requested area to calculate pixel values and the stop function frees the state again. Breaking the stored function into three parts is good for SMP scaling: resource allocation and synchronisation mostly happens in start functions, so generate functions can run without having to talk to each other.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; font-size: smaller;&quot;&gt;VIPS makes a set of guarantees about parallelism that make this simple to program. Start and stop functions are mutually exclusive and a state is never &lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;be &lt;/span&gt;used by more than one generate. In other words, a start / generate / generate / stop sequence works like a thread.&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; font-size: smaller;&quot;&gt;VIPS makes a set of guarantees about parallelism that make this simple to program. Start and stop functions are mutually exclusive and a state is never used by more than one generate. In other words, a start / generate / generate / stop sequence works like a thread.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;[[Image:Sequence.png]]&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;[[Image:Sequence.png]]&lt;/td&gt;&lt;/tr&gt;

			&lt;/table&gt;
		</summary>
		<author><name>John</name></author>	</entry>

	<entry>
		<id>http://www.vips.ecs.soton.ac.uk/index.php?title=Speed_and_Memory_Use</id>
		<title>Speed and Memory Use</title>
		<link rel="alternate" type="text/html" href="http://www.vips.ecs.soton.ac.uk/index.php?title=Speed_and_Memory_Use"/>
				<updated>2013-05-17T11:27:21Z</updated>
		
		<summary type="html">&lt;p&gt;/* Why is VIPS quick */ &lt;/p&gt;

			&lt;table border='0' width='98%' cellpadding='0' cellspacing='4' style=&quot;background-color: white;&quot;&gt;
			&lt;tr&gt;
				&lt;td colspan='2' width='50%' align='center' style=&quot;background-color: white;&quot;&gt;Revision as of 11:27, 17 May 2013&lt;/td&gt;
				&lt;td colspan='2' width='50%' align='center' style=&quot;background-color: white;&quot;&gt;Current revision&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;&lt;td colspan=&quot;2&quot; align=&quot;left&quot;&gt;&lt;strong&gt;Line 72:&lt;/strong&gt;&lt;/td&gt;
&lt;td colspan=&quot;2&quot; align=&quot;left&quot;&gt;&lt;strong&gt;Line 72:&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;We have a [[How it works]] page which goes into some detail, but briefly:&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;We have a [[How it works]] page which goes into some detail, but briefly:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; font-size: smaller;&quot;&gt;; Threaded image IO system: &lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;most &lt;/span&gt;image processing libraries have threaded operations. Each operation has code, generally using a framework like OpenMP, to run the operation over all the available processors. VIPS instead puts the threading into the image IO system, so all operations are automatically threaded. Additionally, this type of &amp;quot;horizontal&amp;quot; threading makes much better use of processor caches and dramatically reduces the amount of locking you need. &lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; font-size: smaller;&quot;&gt;; Threaded image &lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;input-output (&lt;/span&gt;IO&lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;) &lt;/span&gt;system: &lt;span style=&quot;color: red; font-weight: bold;&quot;&gt;Most &lt;/span&gt;image processing libraries have threaded operations. Each operation has code, generally using a framework like OpenMP, to run the operation over all the available processors. VIPS instead puts the threading into the image IO system, so all operations are automatically threaded. Additionally, this type of &amp;quot;horizontal&amp;quot; threading makes much better use of processor caches and dramatically reduces the amount of locking you need. &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;; Fast operations: The VIPS primitives are implemented carefully, and some use techniques like run-time code generation. The convolution operator, for example, will examine the matrix and the image and write a short SSE3 program to implement exactly that convolution on exactly that image. &lt;/td&gt;&lt;td&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; font-size: smaller;&quot;&gt;; Fast operations: The VIPS primitives are implemented carefully, and some use techniques like run-time code generation. The convolution operator, for example, will examine the matrix and the image and write a short SSE3 program to implement exactly that convolution on exactly that image. &lt;/td&gt;&lt;/tr&gt;

			&lt;/table&gt;
		</summary>
		<author><name>John</name></author>	</entry>

	</feed>