Skip to content
This repository was archived by the owner on Mar 20, 2023. It is now read-only.

Commit dfc6db4

Browse files
committed
Created Jenkins pipeline for CoreNeuron
- Uses Jenkinsfile found in /tests/jenkins - Builds AoS and SoA configuration of CoreNeuron - Tests simple ringtest with both of them - Clones master branch of https://github.com/pramodk/testcorenrn to load more tests - Uses scripts found in /tests/jenkins directory to run all tests - Added option to run unit and ring tests on GPUs if ENABLE_OPENACC is set - Added pipeline stage for building CoreNeuron for GPU - Added Jenkins pipeline stage for running built-in unit and ring tests in GPU - Clones ringtest repository and runs ringtest with larger number of cells, to utilize more threads - OpenMP is disabled in AoS build and enabled in SoA build - SoA tests of testcorenrn use 1 OpenMP thread due to issue #154
1 parent 9be1bd7 commit dfc6db4

File tree

9 files changed

+455
-20
lines changed

9 files changed

+455
-20
lines changed

coreneuron/CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,10 @@ set_property(TARGET coreneuron PROPERTY POSITION_INDEPENDENT_CODE ON)
324324

325325
# Extract link defs to the whole project
326326
get_target_property(CORENRN_LINK_LIBS coreneuron LINK_LIBRARIES)
327-
set(CORENRN_LINK_LIBS ${CORENRN_LINK_LIBS} PARENT_SCOPE)
327+
if(NOT CORENRN_LINK_LIBS)
328+
set(CORENRN_LINK_LIBS "")
329+
endif()
330+
set(CORENRN_LINK_LIBS "${CORENRN_LINK_LIBS}" PARENT_SCOPE)
328331

329332
# Share built-in OPTIONAL MODS also with rest of project
330333
set(CORENRN_OPTMECH_MODS "${MOD2C_OPTMECH_MODS}" PARENT_SCOPE)

tests/integration/CMakeLists.txt

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,30 +29,28 @@ set(COMMON_ARGS "--tstop 100. --celsius 6.3 -mpi")
2929
set(RING_DATASET_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ring")
3030
set(RING_COMMON_ARGS "--datpath ${RING_DATASET_DIR} ${COMMON_ARGS}")
3131
set(RING_GAP_COMMON_ARGS "--datpath ${CMAKE_CURRENT_SOURCE_DIR}/ring_gap ${COMMON_ARGS}")
32+
set(PERMUTE1_ARGS "--cell-permute 1 --nwarp 8")
33+
set(PERMUTE2_ARGS "--cell-permute 2 --nwarp 16")
3234
if(ENABLE_OPENACC)
33-
set(PERMUTE1_ARGS "--cell-permute 1 --nwarp 8 --gpu")
34-
set(PERMUTE2_ARGS "--cell-permute 2 --nwarp 16 --gpu")
35-
else(ENABLE_OPENACC)
36-
set(PERMUTE1_ARGS "--cell-permute 1 --nwarp 8")
37-
set(PERMUTE2_ARGS "--cell-permute 2 --nwarp 16")
35+
set(GPU_ARGS "--nwarp 8 --gpu")
3836
endif()
3937

4038
# List of tests with arguments
4139
set(TEST_CASE_ARGS
42-
"ring!${RING_COMMON_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring"
43-
"ring_binqueue!${RING_COMMON_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_binqueue --binqueue"
44-
"ring_multisend!${RING_COMMON_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_multisend --multisend"
45-
"ring_spike_buffer!${RING_COMMON_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_spike_buffer -b 1"
46-
"ring_duplicate!${RING_COMMON_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_duplicate -z 3"
47-
"ring_permute1!${RING_COMMON_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_permute1 ${PERMUTE1_ARGS}"
48-
"ring_permute2!${RING_COMMON_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_permute2 ${PERMUTE2_ARGS}"
49-
"ring_gap!${RING_GAP_COMMON_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_gap"
50-
"ring_gap_binqueue!${RING_GAP_COMMON_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_gap_binqueue --binqueue"
51-
"ring_gap_multisend!${RING_GAP_COMMON_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_gap_multisend --multisend"
52-
"ring_gap_permute1!${RING_GAP_COMMON_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_gap_permute1 ${PERMUTE1_ARGS}"
53-
"ring_gap_permute2!${RING_GAP_COMMON_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_gap_permute2 ${PERMUTE2_ARGS}")
54-
55-
set(NEGATIVE_TEST_CASE_ARGS "ring_different_seed!${RING_COMMON_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_different_seed --seed 123456")
40+
"ring!${RING_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring"
41+
"ring_binqueue!${RING_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_binqueue --binqueue"
42+
"ring_multisend!${RING_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_multisend --multisend"
43+
"ring_spike_buffer!${RING_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_spike_buffer -b 1"
44+
"ring_duplicate!${RING_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_duplicate -z 3"
45+
"ring_permute1!${RING_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_permute1 ${PERMUTE1_ARGS}"
46+
"ring_permute2!${RING_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_permute2 ${PERMUTE2_ARGS}"
47+
"ring_gap!${RING_GAP_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_gap"
48+
"ring_gap_binqueue!${RING_GAP_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_gap_binqueue --binqueue"
49+
"ring_gap_multisend!${RING_GAP_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_gap_multisend --multisend"
50+
"ring_gap_permute1!${RING_GAP_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_gap_permute1 ${PERMUTE1_ARGS}"
51+
"ring_gap_permute2!${RING_GAP_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_gap_permute2 ${PERMUTE2_ARGS}")
52+
53+
set(NEGATIVE_TEST_CASE_ARGS "ring_different_seed!${RING_COMMON_ARGS} ${GPU_ARGS} --outpath ${CMAKE_CURRENT_BINARY_DIR}/ring_different_seed --seed 123456")
5654

5755
# There are no directories for permute and multisend related tests, create them and copy ref spikes
5856
foreach(data_dir "ring" "ring_gap")
@@ -113,6 +111,7 @@ endif()
113111
elseif(${SUBTEST_NAME} MATCHES "spikereplay")
114112
set(TEST_ARGS "--datpath ${CMAKE_CURRENT_SOURCE_DIR}/${TEST_NAME} --outpath ${CMAKE_CURRENT_BINARY_DIR}/${SIM_NAME} --pattern ${CMAKE_CURRENT_SOURCE_DIR}/${SIM_NAME}/out.std --tstop 100. -mpi")
115113
endif()
114+
set(TEST_ARGS "${TEST_ARGS} ${GPU_ARGS}")
116115

117116
configure_file(integration_test.sh.in ${SIM_NAME}/integration_test.sh @ONLY)
118117

tests/jenkins/Jenkinsfile

Lines changed: 272 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,272 @@
1+
pipeline {
2+
agent {
3+
label 'bb5'
4+
}
5+
stages {
6+
7+
stage('build corenrn AoS'){
8+
steps {
9+
sh 'sh tests/jenkins/install.sh AoS'
10+
}
11+
}
12+
13+
stage('build corenrn SoA'){
14+
steps {
15+
sh 'sh tests/jenkins/install.sh SoA'
16+
}
17+
}
18+
19+
stage('build corenrn GPU'){
20+
steps {
21+
sh 'sh tests/jenkins/install.sh GPU'
22+
}
23+
}
24+
25+
stage('unit and ring tests'){
26+
parallel{
27+
stage('AoS'){
28+
steps{
29+
sh 'sh tests/jenkins/ringtest.sh AoS'
30+
}
31+
}
32+
stage('SoA'){
33+
steps{
34+
sh 'sh tests/jenkins/ringtest.sh SoA'
35+
}
36+
}
37+
stage('GPU'){
38+
steps{
39+
sh 'sh tests/jenkins/ringtest.sh GPU'
40+
}
41+
}
42+
}
43+
}
44+
45+
stage('checkout testcorenrn and ringtest'){
46+
steps{
47+
dir('testcorenrn'){
48+
git url: 'https://github.com/pramodk/testcorenrn.git'
49+
}
50+
dir('ringtest'){
51+
git url: 'https://github.com/nrnhines/ringtest.git'
52+
}
53+
}
54+
}
55+
56+
stage('nrnivmodl'){
57+
parallel{
58+
stage('nrnivmodl testcorenrn'){
59+
steps{
60+
sh 'sh tests/jenkins/nrnivmodl.sh testcorenrn'
61+
}
62+
}
63+
stage('nrnivmodl ringtest'){
64+
steps{
65+
sh 'sh tests/jenkins/nrnivmodl.sh ringtest'
66+
}
67+
}
68+
stage('nrnivmodl-core testcorenrn AoS'){
69+
steps{
70+
sh 'sh tests/jenkins/nrnivmodl-core.sh testcorenrn AoS'
71+
}
72+
}
73+
stage('nrnivmodl-core testcorenrn SoA'){
74+
steps{
75+
sh 'sh tests/jenkins/nrnivmodl-core.sh testcorenrn SoA'
76+
}
77+
}
78+
stage('nrnivmodl-core ringtest AoS'){
79+
steps{
80+
sh 'sh tests/jenkins/nrnivmodl-core.sh ringtest AoS'
81+
}
82+
}
83+
stage('nrnivmodl-core ringtest SoA'){
84+
steps{
85+
sh 'sh tests/jenkins/nrnivmodl-core.sh ringtest SoA'
86+
}
87+
}
88+
}
89+
}
90+
91+
stage('testcorenrn'){
92+
parallel{
93+
stage('deriv'){
94+
stages{
95+
stage('neuron'){
96+
steps{
97+
sh 'sh tests/jenkins/run_neuron.sh testcorenrn deriv 6'
98+
}
99+
}
100+
stage('corenrn AoS'){
101+
steps{
102+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn AoS deriv 6'
103+
}
104+
}
105+
stage('corenrn SoA'){
106+
steps{
107+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn SoA deriv 6'
108+
}
109+
}
110+
}
111+
}
112+
stage('gf'){
113+
stages{
114+
stage('neuron'){
115+
steps{
116+
sh 'sh tests/jenkins/run_neuron.sh testcorenrn gf 6'
117+
}
118+
}
119+
stage('corenrn AoS'){
120+
steps{
121+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn AoS gf 6'
122+
}
123+
}
124+
stage('corenrn SoA'){
125+
steps{
126+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn SoA gf 6'
127+
}
128+
}
129+
}
130+
}
131+
stage('kin'){
132+
stages{
133+
stage('neuron'){
134+
steps{
135+
sh 'sh tests/jenkins/run_neuron.sh testcorenrn kin 6'
136+
}
137+
}
138+
stage('corenrn AoS'){
139+
steps{
140+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn AoS kin 6'
141+
}
142+
}
143+
stage('corenrn SoA'){
144+
steps{
145+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn SoA kin 6'
146+
}
147+
}
148+
}
149+
}
150+
stage('conc'){
151+
stages{
152+
stage('neuron'){
153+
steps{
154+
sh 'sh tests/jenkins/run_neuron.sh testcorenrn conc 6'
155+
}
156+
}
157+
stage('corenrn AoS'){
158+
steps{
159+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn AoS conc 6'
160+
}
161+
}
162+
stage('corenrn SoA'){
163+
steps{
164+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn SoA conc 6'
165+
}
166+
}
167+
}
168+
}
169+
stage('watch'){
170+
stages{
171+
stage('neuron'){
172+
steps{
173+
sh 'sh tests/jenkins/run_neuron.sh testcorenrn watch 6'
174+
}
175+
}
176+
stage('corenrn AoS'){
177+
steps{
178+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn AoS watch 6'
179+
}
180+
}
181+
stage('corenrn SoA'){
182+
steps{
183+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn SoA watch 6'
184+
}
185+
}
186+
}
187+
}
188+
stage('bbcore'){
189+
stages{
190+
stage('neuron'){
191+
steps{
192+
sh 'sh tests/jenkins/run_neuron.sh testcorenrn bbcore 6'
193+
}
194+
}
195+
stage('corenrn AoS'){
196+
steps{
197+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn AoS bbcore 6'
198+
}
199+
}
200+
stage('corenrn SoA'){
201+
steps{
202+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn SoA bbcore 6'
203+
}
204+
}
205+
}
206+
}
207+
stage('vecplay'){
208+
stages{
209+
stage('neuron'){
210+
steps{
211+
sh 'sh tests/jenkins/run_neuron.sh testcorenrn vecplay 6'
212+
}
213+
}
214+
stage('corenrn AoS'){
215+
steps{
216+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn AoS vecplay 6'
217+
}
218+
}
219+
stage('corenrn SoA'){
220+
steps{
221+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn SoA vecplay 6'
222+
}
223+
}
224+
}
225+
}
226+
stage('patstim'){
227+
stages{
228+
stage('neuron'){
229+
steps{
230+
sh 'sh tests/jenkins/run_neuron.sh testcorenrn patstim 6'
231+
}
232+
}
233+
stage('corenrn AoS'){
234+
steps{
235+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn AoS patstim 6'
236+
}
237+
}
238+
stage('corenrn SoA'){
239+
steps{
240+
sh 'sh tests/jenkins/run_corenrn.sh testcorenrn SoA patstim 6'
241+
}
242+
}
243+
}
244+
}
245+
stage('ringtest parallel'){
246+
stages{
247+
stage('neuron'){
248+
steps{
249+
sh 'sh tests/jenkins/run_neuron.sh ringtest ringtest 6'
250+
}
251+
}
252+
stage('corenrn AoS'){
253+
steps{
254+
sh 'sh tests/jenkins/run_corenrn.sh ringtest AoS ringtest 6'
255+
}
256+
}
257+
stage('corenrn SoA 3 MPI Ranks'){
258+
steps{
259+
sh 'sh tests/jenkins/run_corenrn.sh ringtest SoA ringtest 3'
260+
}
261+
}
262+
stage('corenrn SoA 7 MPI Ranks'){
263+
steps{
264+
sh 'sh tests/jenkins/run_corenrn.sh ringtest SoA ringtest 7'
265+
}
266+
}
267+
}
268+
}
269+
}
270+
}
271+
}
272+
}

0 commit comments

Comments
 (0)