util: Install python six module in gcn dockerfile
[gem5.git] / util / dockerfiles / gcn-gpu / Dockerfile
1 FROM ubuntu:16.04
2
3 # Should be minimal needed packages
4 RUN apt-get update && apt-get install -y --no-install-recommends \
5 findutils \
6 file \
7 libunwind8 \
8 libunwind-dev \
9 pkg-config \
10 build-essential \
11 gcc-multilib \
12 g++-multilib \
13 git \
14 ca-certificates \
15 m4 \
16 scons \
17 zlib1g \
18 zlib1g-dev \
19 libprotobuf-dev \
20 protobuf-compiler \
21 libprotoc-dev \
22 libgoogle-perftools-dev \
23 python-dev \
24 python \
25 python-yaml \
26 python-six \
27 wget \
28 libpci3 \
29 libelf1 \
30 libelf-dev \
31 cmake \
32 openssl \
33 libssl-dev \
34 libboost-filesystem-dev \
35 libboost-system-dev \
36 libboost-dev
37
38 ARG gem5_dist=http://dist.gem5.org/dist/develop
39
40 # Install ROCm 1.6 binaries
41 RUN wget -qO- ${gem5_dist}/apt_1.6.2.tar.bz2 \
42 | tar -xjv \
43 && cd apt_1.6.2/pool/main/ \
44 && dpkg -i h/hsakmt-roct-dev/* \
45 && dpkg -i h/hsa-ext-rocr-dev/* \
46 && dpkg -i h/hsa-rocr-dev/* \
47 && dpkg -i r/rocm-utils/* \
48 && dpkg -i h/hcc/* \
49 && dpkg -i r/rocm-opencl/* \
50 && dpkg -i r/rocm-opencl-dev/*
51
52 # Get ROCm libraries we need to compile from source (and ROCm-profiler)
53 RUN git clone --single-branch https://github.com/ROCm-Developer-Tools/HIP/ && \
54 git clone --single-branch https://github.com/ROCmSoftwarePlatform/hipBLAS/ && \
55 git clone --single-branch https://github.com/ROCmSoftwarePlatform/rocBLAS/ && \
56 git clone --single-branch https://github.com/ROCmSoftwarePlatform/MIOpenGEMM/ && \
57 git clone --single-branch https://github.com/ROCmSoftwarePlatform/MIOpen/ && \
58 git clone --single-branch https://github.com/RadeonOpenCompute/rocm-cmake/ && \
59 git clone --single-branch https://github.com/rocmarchive/ROCm-Profiler.git
60
61 # Apply patches to various repos
62 RUN mkdir -p /patch && cd /patch && \
63 wget ${gem5_dist}/rocm_patches/hipBLAS.patch && \
64 wget ${gem5_dist}/rocm_patches/hip.patch_v2 && \
65 wget ${gem5_dist}/rocm_patches/miopen-conv.patch && \
66 wget ${gem5_dist}/rocm_patches/rocBLAS.patch
67
68 RUN git -C /HIP/ checkout 0e3d824e && git -C /HIP/ apply /patch/hip.patch_v2 && \
69 git -C /hipBLAS/ checkout ee57787e && git -C /hipBLAS/ apply /patch/hipBLAS.patch && \
70 git -C /rocBLAS/ checkout cbff4b4e && git -C /rocBLAS/ apply /patch/rocBLAS.patch && \
71 git -C /MIOpenGEMM/ checkout 9547fb9e && \
72 git -C /MIOpen/ checkout 01d6ca55c && git -C /MIOpen/ apply /patch/miopen-conv.patch
73
74 ENV ROCM_PATH /opt/rocm
75 ENV HCC_HOME ${ROCM_PATH}/hcc
76 ENV HSA_PATH ${ROCM_PATH}/hsa
77 ENV HIP_PATH ${ROCM_PATH}/hip
78 ENV HIP_PLATFORM hcc
79 ENV PATH ${ROCM_PATH}/bin:${HCC_HOME}/bin:${HSA_PATH}/bin:${HIP_PATH}/bin:${PATH}
80 ENV HCC_AMDGPU_TARGET gfx801
81
82 # Create build dirs for machine learning ROCm installs
83 RUN mkdir -p /HIP/build && \
84 mkdir -p /rocBLAS/build && \
85 mkdir -p /hipBLAS/build && \
86 mkdir -p /rocm-cmake/build && \
87 mkdir -p /MIOpenGEMM/build && \
88 mkdir -p /MIOpen/build
89
90 # Do the builds, empty build dir to trim image size
91 WORKDIR /HIP/build
92 RUN cmake .. && make -j$(nproc) && make install && rm -rf *
93
94 WORKDIR /rocBLAS/build
95 RUN CXX=/opt/rocm/bin/hcc cmake -DCMAKE_CXX_FLAGS="--amdgpu-target=gfx801" .. && \
96 make -j$(nproc) && make install && rm -rf *
97
98 WORKDIR /hipBLAS/build
99 RUN CXX=/opt/rocm/bin/hcc cmake -DCMAKE_CXX_FLAGS="--amdgpu-target=gfx801" .. && \
100 make -j$(nproc) && make install && rm -rf *
101
102 WORKDIR /rocm-cmake/build
103 RUN cmake .. && cmake --build . --target install && rm -rf *
104
105 WORKDIR /MIOpenGEMM/build
106 RUN cmake .. && make miopengemm && make install && rm -rf *
107
108 # Should link this in as a volume if at all possible
109 RUN mkdir -p /.cache/miopen && chmod 777 /.cache/miopen
110
111 # Un-set default c++ version for MIOpen compilation
112 # As MIOpen 1.7 requires c++14 or higher
113 RUN sed -i 's/INTERFACE_COMPILE_OPTIONS "-std=c++amp;-fPIC;-gline-tables-only"/#&/' /opt/rocm/hcc-1.0/lib/cmake/hcc/hcc-targets.cmake && \
114 sed -i 's/INTERFACE_COMPILE_OPTIONS "-hc"/#&/' /opt/rocm/hcc-1.0/lib/cmake/hcc/hcc-targets.cmake
115
116 WORKDIR /MIOpen
117 # Half is required; This is the version that MIOpen would download
118 RUN wget https://github.com/pfultz2/half/archive/1.12.0.tar.gz && \
119 tar -xzf 1.12.0.tar.gz
120
121 WORKDIR /MIOpen/build
122 RUN CXX=/opt/rocm/hcc/bin/hcc cmake \
123 -DCMAKE_BUILD_TYPE=Debug \
124 -DCMAKE_INSTALL_PREFIX=/opt/rocm \
125 -DMIOPEN_BACKEND=HIP \
126 -DCMAKE_PREFIX_PATH="/opt/rocm/hip;/opt/rocm/hcc;/opt/rocm/rocdl;/opt/rocm/miopengemm;/opt/rocm/hsa" \
127 -DMIOPEN_CACHE_DIR=/.cache/miopen \
128 -DMIOPEN_AMDGCN_ASSEMBLER_PATH=/opt/rocm/opencl/bin \
129 -DHALF_INCLUDE_DIR=/MIOpen/half-1.12.0/include \
130 -DCMAKE_CXX_FLAGS="-isystem /usr/include/x86_64-linux-gnu" .. && \
131 make -j$(nproc) && make install && rm -rf *
132
133 # Re-set defaults
134 RUN sed -i 's/#\(INTERFACE_COMPILE_OPTIONS "-std=c++amp;-fPIC;-gline-tables-only"\)/\1/' /opt/rocm/hcc-1.0/lib/cmake/hcc/hcc-targets.cmake && \
135 sed -i 's/#\(INTERFACE_COMPILE_OPTIONS "-hc"\)/\1/' /opt/rocm/hcc-1.0/lib/cmake/hcc/hcc-targets.cmake
136
137 # Create performance DB for gfx801.
138 WORKDIR /opt/rocm/miopen/share/miopen/db
139 RUN cp gfx803_64.cd.pdb.txt gfx801_4.cd.pdb.txt && \
140 cp gfx803_64.cd.pdb.txt gfx801_8.cd.pdb.txt && \
141 cp gfx803_64.cd.pdb.txt gfx801_16.cd.pdb.txt && \
142 cp gfx803_64.cd.pdb.txt gfx801_32.cd.pdb.txt && \
143 cp gfx803_64.cd.pdb.txt gfx801_64.cd.pdb.txt
144
145 # Install profiler from .deb file, works for 1.6.2
146 WORKDIR /ROCm-Profiler
147 RUN dpkg -i package/rocm-profiler_4.0.6036_amd64.deb
148
149 WORKDIR /