<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
<br><br>&gt; Date: Sun, 21 Mar 2010 10:04:08 -0400<br>&gt; From: tterribe@email.unc.edu<br>&gt; <br>&gt; &gt;&gt; There is some scope for multithreading the per-frame pipeline, but<br>&gt; &gt;&gt; that only scales to three or four threads.<br>&gt; <br>&gt; The work I had in the pipeline was for parallel _decoding_ first,<br>&gt; because this is considerably easier. If it works out, parallel encoding<br>&gt; can be done within the same framework. The design work for this is<br>&gt; already done, and I had started on the implementation, but it got put<br>&gt; down as priorities changed and will probably not get picked up again<br>&gt; before the 1.2 release.<br><br><div><span class="Apple-tab-span" style="white-space:pre">        </span>The problem with starting with a parallel decoder is that decoding is much easier. &nbsp;Correct me if I'm wrong but decoding requires much less computation than encoding. &nbsp;As a result, thread overhead will be exaggerated for decoding and won't reflect real-world use since parallel processing will mostly be used for encoding...</div><div><br><div><br><div>&gt; It's unclear how well it will scale. Years ago we did a (very simple)<br>&gt; parallel decoder that only partitioned things by color plane, and the<br>&gt; speed-up was disappointing. There was also a GSoC project that attempted<br>&gt; to improve on this, but it was not successfully completed. In theory you<br>&gt; could have a separate thread for every MCU (64 pixels of height for<br>&gt; 4:2:0, 32 pixels for 4:2:2 and 4:4:4). However, within-frame parallelism<br>&gt; is fairly fine-grained, and the overhead of a standard mutex-based<br>&gt; library like pthreads is pretty enormous for this kind of thing. People<br>&gt; have reported getting speed-ups on FFT workloads as small as 10,000<br>&gt; cycles with lock-free algorithms (by comparison, a single pthread mutex<br>&gt; acquisition could take thousands of cycles by itself), but they made<br>&gt; very specific assumptions about architecture, cache line size, etc.<br>&gt; <br>&gt; In short, this requires some non-trivial engineering to get it to work<br>&gt; well, and for the moment my priorities are still on improving encoder<br>&gt; quality before worrying about encoder speed. If there are qualified<br>&gt; people out there willing to work on this, I'd be happy to explain the<br>&gt; details of what needs to be done.<br><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>It sounds like you're considering building threads into libtheora itself. &nbsp;Since it targets an arguably small set of platforms, this is not an outrageous idea but I think it will be better to leave threading to the client and support parallelism through the API much like Vorbis. &nbsp;This way, people can choose their threading implementation or port libtheora to future platforms...</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>Thank you...</div><div><br></div></div></div>                                               <br /><hr />Take your contacts everywhere.  <a href='http://go.microsoft.com/?linkid=9712958' target='_new'>Try Messenger for mobile</a></body>
</html>