Changes in / [fa307dd:b2964ef] in sasview


Ignore:
File:
1 edited

Legend:

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

    r895703d r4688acf  
    1616import wx 
    1717 
     18# TODO: move device query functions to sasmodels 
    1819try: 
    1920    import pyopencl as cl 
     
    2425import sasmodels.model_test 
    2526import sasmodels.sasview_model 
     27from sasmodels.generate import F32, F64 
    2628 
    2729from sas.sasgui.guiframe.documentation_window import DocumentationWindow 
    2830 
    2931logger = logging.getLogger(__name__) 
    30  
    31  
    3232 
    3333class CustomMessageBox(wx.Dialog): 
     
    7676 
    7777        self.SetAutoLayout(True) 
    78         self.ShowModal() 
    79         self.Destroy() 
    8078 
    8179 
     
    144142        test_btn = wx.Button(self, test_id, 'Test') 
    145143        test_btn.SetToolTipString("Test if models compile on the given infrastructure") 
     144        self.test_btn = test_btn 
    146145 
    147146        self.Bind(wx.EVT_BUTTON, self.on_OK, accept_btn) 
     
    179178        :return: 
    180179        """ 
     180        # TODO: Include cuda platforms if available. 
    181181        clinfo = [] 
    182182        platforms = [] 
     
    257257        #The same block of code as for OK but it is needed if we want to have 
    258258        #active response to Test button 
     259 
    259260        no_opencl_msg = False 
    260261        if self.sas_opencl: 
     
    265266            if "SAS_OPENCL" in os.environ: 
    266267                del os.environ["SAS_OPENCL"] 
    267         sasmodels.sasview_model.reset_environment() 
     268        # CRUFT: next version of reset_environment() will return env 
     269        env = sasmodels.sasview_model.reset_environment() 
    268270 
    269271        try: 
    270272            env = sasmodels.kernelcl.environment() 
    271             clinfo = [(ctx.devices[0].platform.vendor, 
    272                        ctx.devices[0].platform.version, 
    273                        ctx.devices[0].vendor, 
    274                        ctx.devices[0].name, 
    275                        ctx.devices[0].version) 
    276                       for ctx in env.context] 
    277         except Exception: 
    278             clinfo = None 
     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: 
     287                ctx32 = env.context[F32].devices[0] 
     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() 
    279319 
    280320        failures = [] 
    281321        tests_completed = 0 
    282         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: 
    283325            try: 
    284                 test() 
    285             except Exception: 
    286                 failures.append(test.description) 
    287  
     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) 
    288333            tests_completed += 1 
    289  
    290         info = { 
    291             'version':  sasmodels.__version__, 
    292             'platform': platform.uname(), 
    293             'opencl': clinfo, 
    294             'failing tests': failures, 
    295         } 
    296  
    297         msg_info = 'OpenCL tests results' 
    298  
    299         msg = str(tests_completed)+' tests completed.\n' 
    300         if len(failures) > 0: 
    301             msg += str(len(failures))+' tests failed.\n' 
    302             msg += 'Failing tests: ' 
    303             msg += json.dumps(info['failing tests']) 
    304             msg += "\n" 
    305         else: 
    306             msg += "All tests passed!\n" 
    307  
    308         msg += "\nPlatform Details:\n\n" 
    309         msg += "Sasmodels version: " 
    310         msg += info['version']+"\n" 
    311         msg += "\nPlatform used: " 
    312         msg += json.dumps(info['platform'])+"\n" 
    313         if no_opencl_msg: 
    314             msg += "\nOpenCL driver: None" 
    315         else: 
    316             msg += "\nOpenCL driver: " 
    317             msg += json.dumps(info['opencl'])+"\n" 
    318  
    319         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() 
    320342 
    321343    def on_help(self, event): 
Note: See TracChangeset for help on using the changeset viewer.