Ignore:
Timestamp:
Mar 30, 2019 9:15:11 PM (5 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master
Children:
b2964ef
Parents:
4ecf91a
Message:

redo GPU dialog to show test progress

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sasgui/perspectives/fitting/gpu_options.py

    r4ecf91a r4688acf  
    1616import wx 
    1717 
     18# TODO: move device query functions to sasmodels 
    1819try: 
    1920    import pyopencl as cl 
     
    2930 
    3031logger = logging.getLogger(__name__) 
    31  
    32  
    3332 
    3433class CustomMessageBox(wx.Dialog): 
     
    7776 
    7877        self.SetAutoLayout(True) 
    79         self.ShowModal() 
    80         self.Destroy() 
    8178 
    8279 
     
    145142        test_btn = wx.Button(self, test_id, 'Test') 
    146143        test_btn.SetToolTipString("Test if models compile on the given infrastructure") 
     144        self.test_btn = test_btn 
    147145 
    148146        self.Bind(wx.EVT_BUTTON, self.on_OK, accept_btn) 
     
    180178        :return: 
    181179        """ 
     180        # TODO: Include cuda platforms if available. 
    182181        clinfo = [] 
    183182        platforms = [] 
     
    267266            if "SAS_OPENCL" in os.environ: 
    268267                del os.environ["SAS_OPENCL"] 
    269         sasmodels.sasview_model.reset_environment() 
     268        # CRUFT: next version of reset_environment() will return env 
     269        env = sasmodels.sasview_model.reset_environment() 
    270270 
    271271        try: 
    272272            env = sasmodels.kernelcl.environment() 
    273             ctx = env.context[F64].devices[0] 
    274             clinfo = ('64bit: ', ctx.platform.vendor, 
    275                       ctx.platform.version, 
    276                       ctx.vendor, 
    277                       ctx.name, 
    278                       ctx.version) 
    279             if F32 in env.context: 
     273            clinfo = {} 
     274            if env.context[F64] is None: 
     275                clinfo['double'] = "None" 
     276            else: 
     277                ctx64 = env.context[F64].devices[0] 
     278                clinfo['double'] = ", ".join(( 
     279                    ctx64.platform.vendor, 
     280                    ctx64.platform.version, 
     281                    ctx64.vendor, 
     282                    ctx64.name, 
     283                    ctx64.version)) 
     284            if env.context[F32] is None: 
     285                clinfo['single'] = "None" 
     286            else: 
    280287                ctx32 = env.context[F32].devices[0] 
    281                 if ctx32 != ctx: 
    282                     clinfo += ('32bit: ', ctx32.platform.vendor, 
    283                                ctx32.platform.version, 
    284                                ctx32.vendor, 
    285                                ctx32.name, 
    286                                ctx32.version) 
    287         except Exception: 
    288             clinfo = None 
     288                clinfo['single'] = ", ".join(( 
     289                    ctx32.platform.vendor, 
     290                    ctx32.platform.version, 
     291                    ctx32.vendor, 
     292                    ctx32.name, 
     293                    ctx32.version)) 
     294            # If the same device is used for single and double precision, then 
     295            # say so. Whether double is the same as single or single is the 
     296            # same as double depends on the order they are listed below. 
     297            if env.context[F32] == env.context[F64]: 
     298                clinfo['double'] = "same as single precision" 
     299        except Exception as exc: 
     300            logger.debug("exc %s", str(exc)) 
     301            clinfo = {'double': "None", 'single': "None"} 
     302 
     303        msg = "\nPlatform Details:\n\n" 
     304        msg += "Sasmodels version: " 
     305        msg += sasmodels.__version__ + "\n" 
     306        msg += "\nPlatform used: " 
     307        msg += json.dumps(platform.uname()) + "\n" 
     308        if no_opencl_msg: 
     309            msg += "\nOpenCL driver: None\n" 
     310        else: 
     311            msg += "\nOpenCL driver:\n" 
     312            msg += "   single precision: " + clinfo['single'] + "\n" 
     313            msg += "   double precision: " + clinfo['double'] + "\n" 
     314 
     315        msg_title = 'OpenCL tests results' 
     316        running = msg + "\nRunning tests.  This may take several minutes.\n\n" 
     317        msg_dialog = CustomMessageBox(self.panel1, running, msg_title) 
     318        msg_dialog.Show() 
    289319 
    290320        failures = [] 
    291321        tests_completed = 0 
    292         for test in sasmodels.model_test.model_tests(): 
     322        self.test_btn.Disable() 
     323        tests = sasmodels.model_test.make_suite('opencl', ['all']) 
     324        for test in tests: 
    293325            try: 
    294                 test() 
    295             except Exception: 
    296                 failures.append(test.description) 
    297  
     326                wx.Yield() 
     327                test.run_all() 
     328                msg_dialog.text.AppendText('.') 
     329            except Exception as exc: 
     330                logger.debug("%s failed with %s", test.test_name, str(exc)) 
     331                msg_dialog.text.AppendText('\nFail: ' + test.test_name) 
     332                failures.append(test.test_name) 
    298333            tests_completed += 1 
    299  
    300         info = { 
    301             'version':  sasmodels.__version__, 
    302             'platform': platform.uname(), 
    303             'opencl': clinfo, 
    304             'failing tests': failures, 
    305         } 
    306  
    307         msg_info = 'OpenCL tests results' 
    308  
    309         msg = str(tests_completed)+' tests completed.\n' 
    310         if len(failures) > 0: 
    311             msg += str(len(failures))+' tests failed.\n' 
    312             msg += 'Failing tests: ' 
    313             msg += json.dumps(info['failing tests']) 
    314             msg += "\n" 
    315         else: 
    316             msg += "All tests passed!\n" 
    317  
    318         msg += "\nPlatform Details:\n\n" 
    319         msg += "Sasmodels version: " 
    320         msg += info['version']+"\n" 
    321         msg += "\nPlatform used: " 
    322         msg += json.dumps(info['platform'])+"\n" 
    323         if no_opencl_msg: 
    324             msg += "\nOpenCL driver: None" 
    325         else: 
    326             msg += "\nOpenCL driver: " 
    327             msg += json.dumps(info['opencl'])+"\n" 
    328  
    329         CustomMessageBox(self.panel1, msg, msg_info) 
     334            # TODO: Put a stop button in CustomDialog and test it here. 
     335            #if tests_completed > 5: break 
     336 
     337        status = 'Failed %d of %d' % (len(failures), tests_completed) 
     338        msg_dialog.text.AppendText('\n\n' + status + '\n') 
     339        self.test_btn.Enable() 
     340        msg_dialog.ShowModal() 
     341        msg_dialog.Destroy() 
    330342 
    331343    def on_help(self, event): 
Note: See TracChangeset for help on using the changeset viewer.