[arrayfire] 22/248: Changed default backend enum to point to zero

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Tue Nov 17 15:53:50 UTC 2015


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to branch dfsg-clean
in repository arrayfire.

commit cc26908514fb3f3b0db7ee5d6cd4cc98c68e0288
Author: pradeep <pradeep at arrayfire.com>
Date:   Mon Aug 31 13:27:23 2015 -0400

    Changed default backend enum to point to zero
    
    also cleaned up some constants used in symbol manager class
---
 include/af/defines.h            |  8 ++++----
 src/api/hapi/symbol_manager.cpp | 31 +++++++++++++++++--------------
 src/api/hapi/symbol_manager.hpp |  9 ++++++++-
 3 files changed, 29 insertions(+), 19 deletions(-)

diff --git a/include/af/defines.h b/include/af/defines.h
index ba2aea9..8d6dbd0 100644
--- a/include/af/defines.h
+++ b/include/af/defines.h
@@ -322,10 +322,10 @@ typedef enum {
 } af_image_format;
 
 typedef enum {
-    AF_BACKEND_CPU     = 0,  ///< CPU a.k.a sequential algorithms
-    AF_BACKEND_CUDA    = 1,  ///< CUDA Compute Backend
-    AF_BACKEND_OPENCL  = 2,  ///< OpenCL Compute Backend
-    AF_BACKEND_DEFAULT = 3   ///< Default backend order: OpenCL -> CUDA -> CPU
+    AF_BACKEND_DEFAULT = 0,  ///< Default backend order: OpenCL -> CUDA -> CPU
+    AF_BACKEND_CPU     = 1,  ///< CPU a.k.a sequential algorithms
+    AF_BACKEND_CUDA    = 2,  ///< CUDA Compute Backend
+    AF_BACKEND_OPENCL  = 3,  ///< OpenCL Compute Backend
 } af_backend;
 
 // Below enum is purely added for example purposes
diff --git a/src/api/hapi/symbol_manager.cpp b/src/api/hapi/symbol_manager.cpp
index a2cd701..2ce323a 100644
--- a/src/api/hapi/symbol_manager.cpp
+++ b/src/api/hapi/symbol_manager.cpp
@@ -10,10 +10,10 @@
 #include "symbol_manager.hpp"
 
 #if defined(OS_WIN)
-static const char* LIB_AF_BKND_NAME[] = {"afcpu.dll", "afcuda.dll", "afopencl.dll"};
+static const char* LIB_AF_BKND_NAME[NUM_BACKENDS] = {"afcpu.dll", "afcuda.dll", "afopencl.dll"};
 #define RTLD_LAZY 0
 #else
-static const char* LIB_AF_BKND_NAME[] = {"libafcpu.so", "libafcuda.so", "libafopencl.so"};
+static const char* LIB_AF_BKND_NAME[NUM_BACKENDS] = {"libafcpu.so", "libafcuda.so", "libafopencl.so"};
 #endif
 
 AFSymbolManager& AFSymbolManager::getInstance()
@@ -46,14 +46,13 @@ void closeDynLibrary(LibHandle handle)
 }
 
 AFSymbolManager::AFSymbolManager()
-    : backendBitFlag(0x0000), activeHandle(NULL), defaultHandle(NULL)
+    : backendBitFlag(NO_BACKEND_LOADED), activeHandle(NULL), defaultHandle(NULL)
 {
-    // AF_BACKEND_DEFAULT enum value is 1 + last valid compute
-    // backend in af_backend enum, hence it represents the number
-    // of valid backends in ArrayFire framework
-    unsigned bkndFlag = 0x0001;
-    for(int i=0; i<AF_BACKEND_DEFAULT; ++i) {
+    unsigned bkndFlag = CPU_BACKEND_MASK;
+    for(int i=0; i<NUM_BACKENDS; ++i) {
+        printf("backend %d %s \n", i, LIB_AF_BKND_NAME[i]);
         bkndHandles[i] = openDynLibrary(LIB_AF_BKND_NAME[i]);
+        printf("backend handle %p\n", bkndHandles[i]);
         if (bkndHandles[i]) {
             backendBitFlag |= bkndFlag;
             activeHandle = bkndHandles[i];
@@ -64,26 +63,30 @@ AFSymbolManager::AFSymbolManager()
     // inorder to use it in ::setBackend when
     // the user passes AF_BACKEND_DEFAULT
     defaultHandle = activeHandle;
+    printf("backend bit flag %x\n", backendBitFlag);
 }
 
 AFSymbolManager::~AFSymbolManager()
 {
-    unsigned bkndFlag = 0x0001;
-    for(int i=0; i<AF_BACKEND_DEFAULT; ++i) {
+    unsigned bkndFlag = CPU_BACKEND_MASK;
+    for(int i=0; i<NUM_BACKENDS; ++i) {
         if (bkndFlag & backendBitFlag)
             closeDynLibrary(bkndHandles[i]);
         bkndFlag = bkndFlag << 1;
     }
-    backendBitFlag = 0x0000;
+    backendBitFlag = NO_BACKEND_LOADED;
 }
 
 af_err AFSymbolManager::setBackend(af::Backend bknd)
 {
     if (bknd==AF_BACKEND_DEFAULT) {
-        activeHandle = defaultHandle;
-        return AF_SUCCESS;
+        if (defaultHandle) {
+            activeHandle = defaultHandle;
+            return AF_SUCCESS;
+        } else
+            return AF_ERR_LOAD_LIB;
     }
-    unsigned bkndFlag = 0x0001;
+    unsigned bkndFlag = CPU_BACKEND_MASK;
     if((bkndFlag << bknd) & backendBitFlag) {
         activeHandle = bkndHandles[bknd];
         return AF_SUCCESS;
diff --git a/src/api/hapi/symbol_manager.hpp b/src/api/hapi/symbol_manager.hpp
index 848bf31..ff6e7df 100644
--- a/src/api/hapi/symbol_manager.hpp
+++ b/src/api/hapi/symbol_manager.hpp
@@ -18,6 +18,10 @@ typedef HMODULE LibHandle;
 typedef void* LibHandle;
 #endif
 
+const unsigned NUM_BACKENDS = 3;
+const unsigned NO_BACKEND_LOADED = 0x0000;
+const unsigned CPU_BACKEND_MASK = 0x0001;
+
 class AFSymbolManager {
     public:
         static AFSymbolManager& getInstance();
@@ -52,9 +56,12 @@ class AFSymbolManager {
         void operator=(AFSymbolManager const&);
 
     private:
+        /* The following bit flag represents which
+         * backends are available. 32-bits and 32 backends
+         * LSB - CPU, next one CUDA, next one OpenCL and so on.  */
         unsigned backendBitFlag;
 
-        LibHandle bkndHandles[3];
+        LibHandle bkndHandles[NUM_BACKENDS];
 
         LibHandle activeHandle;
         LibHandle defaultHandle;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/arrayfire.git



More information about the debian-science-commits mailing list