|
21 | 21 | #include <cuda_runtime.h> |
22 | 22 | #include <nvrtc.h> |
23 | 23 | #include <stdarg.h> |
24 | | -#include <stdbool.h> |
25 | 24 | #include <stdio.h> |
26 | 25 | #include <stdlib.h> |
27 | 26 | #include <string.h> |
@@ -150,22 +149,22 @@ static int CeedGetPreferredMemType_Cuda(CeedMemType *type) { |
150 | 149 | //------------------------------------------------------------------------------ |
151 | 150 | int CeedCudaInit(Ceed ceed, const char *resource, int nrc) { |
152 | 151 | int ierr; |
153 | | - const int rlen = strlen(resource); |
154 | | - const bool slash = (rlen>nrc) ? (resource[nrc] == '/') : false; |
155 | | - const int deviceID = (slash && rlen > nrc + 1) ? atoi(&resource[nrc + 1]) : -1; |
| 152 | + const char *device_spec = strstr(resource, ":device_id="); |
| 153 | + const int deviceID = (device_spec) ? atoi(device_spec+11) : -1; |
156 | 154 |
|
157 | 155 | int currentDeviceID; |
158 | 156 | ierr = cudaGetDevice(¤tDeviceID); CeedChk_Cu(ceed,ierr); |
159 | 157 | if (deviceID >= 0 && currentDeviceID != deviceID) { |
160 | 158 | ierr = cudaSetDevice(deviceID); CeedChk_Cu(ceed,ierr); |
| 159 | + currentDeviceID = deviceID; |
161 | 160 | } |
162 | | - |
163 | 161 | struct cudaDeviceProp deviceProp; |
164 | | - ierr = cudaGetDeviceProperties(&deviceProp, deviceID); CeedChk_Cu(ceed,ierr); |
| 162 | + ierr = cudaGetDeviceProperties(&deviceProp, currentDeviceID); |
| 163 | + CeedChk_Cu(ceed,ierr); |
165 | 164 |
|
166 | 165 | Ceed_Cuda *data; |
167 | 166 | ierr = CeedGetData(ceed, &data); CeedChkBackend(ierr); |
168 | | - data->deviceId = deviceID; |
| 167 | + data->deviceId = currentDeviceID; |
169 | 168 | data->optblocksize = deviceProp.maxThreadsPerBlock; |
170 | 169 | return CEED_ERROR_SUCCESS; |
171 | 170 | } |
@@ -210,6 +209,7 @@ static int CeedInit_Cuda(const char *resource, Ceed ceed) { |
210 | 209 | return CeedError(ceed, CEED_ERROR_BACKEND, |
211 | 210 | "Cuda backend cannot use resource: %s", resource); |
212 | 211 | // LCOV_EXCL_STOP |
| 212 | + ierr = CeedSetDeterministic(ceed, true); CeedChk(ierr); |
213 | 213 |
|
214 | 214 | Ceed_Cuda *data; |
215 | 215 | ierr = CeedCalloc(1, &data); CeedChkBackend(ierr); |
|
0 commit comments