================
@@ -4002,6 +4002,54 @@ or ``syncscope("<target-scope>")`` *synchronizes with* 
and participates in the
 seq\_cst total orderings of other operations that are not marked
 ``syncscope("singlethread")`` or ``syncscope("<target-scope>")``.
 
+.. _nontemporal:
+
+Non-temporal memory access
+--------------------------
+
+Certain memory access operations are marked as "non-temporal". The :ref:`load
+<i_load>` and :ref:`store <i_store>` instructions can be made non-temporal by
+attaching the ``!nontemporal`` metadata. Some target-specific intrinsics may
+also be specified as doing a non-temporal memory access.
+
+Hardware provides these special non-temporal access instructions (such as the
+``MOVNT`` instructions on x86), in order to permit specialized code to reduce
+cache utilization and bandwidth, when the program knows that the memory is
+unlikely to be reused in cache in the near future. However, because they avoid
+caches, these operations can also easily *reduce* your program's performance
+when used inappropriately.
+
+Non-temporal memory operations may also have relaxed memory ordering guarantees
----------------
RalfJung wrote:

"relaxed" is a term for a specific memory ordering guarantee in the C++ memory 
model. It may be better to avoid this term here, or if it cannot easily be 
avoided to at least clarify that this word is used in its general English 
meaning, not in the C++ sense.

https://github.com/llvm/llvm-project/pull/178264
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to