[llvm-commits] [llvm] r171445 - /llvm/trunk/docs/Vectorizers.rst

Nadav Rotem nrotem at apple.com
Wed Jan 2 17:47:03 PST 2013


Author: nadav
Date: Wed Jan  2 19:47:02 2013
New Revision: 171445

URL: http://llvm.org/viewvc/llvm-project?rev=171445&view=rev
Log:
LoopVectorizer: Document the unrolling feature.

Modified:
    llvm/trunk/docs/Vectorizers.rst

Modified: llvm/trunk/docs/Vectorizers.rst
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/docs/Vectorizers.rst?rev=171445&r1=171444&r2=171445&view=diff
==============================================================================
--- llvm/trunk/docs/Vectorizers.rst (original)
+++ llvm/trunk/docs/Vectorizers.rst Wed Jan  2 19:47:02 2013
@@ -159,8 +159,8 @@
 Scatter / Gather
 ^^^^^^^^^^^^^^^^
 
-The Loop Vectorizer can vectorize code that becomes scatter/gather
-memory accesses.
+The Loop Vectorizer can vectorize code that becomes a sequence of scalar instructions 
+that scatter/gathers memory.
 
 .. code-block:: c++
 
@@ -203,6 +203,38 @@
 |     |     | fmuladd |
 +-----+-----+---------+
 
+
+Partial unrolling during vectorization
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Modern processors feature multiple execution units, and only programs that contain a
+high degree of parallelism can fully utilize the entire width of the machine.
+
+The Loop Vectorizer increases the instruction level parallelism (ILP) by 
+performing partial-unrolling of loops.
+
+In the example below the entire array is accumulated into the variable 'sum'.
+This is inefficient because only a single 'adder' can be used by the processor.
+By unrolling the code the Loop Vectorizer allows two or more execution ports
+to be used.
+
+.. code-block:: c++
+
+  int foo(int *A, int *B, int n) {
+    unsigned sum = 0;
+    for (int i = 0; i < n; ++i)
+        sum += A[i];
+    return sum;
+  }
+
+At the moment the unrolling feature is not enabled by default and needs to be enabled
+in opt or clang using the following flag:
+
+.. code-block:: console
+
+  -force-vector-unroll=2 
+
+
 Performance
 -----------
 





More information about the llvm-commits mailing list