MM_PREFETCH

Intrinsic Subroutine: Prefetches data from the specified address on one memory cache line.

Syntax

CALL MM_PREFETCH (address [, hint] [, fault] [, exclusive])

address
(Input) Is the name of a scalar or array; it can be of any type or rank. It specifies the address of the data on the cache line to prefetch.


hint
(Input; optional) Is an optional default integer constant with one of the following values:


Value Prefetch Constant Description
0 FOR_K_PREFETCH_T0 Prefetches into the L1 cache (and the L2 and the L3 cache). Use this for integer data.
1 FOR_K_PREFETCH_T1 Prefetches into the L2 cache (and the L3 cache); floating-point data is used from the L2 cache, not the L1 cache. Use this for real data.
2 FOR_K_PREFETCH_T2 Prefetches into the L2 cache (and the L3 cache); this line will be marked for early displacement. Use this if you are not going to reuse the cache line frequently.
3 FOR_K_PREFETCH_NTA Prefetches into the L2 cache (but not  the L3 cache); this line will be marked for early displacement. Use this if you are not going to reuse the cache line.

The preceding constants are defined in file fordef.for.

If hint  is omitted, 0 is assumed.

fault
(Input; optional) Is an optional default logical constant. If .TRUE. is specified, page faults are allowed to occur, if necessary; if .FALSE. is specified, page faults are not allowed to occur. If fault  is omitted, .FALSE. is assumed. This argument is ignored on Intel® 64 architectur and IA-32 architectures.


exclusive
(Input; optional) Is an optional default logical constant. If .TRUE. is specified, you get exclusive ownership of the cache line because you intend to assign to it; if .FALSE. is specified, there is no exclusive ownership. If exclusive  is omitted, .FALSE. is assumed. This argument is ignored on Intel® 64 and IA-32 architecture.

Example

 subroutine spread_lf (a, b)
 PARAMETER (n = 1025)

 real*8 a(n,n), b(n,n), c(n)
 do j = 1,n
   do i = 1,100
     a(i, j) = b(i-1, j) + b(i+1, j)
     call mm_prefetch (a(i+20, j), 1)
     call mm_prefetch (b(i+21, j), 1)
   enddo
 enddo

 print *, a(2, 567)

 stop
 end