title: CUDA: Is texture memory still useful to speed up access times for compute capability 2.x and newer?
body: <p>I'm writing an image processing app where I have to fetch pixel data in uncoalesced manner. </p>
  
  <p>Initially I implemented my algorithm using global memory. Later I reimplemented it using texture memory. To my amazement it became slower! I thought, maybe something wrong with cudaMalloc/text1Dfetch style, so I changed it to cudaArray/tex2D. Nothing changed.</p>
  
  <p>Then I stumbled upon Shane Cook's "CUDA Programming", where he wrote:</p>
  
  <blockquote>
    <p>As compute 1.x hardware has no cache to speak of, the 6–8K of texture memory per SM provides the
    only method to truly cache data on such devices. However, with the advent of Fermi and its up to 48 K
    L1 cache and up to 768 K shared L2 cache, this made the usage of texture memory for its cache
    properties largely obsolete. The texture cache is still present on Fermi to ensure backward compati-
    bility with previous generations of code.</p>
  </blockquote>
  
  <p>I have GeForce GT 620M (Fermi, compute cap. 2.1). </p>
  
  <p>So I need some advice from professionals! Should I dig deeper into texture memory with its texture cache trying to optimize performance? Or I should better stick with global memory and L1/L2 cache?</p>