Jenkinsfile 5.99 KB
Newer Older
Paul's avatar
Paul committed
1

2
3
4
5
6
7
8
9
// def rocmtestnode(variant, name, body, args, pre) {
def rocmtestnode(Map conf) {
    def variant = conf.get("variant")
    def name = conf.get("node")
    def body = conf.get("body")
    def docker_args = conf.get("docker_args", "")
    def docker_build_args = conf.get("docker_build_args", "")
    def pre = conf.get("pre", {})
Paul Fultz II's avatar
Paul Fultz II committed
10
    def ccache = "/var/jenkins/.cache/ccache"
Paul's avatar
Paul committed
11
    def image = 'migraphxlib'
Paul Fultz II's avatar
Paul Fultz II committed
12
13
    env.CCACHE_COMPRESSLEVEL = 7
    env.CCACHE_DIR = ccache
Paul Fultz II's avatar
Paul Fultz II committed
14
15
16
17
    def cmake_build = { bconf ->
        def compiler = bconf.get("compiler", "/opt/rocm/llvm/bin/clang++")
        def flags = bconf.get("flags", "")
        def gpu_debug = bconf.get("gpu_debug", "0")
Umang Yadav's avatar
Umang Yadav committed
18
        def hiprtc_workarounds = bconf.get("hiprtc_workarounds", "0")
Paul's avatar
Paul committed
19
        def cmd = """
Paul's avatar
Paul committed
20
            ulimit -c unlimited
Paul's avatar
Paul committed
21
22
            echo "leak:dnnl::impl::malloc" > suppressions.txt
            export LSAN_OPTIONS="suppressions=\$(pwd)/suppressions.txt"
Paul Fultz II's avatar
Paul Fultz II committed
23
            export MIGRAPHX_GPU_DEBUG=${gpu_debug}
Umang Yadav's avatar
Umang Yadav committed
24
            export MIGRAPHX_ENABLE_HIPRTC_WORKAROUNDS=${hiprtc_workarounds}
Paul Fultz II's avatar
Paul Fultz II committed
25
26
27
            export CXX=${compiler}
            export CXXFLAGS='-Werror'
            env
Paul's avatar
Paul committed
28
29
30
            rm -rf build
            mkdir build
            cd build
31
            cmake -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DBUILD_DEV=On ${flags} ..
Paul's avatar
Paul committed
32
            make -j\$(nproc) generate all doc package check VERBOSE=1
Chris Austen's avatar
Chris Austen committed
33
            md5sum ./*.deb
Paul's avatar
Paul committed
34
35
36
        """
        echo cmd
        sh cmd
Umang Yadav's avatar
Umang Yadav committed
37
38
39
        // Only archive from master or develop
        if (env.BRANCH_NAME == "develop" || env.BRANCH_NAME == "master") {
            archiveArtifacts artifacts: "build/*.deb", allowEmptyArchive: true, fingerprint: true
Paul's avatar
Paul committed
40
        }
Paul's avatar
Paul committed
41
42
    }
    node(name) {
43
        withEnv(['HSA_ENABLE_SDMA=0']) {
Paul's avatar
Paul committed
44
45
46
            stage("checkout ${variant}") {
                checkout scm
            }
Paul's avatar
Paul committed
47
            gitStatusWrapper(credentialsId: "${env.status_wrapper_creds}", gitHubContext: "Jenkins - ${variant}", account: 'ROCmSoftwarePlatform', repo: 'AMDMIGraphX') {
Paul's avatar
Paul committed
48
49
50
51
52
53
                pre()
                stage("image ${variant}") {
                    try {
                        docker.build("${image}", "${docker_build_args} .")
                    } catch(Exception ex) {
                        docker.build("${image}", "${docker_build_args} --no-cache .")
Paul's avatar
Paul committed
54

Paul's avatar
Paul committed
55
                    }
Paul's avatar
Paul committed
56
                }
Paul Fultz II's avatar
Paul Fultz II committed
57
                withDockerContainer(image: image, args: "--device=/dev/kfd --device=/dev/dri --group-add video --cap-add SYS_PTRACE -v=/var/jenkins/:/var/jenkins ${docker_args}") {
58
                    timeout(time: 2, unit: 'HOURS') {
Paul's avatar
Paul committed
59
60
                        body(cmake_build)
                    }
Paul's avatar
Paul committed
61
                }
Paul's avatar
Paul committed
62
63
64
65
66
67
            }
        }
    }
}
def rocmtest(m) {
    def builders = [:]
Paul Fultz II's avatar
Paul Fultz II committed
68
    m.each { e ->
Paul's avatar
Paul committed
69
70
71
72
73
74
75
76
77
        def label = e.key;
        def action = e.value;
        builders[label] = {
            action(label)
        }
    }
    parallel builders
}

78
def rocmnodename(name) {
Paul's avatar
Paul committed
79
80
81
82
83
84
    def rocmtest_name = "(rocmtest || migraphx)"
    def node_name = "${rocmtest_name}"
    if(name == "fiji") {
        node_name = "${rocmtest_name} && fiji";
    } else if(name == "vega") {
        node_name = "${rocmtest_name} && vega";
85
86
    } else if(name == "navi21") {
        node_name = "${rocmtest_name} && navi21";
Paul's avatar
Paul committed
87
88
    } else if(name == "nogpu") {
        return rocmtest_name;
Paul's avatar
Paul committed
89
    }
90
    return node_name
Paul's avatar
Paul committed
91
92
}

Paul Fultz II's avatar
Paul Fultz II committed
93
def rocmnode(name, body) {
94
95
96
    return { label ->
        rocmtestnode(variant: label, node: rocmnodename(name), body: body)
    }
Paul Fultz II's avatar
Paul Fultz II committed
97
98
}

Paul Fultz II's avatar
Paul Fultz II committed
99
100
rocmtest clang_debug: rocmnode('vega') { cmake_build ->
    stage('Hip Clang Debug') {
101
102
        def sanitizers = "undefined"
        def debug_flags = "-g -O2 -fsanitize=${sanitizers} -fno-sanitize-recover=${sanitizers}"
Paul Fultz II's avatar
Paul Fultz II committed
103
104
105
106
107
        cmake_build(flags: "-DCMAKE_BUILD_TYPE=debug -DMIGRAPHX_ENABLE_PYTHON=Off -DCMAKE_CXX_FLAGS_DEBUG='${debug_flags}' -DCMAKE_C_FLAGS_DEBUG='${debug_flags}'")
    }
}, clang_gpu_debug: rocmnode('vega') { cmake_build ->
    stage('Hip Clang GPU Debug') {
        cmake_build(flags: "-DCMAKE_BUILD_TYPE=release", gpu_debug: true)
Paul's avatar
Paul committed
108
    }
Paul's avatar
Paul committed
109
}, clang_release: rocmnode('vega') { cmake_build ->
110
    stage('Hip Clang Release') {
Paul Fultz II's avatar
Paul Fultz II committed
111
        cmake_build(flags: "-DCMAKE_BUILD_TYPE=release")
Paul Fultz II's avatar
Paul Fultz II committed
112
        stash includes: 'build/*.deb', name: 'migraphx-package'
Paul's avatar
Paul committed
113
    }
Umang Yadav's avatar
Umang Yadav committed
114
115
116
117
}, hiprtc_gpu_debug: rocmnode('vega') { cmake_build ->
    stage('HipRTC GPU Debug') {
        cmake_build(flags: "-DCMAKE_BUILD_TYPE=release -DMIGRAPHX_USE_HIPRTC=On", gpu_debug: true, hiprtc_workarounds:  true)
    }
118
119
}, mlir_debug: rocmnode('vega') { cmake_build ->
    stage('MLIR Debug') {
120
121
122
123
124
        withEnv(['MIGRAPHX_ENABLE_MLIR=1']) {
            def sanitizers = "undefined"
            def debug_flags = "-g -O2 -fsanitize=${sanitizers} -fno-sanitize-recover=${sanitizers}"
            cmake_build(flags: "-DCMAKE_BUILD_TYPE=debug -DMIGRAPHX_ENABLE_PYTHON=Off -DMIGRAPHX_ENABLE_MLIR=On -DCMAKE_CXX_FLAGS_DEBUG='${debug_flags}' -DCMAKE_C_FLAGS_DEBUG='${debug_flags}'")
        }
125
    }
Paul's avatar
Paul committed
126
127
128
}, clang_asan: rocmnode('nogpu') { cmake_build ->
    stage('Clang ASAN') {
        def sanitizers = "undefined,address"
Paul's avatar
Paul committed
129
        def debug_flags = "-g -O2 -fno-omit-frame-pointer -fsanitize=${sanitizers} -fno-sanitize-recover=${sanitizers}"
Paul Fultz II's avatar
Paul Fultz II committed
130
        cmake_build(flags: "-DCMAKE_BUILD_TYPE=debug -DMIGRAPHX_ENABLE_PYTHON=Off -DMIGRAPHX_ENABLE_GPU=Off -DMIGRAPHX_ENABLE_CPU=On -DCMAKE_CXX_FLAGS_DEBUG='${debug_flags}' -DCMAKE_C_FLAGS_DEBUG='${debug_flags}'")
Paul's avatar
Paul committed
131
    }
Ted Themistokleous's avatar
Ted Themistokleous committed
132
}, clang_release_navi: rocmnode('navi32') { cmake_build ->
Ted Themistokleous's avatar
Ted Themistokleous committed
133
134
135
136
137
138
    stage('HIP Clang Release Navi32') {
        cmake_build(flags: "-DCMAKE_BUILD_TYPE=release")
    }
}


Paul Fultz II's avatar
Paul Fultz II committed
139

140
141
142
143
def onnxnode(name, body) {
    return { label ->
        rocmtestnode(variant: label, node: rocmnodename(name), docker_args: '-u root', body: body, pre: {
            sh 'rm -rf ./build/*.deb'
144
            unstash 'migraphx-package'
145
146
147
148
149
        })
    }
}

rocmtest onnx: onnxnode('rocmtest') { cmake_build ->
Paul Fultz II's avatar
Paul Fultz II committed
150
151
    stage("Onnx runtime") {
        sh '''
152
            apt install half
Chris Austen's avatar
Chris Austen committed
153
154
            #ls -lR
            md5sum ./build/*.deb
155
            dpkg -i ./build/*.deb
Paul Fultz II's avatar
Paul Fultz II committed
156
157
158
159
            cd /onnxruntime && ./build_and_test_onnxrt.sh
        '''
    }
}