From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED.yTvCNOh9TRCAIcX40YItlQ.user.gioia.aioe.org!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Competing Servers Date: Mon, 1 Apr 2019 21:58:50 +0200 Organization: Aioe.org NNTP Server Message-ID: References: <2d8df013-ed41-4b9f-8b26-b719cd2989b6@googlegroups.com> NNTP-Posting-Host: yTvCNOh9TRCAIcX40YItlQ.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 Content-Language: en-US X-Notice: Filtered by postfilter v. 0.9.2 Xref: reader01.eternal-september.org comp.lang.ada:56034 Date: 2019-04-01T21:58:50+02:00 List-Id: On 2019-04-01 21:21, Anh Vo wrote: > On Tuesday, March 26, 2019 at 10:03:33 AM UTC-7, Dmitry A. Kazakov wrote: >> On 2019-03-26 16:50, Anh Vo wrote: >>> On Tuesday, March 26, 2019 at 6:11:12 AM UTC-7, Dmitry A. Kazakov wrote: >>>> On 2019-03-26 11:42, hnptz@yahoo.de wrote: >>>> >>>>> I want to consider any problem that can be viewed as search, and for which only one solution is required, and the problem is suitable for a data parallel approach, provided that the computation time is large enough to make the communication time negligible. >>>>> >>>>> Assume we habe s servers and n tasks. I may start with one server and n tasks. After a simple domain decomposition I want a task only search in its allocated sub-domain. When one of the tasks has found a solution: it should report it, all tasks should stop immediately and the initiating program should terminate. >>>>> >>>>> A variant from above would be to add a monitoring task, which after receiving a success message by one of the tasks, should then report and stop all tasks immediately and terminate. >>>> >>>> Usual design is a pool of worker task. A worker task takes jobs from a >>>> queue controlled by a protected object. The task never terminates, just >>>> waits for another job. Cancellation of a job is done again over a >>>> protected object. A worker task simply periodically checks if its >>>> current job were terminated. The check will propagate an exception, that >>>> will roll the stack with all local objects back to the main body loop >>>> where the task will accept the next job. >>> >>> why is an exception involved in the checking? >> >> An easy method to roll back from a deep nested call. Considering that a >> job solver will loop through many iterations, maybe doing recursive >> calls, then using a return value might be quite complicated. > > I am very curious about its complication. Thus, I would like to see an actual example if it is possible. Since it is complicated there is no simply example. How the pattern is used you can find it here: http://www.dmitry-kazakov.de/ada/fuzzy_ml_api.htm#2.8 There is an object passed down to each operation. Operations can take several hours to compute. The object is an "indicator" that serves both progress indication and cancellation purposes. An outsider task (viewer) monitors the object, e.g. to update the progress bar. It can also request cancellation when the user presses "abort" button. Once the solver task reaches a check point and tries to update the indicator object it gets an exception (End_Error) which then propagates up all recursive calls and nested loops. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de