Запуск задач на OpenCL на гибридных узлах кластера СКИТ
На кластере СКИТ установлен стандартный AMD APP SDK, поэтому можно воспользоваться документацией по нему:
http://developer.amd.com/sdks/AMDAPPSDK/documentation/Pages/default.aspx
Единственное, что может отличаться на разных установках, - это пути, по которым установлен тот или иной компонент. В нашем случае они следующие:
/opt/AMDAPP - AMD APP SDK
/opt/clAmdBlas-1.6.236 - BLAS
/opt/clAmdFft-1.6.244 - FFT
/usr/lib64/fglrx - библиотеки, идущие в комплекте с AMD Catalyst (libGL, libOpenCL и т.д.)
Продемонстрируем, как компилировать задачи на OpenCL, на примере из второй главы "AMD Accelerated Parallel Processing OpenCL(tm) Programming Guide".
Запускаем на узле sleep, занимаем узел.
[access ~]$ sbatch -p lt_radeon --wrap="sleep 3h"
sbatch: Submitted batch job 83244
Смотрим задачи для своего пользователя, чтобы убедиться, что задача стартовала. Также смотрим hostname узла в колонке NODELIST.
[access ~]$ squeue -u $USER
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
83244 lt_radeon sbatch user R 0:17 1 g3222
Идем на узел.
[access ~]$ ssh g3222
Создаем директорию для экспериментов и переходим в нее.
[g3222 ~]$ mkdir amd_opencl_test
[g3222 ~]$ cd amd_opencl_test/
Копируем пример из AMDAPP. Переходим в директорию с примером.
[g3222 amd_opencl_test]$ cp -r /opt/AMDAPP/samples/opencl/cl/
app/Template .
[g3222 amd_opencl_test]$ cd Template/
Компилируем пример с помощью GNU компиляторов. Примеры команд взяты из "AMD Accelerated Parallel Processing OpenCL(tm) Programming Guide", пути к файлам подставлены местные.
[g3222 Template]$ g++ -o Template.o -DATI_OS_LINUX -c
Template.cpp -I /opt/AMDAPP/include
[g3222 Template]$ g++ -o Template Template.o -lOpenCL -L/usr/lib64/fglrx
Запускаем собранный пример.
[g3222 Template]$ ./Template
Input:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249
250 251 252 253 254 255
Output:
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48
50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94
96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126 128 130
132 134 136 138 140 142 144 146 148 150 152 154 156 158 160 162 164
166 168 170 172 174 176 178 180 182 184 186 188 190 192 194 196 198
200 202 204 206 208 210 212 214 216 218 220 222 224 226 228 230 232
234 236 238 240 242 244 246 248 250 252 254 256 258 260 262 264 266
268 270 272 274 276 278 280 282 284 286 288 290 292 294 296 298 300
302 304 306 308 310 312 314 316 318 320 322 324 326 328 330 332 334
336 338 340 342 344 346 348 350 352 354 356 358 360 362 364 366 368
370 372 374 376 378 380 382 384 386 388 390 392 394 396 398 400 402
404 406 408 410 412 414 416 418 420 422 424 426 428 430 432 434 436
438 440 442 444 446 448 450 452 454 456 458 460 462 464 466 468 470
472 474 476 478 480 482 484 486 488 490 492 494 496 498 500 502 504
506 508 510
Passed!
Собираем и запускаем еще раз, только на этот раз используем Intel компиляторы.
[g3222 Template]$ icpc -o Template.o -DATI_OS_LINUX -c
Template.cpp -I /opt/AMDAPP/include
[g3222 Template]$ icpc -o Template Template.o -lOpenCL -L/usr/lib64/fglrx
[g3222 Template]$ ./Template
Input:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249
250 251 252 253 254 255
Output:
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48
50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94
96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126 128 130
132 134 136 138 140 142 144 146 148 150 152 154 156 158 160 162 164
166 168 170 172 174 176 178 180 182 184 186 188 190 192 194 196 198
200 202 204 206 208 210 212 214 216 218 220 222 224 226 228 230 232
234 236 238 240 242 244 246 248 250 252 254 256 258 260 262 264 266
268 270 272 274 276 278 280 282 284 286 288 290 292 294 296 298 300
302 304 306 308 310 312 314 316 318 320 322 324 326 328 330 332 334
336 338 340 342 344 346 348 350 352 354 356 358 360 362 364 366 368
370 372 374 376 378 380 382 384 386 388 390 392 394 396 398 400 402
404 406 408 410 412 414 416 418 420 422 424 426 428 430 432 434 436
438 440 442 444 446 448 450 452 454 456 458 460 462 464 466 468 470
472 474 476 478 480 482 484 486 488 490 492 494 496 498 500 502 504
506 508 510
Passed!
Выходим. Снимаем задачу, которой занимали узел.
[g3222 Template]$ logout
[access ~]$ squeue -u $USER
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
83244 lt_radeon sbatch user R 47:30 1 g3222
[access ~]$ scancel 83244