Technical data
#pragma Directives [3]
E registers offer fine-grained access to local memory and a higher bandwidth for
sparse index array accesses such as gather/scatter operations and large-stride
accesses. These operations do not exploit the spatial locality of cache references.
Using this directive can greatly decrease run time for gather/scatter operations.
The benefits of using this directive are higher with random index streams. Using
this directive increases the latency of memory references in return for greater
bandwidth, so this directive may increase runtime for loops with a high degree of
spatial locality that derive benefit from cache references.
E registers can also be used to initialize large arrays that contain data not
immediately needed in cache. This avoids unnecessary reads into cache and
improves memory bandwidth efficiency for the initialization.
The format of the cache_bypass directive is as follows:
#pragma _CRI cache_bypass var_list
var_list One or more comma-separated variable names. The variable
must have type array of or pointer to (array of or pointer to)
a64–bit scalar type.
This directive precedes the loop that contains data to be accessed through E
registers. If both a cache_bypass and a novector directive are applied to the
same loop, the novector directive is ignored,
The compiler ignores the cache_bypass directive if it determines that it cannot
generate code efficiently. To increase the probability of this directive being used,
the loop should have the following characteristics:
• The loop must be an inner loop (it must not contain other loops).
• The loop must be vectorizable. You may need to use the ivdep directive in
conjunction with cache_bypass to ensure that the loop is processed.
• The base array or pointer within the loop must be invariant.
Example:
S–2179–36 91










