static LinkedHashSet<EXECUTION_MODE> getDefaultExecutionModes() {
         LinkedHashSet<EXECUTION_MODE> defaultExecutionModes = new LinkedHashSet<EXECUTION_MODE>();

         if (OpenCLLoader.isOpenCLAvailable()) {
            defaultExecutionModes.add(GPU);
            defaultExecutionModes.add(JTP);
         } else {
            defaultExecutionModes.add(JTP);
         }

         final String executionMode = Config.executionMode;

         if (executionMode != null) {
            try {
               LinkedHashSet<EXECUTION_MODE> requestedExecutionModes;
               requestedExecutionModes = EXECUTION_MODE.getExecutionModeFromString(executionMode);
               logger.fine("requested execution mode =");
               for (final EXECUTION_MODE mode : requestedExecutionModes) {
                  logger.fine(" " + mode);
               }
               if ((OpenCLLoader.isOpenCLAvailable() && EXECUTION_MODE.anyOpenCL(requestedExecutionModes))
                     || !EXECUTION_MODE.anyOpenCL(requestedExecutionModes)) {
                  defaultExecutionModes = requestedExecutionModes;
               }
            } catch (final Throwable t) {
               // we will take the default
            }
         }

         logger.info("default execution modes = " + defaultExecutionModes);

         for (final EXECUTION_MODE e : defaultExecutionModes) {
            logger.info("SETTING DEFAULT MODE: " + e.toString());
         }

         return (defaultExecutionModes);
      }