Ejemplo n.º 1
0
    def test_cfunc(self):
        with self.assertRaises(TypeError):
            func = CThreadPool.lookupCFunction("WRONG-TYPE",
                                               "no-this-does-not-exist")

        with self.assertRaises(AttributeError):
            func = CThreadPool.lookupCFunction(TEST_LIB,
                                               "no-this-does-not-exist")
Ejemplo n.º 2
0
    def __init__(self, ert, size, verbose=False):
        self._ert = ert
        """ :type: res.enkf.EnKFMain """
        self._size = size

        max_runtime = ert.analysisConfig().get_max_runtime()

        job_queue = ert.get_queue_config().create_job_queue()
        self._queue_manager = JobQueueManager(job_queue)
        self._queue_manager.startQueue(size, verbose=verbose)
        self._run_args = {}
        """ :type: dict[int, RunArg] """

        self._thread_pool = CThreadPool(8)
        self._thread_pool.addTaskFunction("submitJob", ENKF_LIB,
                                          "enkf_main_isubmit_job__")
Ejemplo n.º 3
0
 def test_context(self):
     N = 256
     arg = ctypes.c_int(0)
     job = CThreadPool.lookupCFunction(TEST_LIB, "thread_pool_test_func1")
     with startCThreadPool(16) as tp:
         for i in range(N):
             tp.addTask(job, ctypes.byref(arg))
     self.assertEqual(arg.value, N)
Ejemplo n.º 4
0
    def __init__(self, ert, size, verbose=False):
        self._ert = ert
        """ :type: res.enkf.EnKFMain """
        self._size = size

        max_runtime = ert.analysisConfig().get_max_runtime()
        raise Exception(
            "Code has lost access to job_queue instance. Refactor required.")

        job_queue = None
        self._queue_manager = JobQueueManager(job_queue)
        self._queue_manager.startQueue(size, verbose=verbose)
        self._run_args = {}
        """ :type: dict[int, RunArg] """

        self._thread_pool = CThreadPool(8)
        self._thread_pool.addTaskFunction("submitJob", ENKF_LIB,
                                          "enkf_main_isubmit_job__")
Ejemplo n.º 5
0
    def __init__(self, ert, init_fs, result_fs, mask, itr , verbose=False):
        self._ert = ert
        """ :type: res.enkf.EnKFMain """
        max_runtime = ert.analysisConfig().get_max_runtime()
        self._mask = mask

        job_queue = ert.get_queue_config().create_job_queue()
        self._queue_manager = JobQueueManager(job_queue)
        self._queue_manager.startQueue( mask.count( ), verbose=verbose)
        self._run_args = {}
        """ :type: dict[int, RunArg] """

        self._thread_pool = CThreadPool(8)
        self._thread_pool.addTaskFunction("submitJob", ENKF_LIB, "enkf_main_isubmit_job__")

        subst_list = self._ert.getDataKW( )
        path_fmt = self._ert.getModelConfig().getRunpathFormat()
        self._run_context = ErtRunContext( EnkfRunType.ENSEMBLE_EXPERIMENT, init_fs, result_fs, None, mask, path_fmt, subst_list, itr)
Ejemplo n.º 6
0
    def test_add_task_function(self):
        pool = CThreadPool(32, start=True)
        pool.addTaskFunction("testFunction", TEST_LIB, "thread_pool_test_func1")

        arg = ctypes.c_int(0)
        task_count = 256
        for i in range(task_count):
            pool.testFunction(ctypes.byref(arg))

        pool.join()
        self.assertEqual(arg.value, task_count)
Ejemplo n.º 7
0
    def test_create(self):
        pool = CThreadPool(32, start=True)
        job = CThreadPool.lookupCFunction(TEST_LIB, "thread_pool_test_func1")
        arg = ctypes.c_int(0)

        N = 256
        for i in range(N):
            pool.addTask(job, ctypes.byref(arg))
        pool.join()
        self.assertEqual(arg.value, N)
Ejemplo n.º 8
0
class SimulationContext(object):
    def __init__(self, ert, size, verbose=False):
        self._ert = ert
        """ :type: res.enkf.EnKFMain """
        self._size = size

        max_runtime = ert.analysisConfig().get_max_runtime()
        raise Exception(
            "Code has lost access to job_queue instance. Refactor required.")

        job_queue = None
        self._queue_manager = JobQueueManager(job_queue)
        self._queue_manager.startQueue(size, verbose=verbose)
        self._run_args = {}
        """ :type: dict[int, RunArg] """

        self._thread_pool = CThreadPool(8)
        self._thread_pool.addTaskFunction("submitJob", ENKF_LIB,
                                          "enkf_main_isubmit_job__")

    def addSimulation(self, iens, target_fs):
        if iens >= self._size:
            raise UserWarning("Realization number out of range: %d >= %d" %
                              (iens, self._size))

        if iens in self._run_args:
            raise UserWarning("Realization number: '%d' already queued" % iens)

        runpath_fmt = self._ert.getModelConfig().getRunpathFormat()
        member = self._ert.getRealisation(iens)
        runpath = ErtRunContext.createRunpath(iens, runpath_fmt,
                                              member.getDataKW())
        run_arg = RunArg.createEnsembleExperimentRunArg(
            target_fs, iens, runpath)

        self._ert.createRunPath(run_arg)

        self._run_args[iens] = run_arg
        self._thread_pool.submitJob(ArgPack(self._ert, run_arg))

    def isRunning(self):
        return self._queue_manager.isRunning()

    def getNumRunning(self):
        return self._queue_manager.getNumRunning()

    def getNumSuccess(self):
        return self._queue_manager.getNumSuccess()

    def getNumFailed(self):
        return self._queue_manager.getNumFailed()

    def getNumWaiting(self):
        return self._queue_manager.getNumWaiting()

    def didRealizationSucceed(self, iens):
        queue_index = self._run_args[iens].getQueueIndex()
        return self._queue_manager.didJobSucceed(queue_index)

    def didRealizationFail(self, iens):
        # For the purposes of this class, a failure should be anything (killed job, etc) that is not an explicit success.
        return not self.didRealizationSucceed(iens)

    def isRealizationQueued(self, iens):
        return iens in self._run_args

    def isRealizationFinished(self, iens):
        run_arg = self._run_args[iens]

        if run_arg.isSubmitted():
            queue_index = run_arg.getQueueIndex()
            return self._queue_manager.isJobComplete(queue_index)
        else:
            return False

    def __repr__(self):
        running = 'running' if self.isRunning() else 'not running'
        numRunn = self.getNumRunning()
        numSucc = self.getNumSuccess()
        numFail = self.getNumFailed()
        numWait = self.getNumWaiting()
        fmt = '%s, #running = %d, #success = %d, #failed = %d, #waiting = %d'
        fmt = fmt % (running, numRunn, numSucc, numFail, numWait)
        return 'SimulationContext(%s)' % fmt
Ejemplo n.º 9
0
class SimulationContext(object):
    def __init__(self, ert, sim_fs, mask, itr, verbose=False):
        self._ert = ert
        """ :type: res.enkf.EnKFMain """
        max_runtime = ert.analysisConfig().get_max_runtime()
        self._mask = mask

        job_queue = ert.get_queue_config().create_job_queue()
        self._queue_manager = JobQueueManager(job_queue)
        self._queue_manager.startQueue(mask.count(), verbose=verbose)
        self._run_args = {}
        """ :type: dict[int, RunArg] """

        self._thread_pool = CThreadPool(8)
        self._thread_pool.addTaskFunction("submitJob", ENKF_LIB,
                                          "enkf_main_isubmit_job__")

        subst_list = self._ert.getDataKW()
        path_fmt = self._ert.getModelConfig().getRunpathFormat()
        jobname_fmt = self._ert.getModelConfig().getJobnameFormat()
        self._run_context = ErtRunContext(EnkfRunType.ENSEMBLE_EXPERIMENT,
                                          sim_fs, None, mask, path_fmt,
                                          jobname_fmt, subst_list, itr)
        self._ert.createRunpath(self._run_context)

    def __len__(self):
        return self._mask.count()

    def addSimulation(self, iens, geo_id):
        if not (0 <= iens < len(self._run_context)):
            raise UserWarning("Realization number out of range: %d >= %d" %
                              (iens, len(self._run_context)))

        if not self._mask[iens]:
            raise UserWarning("Realization number: '%d' is not active" % iens)

        if iens in self._run_args:
            raise UserWarning("Realization number: '%d' already queued" % iens)

        run_arg = self._run_context[iens]
        queue = self._queue_manager.get_job_queue()
        self._run_args[iens] = run_arg
        self._thread_pool.submitJob(ArgPack(self._ert, run_arg, queue, geo_id))

    def isRunning(self):
        return self._queue_manager.isRunning()

    def getNumPending(self):
        return self._queue_manager.getNumPending()

    def getNumRunning(self):
        return self._queue_manager.getNumRunning()

    def getNumSuccess(self):
        return self._queue_manager.getNumSuccess()

    def getNumFailed(self):
        return self._queue_manager.getNumFailed()

    def getNumWaiting(self):
        return self._queue_manager.getNumWaiting()

    def didRealizationSucceed(self, iens):
        queue_index = self._run_args[iens].getQueueIndex()
        return self._queue_manager.didJobSucceed(queue_index)

    def didRealizationFail(self, iens):
        # For the purposes of this class, a failure should be anything (killed job, etc) that is not an explicit success.
        return not self.didRealizationSucceed(iens)

    def isRealizationQueued(self, iens):
        return iens in self._run_args

    def isRealizationFinished(self, iens):
        run_arg = self._run_args[iens]

        if run_arg.isSubmitted():
            queue_index = run_arg.getQueueIndex()
            return self._queue_manager.isJobComplete(queue_index)
        else:
            return False

    def __repr__(self):
        running = 'running' if self.isRunning() else 'not running'
        numRunn = self.getNumRunning()
        numSucc = self.getNumSuccess()
        numFail = self.getNumFailed()
        numWait = self.getNumWaiting()
        fmt = '%s, #running = %d, #success = %d, #failed = %d, #waiting = %d'
        fmt = fmt % (running, numRunn, numSucc, numFail, numWait)
        return 'SimulationContext(%s)' % fmt

    def get_sim_fs(self):
        return self._run_context.get_sim_fs()

    def get_run_context(self):
        return self._run_context