Developer Guide and Reference

Contents

prefetch/noprefetch

Invites the compiler to issue or disable requests to prefetch data from memory. This pragma applies only to Intel® Advanced Vector Extensions 512 (Intel® AVX-512).

Syntax

#pragma prefetch
#pragma prefetch
*:hint
[
:
distance
]
#pragma prefetch
[
var1
[
:
hint1
[
:
distance1
]]
[
,
var2
[
:
hint2
[
:
distance2
]]]
...
]
#pragma noprefetch
[
var1
[
,
var2
]
...
]
Arguments
var
An optional memory reference (data to be prefetched)
hint
An optional hint to the compiler to specify the type of prefetch. Possible values:
  • 1
    : For integer data that will be reused
  • 2: For integer and floating point data that will be reused from L2 cache
  • 3:
    For data that will be reused from L3 cache
  • 4:
    For data that will not be reused
To use this argument, you must also specify
var
.
distance
An optional integer argument with a value greater than 0. It indicates the number of loop iterations ahead of which a prefetch is issued, before the corresponding load or store instruction. To use this argument, you must also specify
var
and
hint
.
Description
This pragma hints to the compiler to generate data prefetches for some memory references. These hints affect the heuristics used in the compiler. Prefetching data can minimize the effects of memory latency.
If you specify the
prefetch
pragma with no arguments, all arrays accessed in the immediately following loop are prefetched.
If the loop includes the expression
A(j)
, placing
#pragma prefetch A
in front of the loop instructs the compiler to insert prefetches for
A(j + d)
within the loop. Here,
d
is the number of iterations ahead of which to prefetch the data, and is determined by the compiler.
If you specify
#pragma prefetch *
, then
hint
and
distance
prefetches all array accesses in the loop.
To use these pragmas, the compiler general optimization level must be set at option
O2
or higher.
The
noprefetch
pragma hints to the compiler not to generate data prefetches for some memory references. This affects the heuristics used in the compiler.
Examples
Example: Using the
prefetch
pragma
#pragma prefetch htab_p:1:30 #pragma prefetch htab_p:0:6 // Issue vprefetch1 for htab_p with a distance of 30 vectorized iterations ahead // Issue vprefetch0 for htab_p with a distance of 6 vectorized iterations ahead // If pragmas are not present, compiler chooses both distance values for (j=0; j<2*N; j++) { htab_p[i*m1 + j] = -1; }
Example: Using
noprefetch
and
prefetch
pragmas together
#pragma noprefetch b #pragma prefetch a for(i=0; i<m; i++) { a[i]=b[i]+1; }
Example: Using
noprefetch
and
prefetch
pragmas together
for (i=i0; i!=i1; i+=is) {   float sum = b[i]; int ip = srow[i]; int c = col[ip]; #pragma noprefetch col #pragma prefetch value:1:80 #pragma prefetch x:1:40 for(; ip<srow[i+1]; c=col[++ip])   sum -= value[ip] * x[c];   y[i] = sum; }

Product and Performance Information

1

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.