<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Comparing scalar, SSE and AVX....poor performances ?? in Software Tuning, Performance Optimization &amp; Platform Monitoring</title>
    <link>https://community.intel.com/t5/Software-Tuning-Performance/Comparing-scalar-SSE-and-AVX-poor-performances/m-p/807568#M813</link>
    <description>Thanks for your comment, Pat,&lt;DIV&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;If I work by chunks of 1024 floats, i.e.,&lt;/SPAN&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;for (int i = 0; i &amp;lt; 90000000; i += 1024),&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;I get a speed-up of 4 (aprox.) for, both, SSE and AVX (see results below).&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;META content="text/html; charset=utf-8" http-equiv="content-type" /&gt;&lt;DIV&gt;&lt;SPAN style="border-collapse: collapse; color: #525552; font-family: Arial, sans-serif; font-size: 12px; font-weight: bold; line-height: 16px;"&gt;&lt;A style="font-family: arial, sans-serif; color: #0860a8; text-decoration: underline; cursor: pointer; outline-style: none; outline-width: initial; outline-color: initial; font-size: 12px; font-weight: normal; background-color: #eeeeee; padding: 3px; margin: 0px; border: 0px initial initial;" href="http://software.intel.com/en-us/profile/336549/" class="basic" rel="/en-us/services/profile/quick_profile.php?is_paid=&amp;amp;user_id=336549"&gt;TimP (Intel)&lt;/A&gt;&lt;/SPAN&gt;told me: "As the AVX-256 sqrt is sequenced as 2 128-bit sqrt instructions, you could expect little difference inperformance between SSE and AVX-256".It can explain why there's no difference between SSE and AVX in test0, but in test1 (where only three additions are performed) the speed-up is the same?&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;By executing "objdump -S " , I checked the assembly instructions are AVX,vaddps, vmovaps,vmulps,vsqrtps..., for both the SSE function and the AVX function, the difference cames from the loop 'step' value, 4 for SSE and 8 for AVX.&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV id="_mcePaste"&gt;=======================================&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;TEST 0: l = sqrt((x*x) + (y*y) + (z*z))&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;=======================================&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    Seq time: 3.681436e-01&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    SSE time: 9.068346e-02&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    AVX time: 9.062290e-02&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    Speed-up Seq vs SSE : 4.06&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    Speed-up Seq vs AVX : 4.06&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;=======================================&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;TEST 1: l = x + y + z&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;=======================================&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    Seq time: 3.898194e-01&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    SSE time: 1.120391e-01&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    AVX time: 1.076577e-01&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    Speed-up Seq vs SSE : 3.48&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    Speed-up Seq vs AVX : 3.62&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
    <pubDate>Wed, 06 Jun 2012 14:55:31 GMT</pubDate>
    <dc:creator>Joaquin_Tarraga</dc:creator>
    <dc:date>2012-06-06T14:55:31Z</dc:date>
    <item>
      <title>Comparing scalar, SSE and AVX....poor performances ??</title>
      <link>https://community.intel.com/t5/Software-Tuning-Performance/Comparing-scalar-SSE-and-AVX-poor-performances/m-p/807566#M811</link>
      <description>&lt;DIV id="_mcePaste"&gt;Hi,&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;Please, look at these pieces of code, consisting of three versions to&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;calculate the length of a set of 3-D vectors.&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;Let's assume, vector v, with components x, y, z.&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;The length (l) of vector v, is l = sqrt((x*x) + (y*y) + (z*z))&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;I implemented three versions based on scalar, SSE and AVX instruction, to compute the&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;length of 90 000 000 vectors. I hope to get much better performance using SSE,&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;and AVX, but no...., here the results:&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;DIV id="_mcePaste"&gt;=======================================&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;TEST 0: l = sqrt((x*x) + (y*y) + (z*z))&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;=======================================&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    Scalar time: 0.46051&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    SSE time  : 0.18613&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    AVX time  : 0.19043&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    Speed-up Scalar vs SSE : 2.47&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    Speed-up Scalar vs AVX : 2.42&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;I hope a speed-up of 4 when using SSE, and much more with AVX,&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;but there is no difference between SSE and AVX.&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;Target architecture:&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;UL&gt;&lt;LI&gt;Intel Xeon CPU E31245 @ 3.30GHz&lt;/LI&gt;&lt;LI&gt;4 CPU dual-core (but I only use one core)&lt;/LI&gt;&lt;/UL&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;Command line to compile:&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;gcc -O3 -std=c99 -mavx main.c -o main -lm&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;(with ic compiler SSE and AVX are similiar too)&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;And the code:&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;Allocating memory for the SSE version:&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;DIV id="_mcePaste"&gt;x = (float*)_mm_malloc(len * sizeof(float), 16);&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;y =(float*)_mm_malloc(len * sizeof(float), 16);&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;....&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;META http-equiv="content-type" content="text/html; charset=utf-8" /&gt;&lt;SPAN style="border-collapse: collapse; font-family: Arial, sans-serif; font-size: 12px; font-weight: 200; line-height: 16px;"&gt;&lt;DIV id="_mcePaste" style="font-family: verdana, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;//----------------------------------------------------------------------------------------------------------------------&lt;/DIV&gt;&lt;DIV style="font-family: verdana, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;void length_scalar(float *x, float *y, float *z, float *l, unsigned int length) {&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt; for (int i = 0; i&lt;LENGTH&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;  l&lt;I&gt; = sqrt((x&lt;I&gt;*x&lt;I&gt;) + (y&lt;I&gt;*y&lt;I&gt;) + (z&lt;I&gt;*z&lt;I&gt;));&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt; }&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;}&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: verdana, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;//----------------------------------------------------------------------------------------------------------------------&lt;/DIV&gt;&lt;DIV style="font-family: verdana, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;void length_sse(float *x, float *y, float *z, float *l, unsigned int length) {&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt; __m128 xmm0, xmm1, xmm2, xmm3;&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt; for (int i = 0; i&lt;LENGTH&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;  xmm0 = _mm_load_ps(&amp;amp;x&lt;I&gt;);&lt;/I&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;  xmm1 = _mm_load_ps(&amp;amp;y&lt;I&gt;);&lt;/I&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;  xmm2 = _mm_load_ps(&amp;amp;z&lt;I&gt;);&lt;/I&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;             &lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;  xmm3 = _mm_add_ps(_mm_mul_ps(xmm0, xmm0), _mm_mul_ps(xmm1, xmm1));&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;  xmm3 = _mm_add_ps(_mm_mul_ps(xmm2, xmm2), xmm3);&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;  xmm3 = _mm_sqrt_ps(xmm3);&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;             &lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;  _mm_store_ps(&amp;amp;l&lt;I&gt;, xmm3);&lt;/I&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt; }&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;}&lt;/DIV&gt;&lt;DIV id="_mcePaste" style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;//----------------------------------------------------------------------------------------------------------------------&lt;/DIV&gt;&lt;DIV style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;&lt;/DIV&gt;&lt;/LENGTH&gt;&lt;/DIV&gt;&lt;/LENGTH&gt;&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;SPAN style="border-collapse: collapse; font-family: Arial, sans-serif; font-size: 12px; font-weight: 200; line-height: 16px;"&gt;void length_avx(float *x, float *y, float *z, float *l, unsigned int length) {&lt;META content="text/html; charset=utf-8" http-equiv="content-type" /&gt;&lt;SPAN style="color: #515357; font-family: verdana, sans-serif;"&gt;&lt;DIV style="font-family: verdana, sans-serif; color: #515357; padding: 0px; margin: 0px;" id="_mcePaste"&gt;&lt;META content="text/html; charset=utf-8" http-equiv="content-type" /&gt; for (int i = 0; i&lt;LENGTH&gt;&lt;DIV style="font-family: verdana, sans-serif; color: #515357; padding: 0px; margin: 0px;" id="_mcePaste"&gt;  ymm0 = _mm256_load_ps(&amp;amp;x&lt;I&gt;);&lt;/I&gt;&lt;/DIV&gt;&lt;DIV style="font-family: verdana, sans-serif; color: #515357; padding: 0px; margin: 0px;" id="_mcePaste"&gt;  ymm1 = _mm256_load_ps(&amp;amp;y&lt;I&gt;);&lt;/I&gt;&lt;/DIV&gt;&lt;DIV style="font-family: verdana, sans-serif; color: #515357; padding: 0px; margin: 0px;" id="_mcePaste"&gt;  ymm2 = _mm256_load_ps(&amp;amp;z&lt;I&gt;);&lt;/I&gt;&lt;/DIV&gt;&lt;DIV style="font-family: verdana, sans-serif; color: #515357; padding: 0px; margin: 0px;" id="_mcePaste"&gt;             &lt;/DIV&gt;&lt;DIV style="font-family: verdana, sans-serif; color: #515357; padding: 0px; margin: 0px;" id="_mcePaste"&gt;  ymm3 = _mm256_add_ps(_mm256_mul_ps(ymm0, ymm0), _mm256_mul_ps(ymm1, ymm1));&lt;/DIV&gt;&lt;DIV style="font-family: verdana, sans-serif; color: #515357; padding: 0px; margin: 0px;" id="_mcePaste"&gt;  ymm3 = _mm256_add_ps(_mm256_mul_ps(ymm2, ymm2), ymm3);&lt;/DIV&gt;&lt;DIV style="font-family: verdana, sans-serif; color: #515357; padding: 0px; margin: 0px;" id="_mcePaste"&gt;  ymm3 = _mm256_sqrt_ps(ymm3);&lt;/DIV&gt;&lt;DIV style="font-family: verdana, sans-serif; color: #515357; padding: 0px; margin: 0px;" id="_mcePaste"&gt;             &lt;/DIV&gt;&lt;/LENGTH&gt;&lt;/DIV&gt;&lt;/SPAN&gt;&lt;DIV style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;&lt;SPAN style="font-family: verdana, sans-serif;"&gt;  _mm256_store_ps(&amp;amp;l&lt;I&gt;, ymm3);&lt;/I&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;  }&lt;/DIV&gt;&lt;DIV style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;}&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;SPAN style="font-family: Arial, sans-serif;"&gt;&lt;SPAN style="border-collapse: collapse; font-size: 12px; line-height: 16px;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;//----------------------------------------------------------------------------------------------------------------------&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;META http-equiv="content-type" content="text/html; charset=utf-8" /&gt;&lt;SPAN style="border-collapse: collapse; color: #515357; font-family: Arial, sans-serif; font-size: 12px; font-weight: 200; line-height: 16px;"&gt;&lt;DIV style="font-family: Verdana, Arial, Helvetica, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;Could you, please, give me some hints, suggestions....to explain that?&lt;/DIV&gt;&lt;DIV style="font-family: Verdana, Arial, Helvetica, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;I think it is due to the 4 instructions to move data (memory /register, i.e., the load and store instructions),&lt;/DIV&gt;&lt;DIV style="font-family: Verdana, Arial, Helvetica, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;what do you think?&lt;/DIV&gt;&lt;DIV style="font-family: Verdana, Arial, Helvetica, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;&lt;/DIV&gt;&lt;DIV style="font-family: Verdana, Arial, Helvetica, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;If I ran a example more simple (addition of the 3 components of a vector, for 90 000 000 vectors)&lt;/DIV&gt;&lt;DIV style="font-family: Verdana, Arial, Helvetica, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;and I got worse results:&lt;/DIV&gt;&lt;DIV style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;&lt;DIV style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;&lt;/DIV&gt;&lt;DIV style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;=======================================&lt;/DIV&gt;&lt;DIV style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;TEST 1: l = x + y + z&lt;/DIV&gt;&lt;DIV style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;=======================================&lt;/DIV&gt;&lt;DIV style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;    Scalar time: 0.61573&lt;/DIV&gt;&lt;DIV style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;    SSE time  : 0.34304&lt;/DIV&gt;&lt;DIV style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;    AVX time  : 0.34770&lt;/DIV&gt;&lt;DIV style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;&lt;/DIV&gt;&lt;DIV style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;    Speed-up Scalar vs SSE : 1.79&lt;/DIV&gt;&lt;DIV style="font-family: Arial, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;    Speed-up Scalar vs AVX : 1.77&lt;/DIV&gt;&lt;DIV style="font-family: Verdana, Arial, Helvetica, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV style="font-family: Verdana, Arial, Helvetica, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;Any idea?&lt;/DIV&gt;&lt;DIV style="font-family: Verdana, Arial, Helvetica, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;&lt;/DIV&gt;&lt;DIV style="font-family: Verdana, Arial, Helvetica, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;Thanks a lot&lt;/DIV&gt;&lt;DIV style="font-family: Verdana, Arial, Helvetica, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;&lt;/DIV&gt;&lt;DIV style="font-family: Verdana, Arial, Helvetica, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;--&lt;/DIV&gt;&lt;DIV style="font-family: Verdana, Arial, Helvetica, sans-serif; color: #515357; padding: 0px; margin: 0px;"&gt;Joaqun&lt;/DIV&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;</description>
      <pubDate>Wed, 06 Jun 2012 09:23:56 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Tuning-Performance/Comparing-scalar-SSE-and-AVX-poor-performances/m-p/807566#M811</guid>
      <dc:creator>Joaquin_Tarraga</dc:creator>
      <dc:date>2012-06-06T09:23:56Z</dc:date>
    </item>
    <item>
      <title>Comparing scalar, SSE and AVX....poor performances ??</title>
      <link>https://community.intel.com/t5/Software-Tuning-Performance/Comparing-scalar-SSE-and-AVX-poor-performances/m-p/807567#M812</link>
      <description>Hello Joaquin,&lt;BR /&gt;Let me see if I understand correctly... each array is of length 90 million, times 4 arrays, times 4 bytes per float gives a total size of about 1.44 billion bytes.&lt;BR /&gt;I suspect that the cpu is mostly bound (restricted) by the speed at which it can read from (and write to) memory. &lt;BR /&gt;Once a cacheline is brought in from memory then avx &amp;amp; sse work faster but it is possible that you are waiting a lot for the cacheline to be fetched.&lt;BR /&gt;Can you try running the code with a total size that fits easily into the L3 and see what performance you get?&lt;BR /&gt;I'm not a compiler expert but I would probably also look at the generated assembly code and see if avx instructions are actually being generated.&lt;BR /&gt;Pat</description>
      <pubDate>Wed, 06 Jun 2012 11:46:17 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Tuning-Performance/Comparing-scalar-SSE-and-AVX-poor-performances/m-p/807567#M812</guid>
      <dc:creator>Patrick_F_Intel1</dc:creator>
      <dc:date>2012-06-06T11:46:17Z</dc:date>
    </item>
    <item>
      <title>Comparing scalar, SSE and AVX....poor performances ??</title>
      <link>https://community.intel.com/t5/Software-Tuning-Performance/Comparing-scalar-SSE-and-AVX-poor-performances/m-p/807568#M813</link>
      <description>Thanks for your comment, Pat,&lt;DIV&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;If I work by chunks of 1024 floats, i.e.,&lt;/SPAN&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;for (int i = 0; i &amp;lt; 90000000; i += 1024),&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;I get a speed-up of 4 (aprox.) for, both, SSE and AVX (see results below).&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;META content="text/html; charset=utf-8" http-equiv="content-type" /&gt;&lt;DIV&gt;&lt;SPAN style="border-collapse: collapse; color: #525552; font-family: Arial, sans-serif; font-size: 12px; font-weight: bold; line-height: 16px;"&gt;&lt;A style="font-family: arial, sans-serif; color: #0860a8; text-decoration: underline; cursor: pointer; outline-style: none; outline-width: initial; outline-color: initial; font-size: 12px; font-weight: normal; background-color: #eeeeee; padding: 3px; margin: 0px; border: 0px initial initial;" href="http://software.intel.com/en-us/profile/336549/" class="basic" rel="/en-us/services/profile/quick_profile.php?is_paid=&amp;amp;user_id=336549"&gt;TimP (Intel)&lt;/A&gt;&lt;/SPAN&gt;told me: "As the AVX-256 sqrt is sequenced as 2 128-bit sqrt instructions, you could expect little difference inperformance between SSE and AVX-256".It can explain why there's no difference between SSE and AVX in test0, but in test1 (where only three additions are performed) the speed-up is the same?&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;By executing "objdump -S " , I checked the assembly instructions are AVX,vaddps, vmovaps,vmulps,vsqrtps..., for both the SSE function and the AVX function, the difference cames from the loop 'step' value, 4 for SSE and 8 for AVX.&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV id="_mcePaste"&gt;=======================================&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;TEST 0: l = sqrt((x*x) + (y*y) + (z*z))&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;=======================================&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    Seq time: 3.681436e-01&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    SSE time: 9.068346e-02&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    AVX time: 9.062290e-02&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    Speed-up Seq vs SSE : 4.06&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    Speed-up Seq vs AVX : 4.06&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;=======================================&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;TEST 1: l = x + y + z&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;=======================================&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    Seq time: 3.898194e-01&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    SSE time: 1.120391e-01&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    AVX time: 1.076577e-01&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    Speed-up Seq vs SSE : 3.48&lt;/DIV&gt;&lt;DIV id="_mcePaste"&gt;    Speed-up Seq vs AVX : 3.62&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Wed, 06 Jun 2012 14:55:31 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Tuning-Performance/Comparing-scalar-SSE-and-AVX-poor-performances/m-p/807568#M813</guid>
      <dc:creator>Joaquin_Tarraga</dc:creator>
      <dc:date>2012-06-06T14:55:31Z</dc:date>
    </item>
    <item>
      <title>Comparing scalar, SSE and AVX....poor performances ??</title>
      <link>https://community.intel.com/t5/Software-Tuning-Performance/Comparing-scalar-SSE-and-AVX-poor-performances/m-p/807569#M814</link>
      <description>Well Tim certainly knows more about compilers, SSE &amp;amp; AVX than I do.&lt;BR /&gt;My main point was to have the test run from cache rather than memory.&lt;BR /&gt;So if you did something like (just for testing timing):&lt;BR /&gt;for(int j=0; j &amp;lt; 90000; j++)&lt;BR /&gt;{&lt;BR /&gt;length_sse(x, y, z, l, 1000);&lt;BR /&gt;}&lt;BR /&gt;so you are still doing 90 million operations... but now everything is in cache.&lt;BR /&gt;Yes, this is not solving your problem if you have vector lengths of 90 million but it is not clear to me if you are just timing stuff or trying to solve a problem.&lt;BR /&gt;Pat</description>
      <pubDate>Wed, 06 Jun 2012 15:52:50 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Tuning-Performance/Comparing-scalar-SSE-and-AVX-poor-performances/m-p/807569#M814</guid>
      <dc:creator>Patrick_F_Intel1</dc:creator>
      <dc:date>2012-06-06T15:52:50Z</dc:date>
    </item>
    <item>
      <title>Comparing scalar, SSE and AVX....poor performances ??</title>
      <link>https://community.intel.com/t5/Software-Tuning-Performance/Comparing-scalar-SSE-and-AVX-poor-performances/m-p/807570#M815</link>
      <description>Pat is right about memory access limited situations, of course. In fact, the current Intel AVX platforms also narrow the path to 128 bits beyond L1, so, as Pat is hinting, AVX will give a signficant gain in those situations only with data locality in L1.</description>
      <pubDate>Wed, 06 Jun 2012 17:50:54 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Tuning-Performance/Comparing-scalar-SSE-and-AVX-poor-performances/m-p/807570#M815</guid>
      <dc:creator>TimP</dc:creator>
      <dc:date>2012-06-06T17:50:54Z</dc:date>
    </item>
    <item>
      <title>Comparing scalar, SSE and AVX....poor performances ??</title>
      <link>https://community.intel.com/t5/Software-Tuning-Performance/Comparing-scalar-SSE-and-AVX-poor-performances/m-p/807571#M816</link>
      <description>&lt;DIV&gt;It was only for timing,bronxzv got a speep-up close to 2 (AVX-256 vs AVX-128, for test1, and playing with different 'chunk sizes'):&lt;/DIV&gt;&lt;META http-equiv="content-type" content="text/html; charset=utf-8" /&gt;&lt;A href="http://software.intel.com/en-us/forums/showthread.php?t=105767&amp;amp;o=a&amp;amp;s=lr"&gt;http://software.intel.com/en-us/forums/showthread.php?t=105767&amp;amp;o=a&amp;amp;s=lr&lt;/A&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Thanks a lot for your help.&lt;/DIV&gt;</description>
      <pubDate>Thu, 07 Jun 2012 07:31:42 GMT</pubDate>
      <guid>https://community.intel.com/t5/Software-Tuning-Performance/Comparing-scalar-SSE-and-AVX-poor-performances/m-p/807571#M816</guid>
      <dc:creator>Joaquin_Tarraga</dc:creator>
      <dc:date>2012-06-07T07:31:42Z</dc:date>
    </item>
  </channel>
</rss>

