An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction...
Transcript of An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction...
![Page 1: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/1.jpg)
AMD COMPILER GROUPSPEAKER: DIBYENDU DAS
An Introduction to AMD Optimizing C/C++ Compiler
2018 European LLVM Developers Meeting
![Page 2: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/2.jpg)
2 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
AMD Optimizing C/C++ Compiler (“AOCC”) overview
Optimizations
Results
‒ SPEC CPU® 2017 Rate‒ More information about SPEC CPU2017 available at www.spec.org
Conclusion
OVERVIEW OF TALK
![Page 3: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/3.jpg)
3 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
AOCC Overview
![Page 4: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/4.jpg)
4 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
AOCC is AMD’s Optimizing C/C++ (and Fortran using DragonEgg/Flang) compiler based on LLVM
First version released mid-2017
Targeted for AMD’s Zen and future processors
Multiple release every year based on latest LLVM releases
WHAT IS AOCC ?
![Page 5: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/5.jpg)
5 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
OPTIMIZATIONS IN AOCC Many optimizations – in this talk, we cover the following
‒ Vectorization‒Strided‒Epilog‒SAD, AVG‒SLP (jumbled memory)
‒ Data layout optimization‒ Array remapping‒ AOS -> SOA
‒ Loop optimizations‒Loop-versioned LICM‒Path-invariance based loop un-switching‒Improved loop strength reduction
‒ Generic scalar optimizations‒Recursion inlining‒Dynamic cast removal
‒ LLC optimizations‒znver1 scheduler model
![Page 6: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/6.jpg)
6 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
AOCCVectorization
![Page 7: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/7.jpg)
7 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
LOOP VECTORIZATION – SAD GENERATION
Generation of SAD (Sum of Absolute Difference) instruction
Modified both the loop vectorizer and the SLP vectorizer
Inner loop of x264_pixel_sad_8x8() in pixel.c
for( int x = 0; x < lx; x++ )
{
i_sum += abs( pix1[x] - pix2[x] );
}
(lx=8, pix1 and pix2 are uint8 pointers and i_sum is of type ‘int’)
movq (%rdi),%xmm3
movq (%rdx),%xmm1
psadbw %xmm1,%xmm3
http://lists.llvm.org/pipermail/llvm-dev/2015-February/081561.html
![Page 8: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/8.jpg)
8 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
EPILOG LOOP VECTORIZATION
Currently Loop Vectorizer inserts an epilogue loop for handling loops that are not multiples of the ‘vector factor(VF)’‒Executed as scalar code
Epilog vectorization aims to vectorize epilog loop where original loop is vectorized with large vector factor‒Ex: for VF=16, you may have up to 15 iterations in the epilog‒Try to vectorize that using a lower VF=8 or VF=4
http://llvm.1065342.n5.nabble.com/llvm-dev-Proposal-RFC-Epilog-loop-vectorization-td106322.html
![Page 9: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/9.jpg)
9 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
STRIDED VECTORIZATION
Compilers may fail to vectorize loops with strided accesses
Vectorization of strided data may incur‒ An overhead of ‘consolidating’ data into an operable vector, refer Figure (a)
‒ An overhead of ‘distributing’ the data elements after the operations - refer Figure (b).
Designed improved strided vectorization‒ Uses ‘skip factor’
a b c d
a b c d
Figure (a) : Example with stride 2 - loading data into an operable vector
p q r s
p q r s
Figure (b) : Example with stride 2 - storing data to strided memory
for (int i = 0; i < len; i++)a[i*2] = b[i*2] + c[i*3];
![Page 10: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/10.jpg)
10 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
STRIDED VECTORIZATION - MEMORY SKIPPING
Skip factor helps to minimize the number of loads and stores‒ Example: for stride = 3 and VF = 4, generally 3 loads are required‒ But by skipping memory locations we can do with 2 loads
Load with stride 3 (i.e. load for b [ 3 * i ])%5 = getelementptr inbounds i32, i32* %b, i64 %.induction
%6 = bitcast i32* %5 to <4 x i32>*
%stride.load27 = load <4 x i32>, <4 x i32>* %6, align 1
%7 = getelementptr i32, i32* %5, i64 6
%8 = bitcast i32* %7 to <4 x i32>*
%stride.load28 = load <4 x i32>, <4 x i32>* %8, align 1
%strided.vec29 = shufflevector <4 x i32> %stride.load27, <4 x i32> %stride.load28, <4 x i32> <i32 0, i32 3, i32 4, i32 7>
0 1 2 3 4 5 6 7 8 9 10 11
Load#1 Load#2 Load#3
Note: Next GEP offset by 6, from
previous load
http://llvm.1065342.n5.nabble.com/llvm-dev-Proposal-RFC-Strided-Memory-Access-Vectorization-td96860.html
![Page 11: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/11.jpg)
11 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
SLP VECTORIZATION
Non-Consecutive Accesses
Non-Isomorphic ALU Ops
Non-consecutive memory accesses add overheads in vectorization‒ Memory accesses may be jumbled ‒ As a group they access consecutive
memory locations though
Non-isomorphic operations such as ADD-SUB, MUL-SHIFT prevent exploitation of SIMD ALU ops
We cater to these scenarios‒Memory accesses are made consecutive‒ Increasing isomorphism
Submitted as a patch -https://reviews.llvm.org/D36130
![Page 12: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/12.jpg)
12 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
LOOP VECTORIZATION - VPAVGB
Generation of AVG (average) instruction
VPAVGB (VEX.128 encoded version)
![Page 13: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/13.jpg)
13 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
AOCCData Layout
![Page 14: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/14.jpg)
14 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
AOS -> SOA
struct { struct {
long a; arr_a [N];
float b; arr_b[N];
} arr[N]; } Ns;
main() {
...
for (i=0; i < N; i++)
... = Ns.arr_a[i];
...
for (i=0; i < N; i++)
... = Ns.arr_b[i];
…..
}
a a a a a a a a
b b b b b b b b
Less cache misses
a b a b a b a b
a b a b a b a b
New Layout
![Page 15: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/15.jpg)
15 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
ARRAY REMAPPING Transforms array accesses in a single dimensional array for better cache
utilization
Better cache utilization
void LBM_performStreamCollide(
LBM_Grid srcGrid, LBM_Grid dstGrid ) {
int i;
double ux, uy, uz, u2, rho;
for( i = 0; i < 20*1300000; i += N_CELL_ENTRIES ) {
if( TEST_FLAG_SWEEP( srcGrid, OBSTACLE )) {
dstGrid[0 + i] = srcGrid[0 + i];
dstGrid[-1998 + i] = srcGrid[1 + i];
dstGrid[2001 + i] = srcGrid[2 + i];
dstGrid[-16 + i] = srcGrid[3 + i];
dstGrid[23 + i] = srcGrid[4 + i];
dstGrid[-199994 + i] = srcGrid[5 + i];
dstGrid[200005 + i] = srcGrid[6 + i];
dstGrid[-2010 + i] = srcGrid[7 + i];
dstGrid[-1971 + i] = srcGrid[8 + i];
dstGrid[1988 + i] = srcGrid[9 + i];
dstGrid[2027 + i] = srcGrid[10 + i];
dstGrid[-201986 + i] = srcGrid[11 + i];
dstGrid[198013 + i] = srcGrid[12 + i];
dstGrid[-197988 + i] = srcGrid[13 + i];
dstGrid[202011 + i] = srcGrid[14 + i];
dstGrid[-200002 + i] = srcGrid[15 + i];
dstGrid[199997 + i] = srcGrid[16 + i];
dstGrid[-199964 + i] = srcGrid[17 + i];
dstGrid[200035 + i] = srcGrid[18 + i];
continue;
}
…
iteration 0
iteration 1
iteration n-1
iteration 0
iteration 1
iteration n-1
field_1field_2field_3
…field_mfield_1field_2field_3
…field_m
…field_1field_2field_3
…field_m
field_1field_1field_1
…field_1field_2field_2field_2
…field_2
…field_mfield_mfield_m
…field_m
a[0]a[1]a[2]
…a[m-1]a[m]
a[m+1]a[m+2]
…a[2m-1]
…a[(n-1)m]
a[(n-1)m+1]a[(n-1)m+2]
…a[nm-1]
a[0]a[1]a[2]
…a[n-1]a[n]
a[n+1]a[n+2]
…a[2n-1]
…a[(m-1)n]
a[(m-1)n+1]a[(m-1)n+2]
…a[mn-1]
iteration 0iteration 1
iteration n-1
a[i] becomes a[(i%m)*n+(i/m)]
![Page 16: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/16.jpg)
16 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
AOCCLoop Optimization
![Page 17: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/17.jpg)
17 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
LOOP VERSIONING LICM
Aliasing decisions are made at runtime
Creates two versions of the loop
‒ One with aggressive aliasing assumptions
‒ The original loop with conservative aliasing assumptions
These two loops are preceded by a memory runtime check [upstreamed]
LICM
![Page 18: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/18.jpg)
18 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
PARTIAL LOOP UNSWITCH Identifies partial-invariant condition for a path
Moves the conditional from inside the loop to outside of it by duplicating the loop's body
Places a loop version inside each of the if and else clauses of the conditional
The variant path has the full loop with all conditions
The partially invariant path has the improved version
![Page 19: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/19.jpg)
19 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
OTHER LOOP OPTIMIZATIONS
Improved induction variable life time splitting
Improved loop strength reduction (LSR) in nested loop
![Page 20: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/20.jpg)
20 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
Scalar Optimizations
![Page 21: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/21.jpg)
21 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
DYNAMIC CAST OPTIMIZATION
A dynamic cast test in C++ is converted into a typeid comparisonwhen the cast involves a leaf class in the inheritance graph
if (dynamic_cast<EtherPauseFrame*>(frame)!=NULL)
{
…
}
This is transformed into:
If (typeid(*frame) == typeid(EtherPauseFrame *))
{
…
}
![Page 22: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/22.jpg)
22 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
Enables the inlining of recursive function
Works up to a certain depth by generating function clones
RECURSION INLINING
![Page 23: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/23.jpg)
23 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
LLC Optimizations
![Page 24: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/24.jpg)
24 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
LLC OPTS
Register Pressure-aware LICM
Redundant Load/Store and MOV Elimination
Branch Fusion: Re-order code to place CMP and TEST instructions immediately preceding BRANCH instructions
Promote constant to register:Replace ADD R1 ← R2, k (where k is a constant) withMOV R3 ← k and ADD R1 ← R2, R3
Shorter instruction encoding
Reduced instruction path length
Enable hardware micro-op fusion
znver1 Scheduler Model
![Page 25: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/25.jpg)
25 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
ZNVER1 SCHEDULER MODEL
Zen scheduler model is added for sub-target named "znver1"
File: …/lib/Target/X86/X86ScheduleZnver1.td
Covers all Zen supported ISAs. Instructions are grouped as per their nature(Integer, FP, Move, Arithmetic, Logic, Control Transfer)
Exhaustive model that covers both integer and floating point execution units
‒ Covers latencies and micro-op details of all modeled instructions
Microcoded instructions are marked as WriteMicrocoded with high latency
Upstreamed
![Page 26: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/26.jpg)
26 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
AOCCResults
![Page 27: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/27.jpg)
27 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
25
6
24
2
33
4
16
0
25
7
66
7
28
7
28
2
65
2
21
5
30
3
23
6
19
4
33
4
15
4
24
5
60
0
30
3
26
1
57
1
17
3
27
731
1
29
6 33
4
16
0
34
0
70
0
28
5
28
5
65
2
21
5
32
5
24
1 26
0
34
8
16
1
32
6
68
2
30
5
27
1
57
3
18
8
30
5
Rat
io
xeon 8180 base epyc 7601 base xeon 8180 peak epyc 7601 peak
SPEC CPU® 2017 Rate (INT)EPYC™ 7601 VS XEON PLATINUM 8180
EPYC 7601(Supermicro) + AOCC 1.0
XEON 8180(Asus) + icc 18.0.0.128 https://www.spec.org/cpu2017/results/res2018q1/cpu2017-20180108-02536.html
https://www.spec.org/cpu2017/results/res2018q1/cpu2017-20180121-02623.html
![Page 28: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/28.jpg)
28 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
48
8
25
3 26
6
12
6
43
2
12
0
22
0
34
5
29
8
52
7
46
4
15
0
94
25
2
59
1
29
2
23
8
14
5
30
2
15
3
28
2
32
8
27
0
45
0
38
5
18
9
96
25
7
48
8
25
2 26
7
12
6
50
4
12
1
22
0
34
7
30
1
52
6
47
2
15
0
97
25
7
61
1
29
6
27
6
18
1
33
4
15
4
28
4
33
6
27
8
46
9
39
4
19
1
12
1
27
5
Rat
io
xeon 8180 base epyc 7601 base xeon 8180 peak epyc 7601 peak
https://www.spec.org/cpu2017/results/res2018q1/cpu2017-20180108-02537.html
https://www.spec.org/cpu2017/results/res2018q1/cpu2017-20180121-02625.html
EPYC 7601 (Supermicro) + AOCC 1.0
XEON 8180 (Asus) + icc 18.0.0.128
SPEC CPU® 2017 Rate (FP)EPYC™ 7601 VS XEON PLATINUM 8180
![Page 29: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/29.jpg)
29 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
PHORONIX
https://www.phoronix.com/scan.php?page=article&item=amd-aocc-11&num=1
AMD AOCC 1.1 Shows Compiler Improvements vs. GCC vs. Clang
(Jan, 2018)
![Page 30: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/30.jpg)
30 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
AOCCResources
![Page 31: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/31.jpg)
31 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
AOCC WEB PAGE (developer.amd.com)
https://developer.amd.com/amd-aocc/
We have released AOCC 1.1 and will release AOCC 1.2 aligned with
LLVM 6.0 very soon
![Page 32: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/32.jpg)
32 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
Conclusion
![Page 33: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/33.jpg)
33 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
CONCLUSION
We have demonstrated a powerful optimizing compiler built on top of the latest LLVM
Introduced many optimizations in opt and llc‒Some of them upstreamed already
We want to upstream more aggressively
A BIG THANK YOU to the entire community for making this possible
![Page 34: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/34.jpg)
34 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
ACKNOWLEDGEMENTS Abhilash Bhandari Anupama Rasale Ashutosh Nema Bala Rishi Bhogadi Bhargav Reddy Godala Deepak Porwal Deepali Rai Ganesh Gopalasubramanian Ganesh Prasad Md Asghar Ahmad Shahid Muthu Kumar Raj Nagarajan Nagajyothi Eggone Pradeep Rao Pratap Gadi Prathiba Kumar Pratik Dayanand Bhatu Rajasekhar Venkata Bhetala Ravindra Venkata Durgi Santosh Zanjurne Satish Kumar Narayanaswamy Shivarama Rao Suresh Mani Venkataramanan Kumar Venugopal Raghavan Vishwanath Prasad Sunil Anthony Jay Hiremath
![Page 35: An Introduction to AMD Optimizing C/C++ Compilerllvm.org/devmtg/2018-04/slides/Das-An Introduction to AMD... · AMD COMPILER GROUP SPEAKER: DIBYENDU DAS An Introduction to AMD Optimizing](https://reader030.fdocuments.in/reader030/viewer/2022013110/5bfc633f09d3f2740f8b6946/html5/thumbnails/35.jpg)
35 | 2018 EUROPEAN LLVM DEVELOPERS MEETING
DISCLAIMER & ATTRIBUTION
The information presented in this document is for informational purposes only and may contain technical inaccuracies, omissions and typographical errors.
The information contained herein is subject to change and may be rendered inaccurate for many reasons, including but not limited to product and roadmap changes, component and motherboard version changes, new model and/or product releases, product differences between differing manufacturers, software changes, BIOS flashes, firmware upgrades, or the like. AMD assumes no obligation to update or otherwise correct or revise this information. However, AMD reserves the right to revise this information and to make changes from time to time to the content hereof without obligation of AMD to notify any person of such revisions or changes.
AMD MAKES NO REPRESENTATIONS OR WARRANTIES WITH RESPECT TO THE CONTENTS HEREOF AND ASSUMES NO RESPONSIBILITY FOR ANY INACCURACIES, ERRORS OR OMISSIONS THAT MAY APPEAR IN THIS INFORMATION.
AMD SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE. IN NO EVENT WILL AMD BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL OR OTHER CONSEQUENTIAL DAMAGES ARISING FROM THE USE OF ANY INFORMATION CONTAINED HEREIN, EVEN IF AMD IS EXPRESSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
ATTRIBUTION
© 2018 Advanced Micro Devices, Inc. All rights reserved. AMD, the AMD Arrow logo and combinations thereof are trademarks of Advanced Micro Devices, Inc. in the United States and/or other jurisdictions. Other names are for informational purposes only and may be trademarks of their respective owners.