title: SSE load/store memory transactions
body: <p>There are two ways for memory-register interactions in use SSE intrinsics:</p>
  
  <p>Intermediate pointers:</p>
  
  <pre><code>void f_sse(float *input, float *output, unsigned int n)
  {
     _m128 *input_sse = reinterpret_cast&lt;__m128*&gt;(input);//Input intermediate pointer
     _m128 *output_sse = reinterpret_cast&lt;__m128*&gt;(output);//Output intermediate pointer
     _m128 s = _mm_set1_ps(0.1f);
     auto loop_size = n/4; 
     for(auto i=0; i&lt;loop_size; ++i)
        output_sse[i] = _mm_add_ps(input_sse[i], s);
  }
  </code></pre>
  
  <p>Explicit fetch/store:</p>
  
  <pre><code>void f_sse(float *input, float *output, unsigned int n)
  {
     _m128 input_sse, output_sse, result;
     _m128 s = _mm_set1_ps(0.1f); 
     for(auto i=0; i&lt;n; i+=4)
     {
        input_sse  = _mm_load_ps(input+i);
        result     = _mm_add_ps(input_sse, s);
        _mm_store_ps(output+i, result);
     }
  }
  </code></pre>
  
  <p>What's the difference between mentioned approaches and which method is better in terms of perfomance? input and output pointers are aligned by _mm_malloc().</p>