On Thu, 8 May 2014, Thomas Sewell wrote:

 If I knew a proper way to reduce the priority (or to pre-empt) worker
 threads for that, I would do it.  But it probably needs some work by
 David Matthews on the ML thread infrastructure.

Consider me an unashamed pragmatist.

The important point is that a system like Isabelle cannot be built on the basis of pragmatism. It is occasionally helpful to recall the cultural foundations on which one is standing.

The system can be used pragmatically, or rather practically, of course.


I see a similarity between task/thread scheduling in Isabelle and task/thread scheduling in operating systems. All modern operating systems are full of ad-hoc heuristics designed to bump up the priority of tasks that are likely to create I/O requests or update things for the user.

Definitely. I've introduced the slogan of "Isabelle as logical operating system" already in 2007, when the parallel batch mode with its ML threads was still new. Many years later that has become reality in PIDE interaction, but it was much harder to get there than anticipated. In recent years I have become more cautious in the ambitions of what the system is meant to do. It is already too far ahead of anything else in the ITP world, and hardly anyone understands how it really works.


A parallel "make", for instance, will run much faster if the OS prioritises the compile tasks that are still reading files ahead of the ones that have begin compiling and computing. This keeps the disk working throughout the build.

Luckily Isabelle no longer depends on "make" and its many historical problems. The Isabelle build tool is fast, because it does not access all these files over and over again. Thus the need for extra tricks is avoided, by giving up old habits from the 1970-ies.


Preempting long-running tasks would change the tradeoffs a lot. Another possibility would be to introduce a yield-point (cooperative multitasking) which a task can execute, which will possibly cause its execution to be delayed in favour of a higher priority task. Adding that to the tactic combinators would make nearly all Isabelle workloads much finer-grained.

That sounds rather obvious, but also like even more complication. David Matthews has provided a nice simplified version of pthreads in Poly/ML. He could probably do more, but even on the more complex JVM the influence on thread scheduling is limited.

My canonical approach in such situations is to ask: Is there a way to avoid the need for all that extra weight? It requires looking at concrete applications carefully, to "disprove" their approach as something that could be done differently, with less impact on resources.

That is not pragmatic, but it is how genuine scientific progress usually works.


        Makarius

_______________________________________________
isabelle-dev mailing list
isabelle-...@in.tum.de
https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev

Reply via email to