MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / AFSymbolManager

Method AFSymbolManager

src/api/unified/symbol_manager.cpp:188–221  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

186}
187
188AFSymbolManager::AFSymbolManager()
189 : defaultHandle(nullptr)
190 , numBackends(0)
191 , backendsAvailable(0)
192 , logger(loggerFactory("unified")) {
193 // In order of priority.
194 static const af_backend order[] = {AF_BACKEND_CUDA, AF_BACKEND_ONEAPI,
195 AF_BACKEND_OPENCL, AF_BACKEND_CPU};
196 LibHandle handle = nullptr;
197 af::Backend backend = AF_BACKEND_DEFAULT;
198 // Decremeting loop. The last successful backend loaded will be the most
199 // prefered one.
200 for (int i = NUM_BACKENDS - 1; i >= 0; i--) {
201 int bknd_idx = backend_index(order[i]);
202 bkndHandles[bknd_idx] = openDynLibrary(order[i]);
203 if (bkndHandles[bknd_idx]) {
204 handle = bkndHandles[bknd_idx];
205 backend = order[i];
206 numBackends++;
207 backendsAvailable += order[i];
208 }
209 }
210 if (backend) {
211 AF_TRACE("AF_DEFAULT_BACKEND: {}", getBackendDirectoryName(backend));
212 defaultBackend = backend;
213 } else {
214 logger->error("Backend was not found");
215 defaultBackend = AF_BACKEND_DEFAULT;
216 }
217
218 // Keep a copy of default order handle inorder to use it in ::setBackend
219 // when the user passes AF_BACKEND_DEFAULT
220 defaultHandle = handle;
221}
222
223AFSymbolManager::~AFSymbolManager() {
224 for (auto& bkndHandle : bkndHandles) {

Callers

nothing calls this directly

Calls 4

loggerFactoryFunction · 0.85
backend_indexFunction · 0.85
openDynLibraryFunction · 0.85
getBackendDirectoryNameFunction · 0.85

Tested by

no test coverage detected