<br><br><div class="gmail_quote">On Mon, Mar 11, 2013 at 1:30 PM, Jose Fonseca <span dir="ltr"><<a href="mailto:jfonseca@vmware.com" target="_blank">jfonseca@vmware.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">----- Original Message -----<br>
> On 03/11/2013 07:56 AM, Jose Fonseca wrote:<br>
> > I'm surprised this is is faster.<br>
> ><br>
> > In particular, for big things we'll be touching memory twice.<br>
> ><br>
> > Did you measure the speed up?<br>
><br>
> The second hit is cache-hot, so it may not be too expensive.  <br>
<br>
</div>Yes, but the size in question is 1900x1200, ie, 9MB, which will trash L1-L2 caches, and won't even fit on the L3 cache of several processors.<br>
<br>
I'm afraid we'd be optimizing some cases at expense of others.<br>
<br>
I think that at very least we should do this in 16KB/32KB or so chunks to avoid trashing the lower level caches.<br>
<div class="im"><br>
> I suspect<br>
> memcpy is optimized to fill the cache in a more efficient manner than<br>
> the old loop.  Since the old loop did a read and a bit-wise or, it's<br>
> also possible the compiler generated some really dumb code.  We'd have<br>
> to look at the assembly output to know.<br>
><br>
> As Patrick suggests, there's probably an SSE2 method to do this even<br>
> faster.  That may be worth investigating.<br>
<br>
</div>An SSE2 is quite easy with intrinsics:<br>
 <br>
  _m128i pixels = _mm_loadu_si128((const __m128i *)src); // could use _mm_load_si128 with some checks<br>
  pixels = _mm_or_si128(pixels, _mm_set1_epi32(0xff000000));<br>
  _mm_storeu_si128((__m128i *)dst, pixels);<br>
  src += sizeof(__m128i) / sizeof *src;<br>
  dst += sizeof(__m128i) / sizeof *dst;<br>
<br>
the hard part is the runtime check for sse2 support...<br>
<span class="HOEnZb"><font color="#888888"><br></font></span></blockquote><div><br></div><div>At least for x86-64, there is no runtime check required as SSE2 is required. The mesa/x86 folder contains runtime CPU code detection already; I was just browsing it.</div>
<div><br></div><div>Patrick</div><div> </div></div>