<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">Hi all,</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">


I was wondering whether it would be possible to only use the first two elements in a vector of size 4, for example when using AVX and doubles.. The obvious answer would be to use a mask, however this results in degraded performance compared to SSE.</div>


<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">On many CPU architectures it appears that when operating on 4 elements division takes longer than when operating on just 2. DIVPD has a latency of 10-20 cycles on a Haswell while VDIVPD takes 19-35, for example. (from <a href="http://www.agner.org/optimize/instruction_tables.pdf" target="_blank">http://www.agner.org/optimize/instruction_tables.pdf</a>) Things are similar for square root.</div>


<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">Therefore in this case, one would want to emit SSE instructions instead of AVX ones. A question might be "why not utilize all 4 elements" - unfortunately the application is such that only 2 elements can be filled at a time.</div>


<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">The difference in performance can be large - this results in the paradoxical situation in which my code that only uses 2 doubles of each vector is 50% faster when compiled with SSE than AVX.</div>


<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">On the other hand, some other of the vectorized code in the same binary might use the larger vectors and benefit from AVX - I don't want to resort to compiling only with SSE.</div>


<div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">Is there any way around this?</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">


<br></div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">Cheers,</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">Georgios</div><div class="gmail_default" style="font-family:verdana,sans-serif;font-size:small">


<br></div></div>