[fpc-devel] Parallel processing in the compiler
DrDiettrich1 at aol.com
Mon Sep 6 16:12:43 CEST 2010
Florian Klaempfl schrieb:
>> I have no real idea, how in such a model the initialization of the
>> threadvars has to be implemented. That's why I try to assign all
>> state-related variables to a definite object, whose reference can be
>> easily copied (or moved?) into any created thread.
> In case of current_filepos, the initialization could be done by the
> specific worker thread class doing e.g. code generation.
I see the main problem in the identification of all the global
variables, that have to become threadvars. Or do you know of an way, to
make the compiler identify variables that have to become threadvars?
>> Then we also have to draw a border, between possible parallel and still
>> required sequential processing. Sequential processing must be used for
>> all output, be binary or log files. Also encountered errors must be
>> reported from the originating thread to all related (main and other)
>> threads, when they require to stop and shut down compilation in an
>> orderly manner.
> Yes, this won't get easy, but we are far away from something like this.
IMO it won't take more time than any of my other experiments, to set
apart some small part of the compiler for use in threads. The required
threadvars have to be identified in that attempt, too, but possibly in a
>> IMO the most important decision is about the general direction of the
>> refactoring. Do we want more OO (encapsulation), more codegen
>> separation, or what else. IMO encapsulation is the most useful first
>> step, towards any other goal.
> I think we agreed on this already. And I also agree with you, that the
> front end needs some redesign and it won't be easy (it took me almost 2
> years to find the current back end design btw. ...)
It was one of my first experiments, to create a new target with no code
generation. Unfortunately I forgot to backup the according
documentation, so that only the code is still available.
Another more recent experiment was to convert the back-ends into
classes. It turned out that much target-specific code resides in the
general compiler units, whose separation into virtual back-end methods
would involve much work. In another approach the $IFDEFs could be
replaced by ordinary IFs, what would both simplify the redesign and
preserve the current compiler speed.
>> The current compiler "structure" is
>> dictated by purely *formal* aspects (unit dependencies), and does not
>> reflect the *logical* dependencies between objects, variables,
>> procedures etc.
> The problem is (very simplified): in a compiler everything depends on
> everything, so getting some structure is only possible with some
> formalism, formalism is the last resort when logic does not work
> anymore. Formalism is also something absolute while logic might be
> rather subjective.
I dare to disagree. It's not so hard to encapsulate everything in
dedicated (mostly existing) classes. Only the requirement, that
*external* tools should be able to use part of the compiler, without
importing too many dependencies, results in the implementation of
otherwise unneeded hacks and workarounds. In a radical OO redesign the
number of involved units (and global variables) could be reduced
dramatically, so that finally the compiler could be decomposed into a
small number of building blocks (packages...), with tiny interfaces to
>> This lack of logical structure, next lack of up-to-date
> Nobody volounteered yet to continue Carl's work of documenting the compiler.
Where can this work be found? Do you mean the 1.x PDF document, that is
not helpful with newer versions?
As mentioned above, I've started an documentation attempt some time ago.
But after many arising questions remained unanswered, I had to figure
out everything myself. And after I found out that the current compiler
implementation is based on formal requirements, not on logical ones, I
see not much use in providing documentation for that unsystematic state.
IOW the current implementation deserves more badly a redesign, in favor
of documentation. IMO.
More information about the fpc-devel