<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Passing on the Left &#187; orc</title>
	<atom:link href="http://www.schleef.org/blog/category/orc/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.schleef.org/blog</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Wed, 14 Jul 2010 01:24:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>This must be the Orc blog</title>
		<link>http://www.schleef.org/blog/2010/07/13/this-must-be-the-orc-blog/</link>
		<comments>http://www.schleef.org/blog/2010/07/13/this-must-be-the-orc-blog/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 01:24:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[orc]]></category>

		<guid isPermaLink="false">http://www.schleef.org/blog/?p=65</guid>
		<description><![CDATA[I just released Orc-0.4.6.  Lots of improvements based on feedback from people using it related to GStreamer.  This release is roughly timed for the upcoming GStreamer core/base 0.10.30 releases &#8212; it is the recommended release, but you can also use 0.4.5.
Orc is roughly following a 3-release cycle timed with GStreamer releases: features, performance, bug fixes.  [...]]]></description>
			<content:encoded><![CDATA[<p>I just released Orc-0.4.6.  Lots of improvements based on feedback from people using it related to GStreamer.  This release is roughly timed for the upcoming GStreamer core/base 0.10.30 releases &#8212; it is the recommended release, but you can also use 0.4.5.</p>
<p>Orc is roughly following a 3-release cycle timed with GStreamer releases: features, performance, bug fixes.  This release was roughly performance+bug fixes.  After the GStreamer release, there will be a release adding new features, and the next version of GStreamer will depend on that version.  Following by a few weeks will be performance improvements, then bug fixes in time for the next GStreamer release.</p>
<p>Many of my recent posts have been Orc related.  Must change this&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.schleef.org/blog/2010/07/13/this-must-be-the-orc-blog/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Orc NEON backend</title>
		<link>http://www.schleef.org/blog/2010/06/25/orc-neon-backend/</link>
		<comments>http://www.schleef.org/blog/2010/06/25/orc-neon-backend/#comments</comments>
		<pubDate>Fri, 25 Jun 2010 20:22:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[gstreamer]]></category>
		<category><![CDATA[orc]]></category>

		<guid isPermaLink="false">http://www.schleef.org/blog/?p=61</guid>
		<description><![CDATA[The Orc NEON backend is now open-source and part of the 0.4.5 release.  Thanks to Nokia for making this possible.
All of the GStreamer code that previously used liboil has been converted to Orc, and will be part of the upcoming releases.  Plugins from -base that were converted are videotestsrc, videoscale, audioconvert, volume, and adder.  The [...]]]></description>
			<content:encoded><![CDATA[<p>The Orc NEON backend is now open-source and part of the 0.4.5 release.  Thanks to Nokia for making this possible.</p>
<p>All of the GStreamer code that previously used liboil has been converted to Orc, and will be part of the upcoming releases.  Plugins from -base that were converted are videotestsrc, videoscale, audioconvert, volume, and adder.  The change in speed is minor for now, since liboil was not used extensively.</p>
<p>The way that GStreamer uses Orc is intended to be very convenient for the end user:  by default when compiling from source, Orc will be used if an acceptable version is found, otherwise backup code (in C) will be used.  This backup code is automatically generated and checked in to git by a developer, so it always exists.  The configure options &#8216;&#8211;enable-orc&#8217; and &#8216;&#8211;disable-orc&#8217; affect this: the former causes configure to <em>require</em> Orc, and a configure failure is a good reminder to upgrade Orc.  The latter may be useful on architectures where Orc doesn&#8217;t generate code yet.  After a transitional phase, Orc will become required, since the more advanced uses of Orc cannot be duplicated by backup functions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.schleef.org/blog/2010/06/25/orc-neon-backend/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Orc moved to code.entropywave.com</title>
		<link>http://www.schleef.org/blog/2009/10/02/orc-moved-to-code-entropywave-com/</link>
		<comments>http://www.schleef.org/blog/2009/10/02/orc-moved-to-code-entropywave-com/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 23:45:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[entropywave]]></category>
		<category><![CDATA[orc]]></category>

		<guid isPermaLink="false">http://www.schleef.org/blog/?p=33</guid>
		<description><![CDATA[The git repository for Orc has moved to code.entropywave.com, where it will also likely obtain an actual web page soon.  code is a new website for open-source and free software projects sponsored by Entropy Wave.
]]></description>
			<content:encoded><![CDATA[<p>The git repository for Orc has moved to <a href="http://code.entropywave.com/">code.entropywave.com</a>, where it will also likely obtain an actual web page soon.  <a href="http://code.entropywave.com/">code</a> is a new website for open-source and free software projects sponsored by <a href="http://entropywave.com/">Entropy Wave</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.schleef.org/blog/2009/10/02/orc-moved-to-code-entropywave-com/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cog in gst-plugins-bad</title>
		<link>http://www.schleef.org/blog/2009/09/19/cog-in-gst-plugins-bad/</link>
		<comments>http://www.schleef.org/blog/2009/09/19/cog-in-gst-plugins-bad/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 20:05:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[orc]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.schleef.org/blog/?p=24</guid>
		<description><![CDATA[I finally moved my collection of Orc-based GStreamer plugins (codename &#8220;Cog&#8221;) into gst-plugins-bad, since they&#8217;re moved on from being an experiment.  Orc is a runtime compiler for a simple cross-platform assembly-like language that specifically targets SIMD instructions for several processors.  Orc is very effective inside it&#8217;s domain, which is small but growing.
One such application that [...]]]></description>
			<content:encoded><![CDATA[<p>I finally moved my collection of Orc-based GStreamer plugins (codename &#8220;Cog&#8221;) into gst-plugins-bad, since they&#8217;re moved on from being an experiment.  <a href="http://www.schleef.org/blog/2009/05/31/orc-040/">Orc</a> is a runtime compiler for a simple cross-platform assembly-like language that specifically targets SIMD instructions for several processors.  Orc is very effective inside it&#8217;s domain, which is small but growing.</p>
<p>One such application that is covered is chroma subsampling and color matrixing for video, semi-incorrectly referred to as &#8220;colorspace conversion&#8221; in GStreamer.  There has been a colorspace element in Cog (cogcolorspace) for some time, but I never really bothered to do any speed comparisons between it and the default GStreamer colorspace element (ffmpegcolorspace), which is based on code copied from FFMpeg.  However, recently I did, and was somewhat surprised (although I shouldn&#8217;t have been) that cogcolorspace is the same speed as, or much faster than, ffmpegcolorspace for almost all operations.  (Please note that the FFMpeg code was forked a long time ago and heavily modified, so it does not reflect FFMpeg itself, only GStreamer&#8217;s ffmpegcolorspace.)</p>
<p>This is a scatter plot of the run time (in ms) for converting 1000 frames of 320&#215;240 video between a variety of uncompressed video formats:</p>
<p><a href="http://www.schleef.org/blog/wp-content/uploads/2009/09/colorspace-time-scatterplot.png"><img class="alignnone size-full wp-image-25" title="Colorspace element execution time scatter plot" src="http://www.schleef.org/blog/wp-content/uploads/2009/09/colorspace-time-scatterplot.png" alt="Colorspace element execution time scatter plot" width="463" height="288" /></a></p>
<p>The axes are execution time (in ms), with cogcolorspace on the horizontal axis and ffmpegcolorspace on the vertical axis.  The green line represents same execution time, thus for points below the line, ffmpegcolorspace was faster, for those above, cogcolorspace was faster.  Most of the points clustered around the green line are statistically the same as the green line, since my timing method is quite crude.  Things to observe from this graph are that 1) many cases are very similar in speed, indicating that both ffmpegcolorspace and cogcolorspace are using similar code paths, 2) some cases, cogcolorspace is a <em>lot</em> faster, probably indicating that there isn&#8217;t an assembly fast path in ffmpegcolorspace for that conversion, and 3) a few cases (which, not coincidentally, are the most heavily used cases) ffmpegcolorspace is slightly faster than cogcolorspace.</p>
<p>The conclusions to draw from this are that 1) by writing very generic code with Orc, you can get very similar results to hand-crafted assembly code, and 2) a developer can cover a lot more cases with a small amount of work, and 3) there are a few cases where special-case Orc code would be beneficial.</p>
<p>This is only the low quality mode that cogcolorspace supports, which is similar or identical in quality to ffmpegcolorspace.  Higher-quality conversion is also implemented in most cases, and is only slightly slower in speed.  This is the real advantage of Orc &#8212; Orc takes care of huge number of combinations of options, and produces good SIMD code for all of them.</p>
<p><img src="file:///tmp/moz-screenshot.png" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.schleef.org/blog/2009/09/19/cog-in-gst-plugins-bad/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Orc-0.4.0</title>
		<link>http://www.schleef.org/blog/2009/05/31/orc-040/</link>
		<comments>http://www.schleef.org/blog/2009/05/31/orc-040/#comments</comments>
		<pubDate>Sun, 31 May 2009 23:33:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[liboil]]></category>
		<category><![CDATA[orc]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.schleef.org/blog/2009/05/31/orc-040/</guid>
		<description><![CDATA[Lately, I&#8217;ve been working on a side project called Orc as a replacement for liboil.  Liboil&#8217;s first major problem has always been that it doesn&#8217;t scale well &#8212; every software package that wanted to use liboil typically required several new liboil functions, and then someone would need to actually write assembly code for those functions [...]]]></description>
			<content:encoded><![CDATA[<p>Lately, I&#8217;ve been working on a side project called <a href="http://cgit.freedesktop.org/~ds/orc">Orc</a> as a replacement for <a href="http://liboil.freedesktop.org/wiki/">liboil</a>.  Liboil&#8217;s first major problem has always been that it doesn&#8217;t scale well &#8212; every software package that wanted to use liboil typically required several new liboil functions, and then someone would need to actually write assembly code for those functions on several architectures.  My original plan was to develop a critical mass of functions, and then additions would be &#8220;simple&#8221;.  This never happened.  The second major problem is that liboil&#8217;s compilation is terribly fragile.  Thousands of lines of inline assembly code that depends on specific compilers, compiler versions, libtool internals, and random snippets of code such as &#8220;if $user != msmith&#8221; do not lead to a maintainable project.</p>
<p>Orc is now to the point where it can not only reproduce about 90% of the code that is currently in liboil, but also generate 90% of the code that <em>should</em> be in liboil, but nobody ever wrote.  At runtime.  And the Orc language allows you to describe your own liboil-style functions.  At runtime.  Or, you can also use it like a normal compiler, converting Orc language source into N different assembly source files for every possible vector instruction set combination.</p>
<p>A large part of the decoding path in Schroedinger has been converted to optionally use Orc, where speed is either slightly faster or 20-30% faster than the previous liboil code.  The real benefit is that takes only a few minutes to convert code that took weeks to develop originally.  A side project of mine, <a href="http://cgit.freedesktop.org/~ds/cog">Cog</a>, has turned into a showcase for Orc, with demonstrations of video processing <a href="http://gstreamer.net/">GStreamer</a> elements, such as format and colorspace conversion and scaling.  I&#8217;ve found that since it is so easy and fast to create vectorized code, it now becomes possible to offer additional features to users, such as quality vs. speed tradeoffs.</p>
<p>Orc can generate code for MMX and SSE on x86 and x86_64, and Altivec on PowerPC, as well as NEON for ARM and c64x+DSP code.  The NEON and c64x+ backends are not currently open source.</p>
<p><a href="http://www.schleef.org/orc/download/">Download 0.4.0</a>.  <a href="http://www.schleef.org/orc/documentation/">Online documentation</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.schleef.org/blog/2009/05/31/orc-040/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
