load 'My_tools' {{0 T. 2}}^:3'' {{0 T. 3}}^:3''
My_tabulation ; (My_u t. (<'worker';1)"1 My_y) timespacex 3.9 5.0e7 NB. (no t.'') Runs correctly. 1.1 3.3e7 NB. (With t.'') Runs once, session dies Ak On Fri., Jan. 6, 2023, 08:10 Henry Rich, <henryhr...@gmail.com> wrote: > Tell me exactly what you did so I can reproduce it. > > Henry Rich > > On 1/6/2023 2:22 AM, Ak O wrote: > > This form executes correctly once. > > On the second run the whole session crashes. > > > > JVERSION > > Engine: j904/j64/windows > > Beta-i: commercial/2022-12-13T15:22:35 > > Library: 9.04.07 > > Qt IDE: 2.0.3/6.2.4(6.2.4) > > Platform: Win 64 > > Installer: J904 install > > InstallPath: c:/j904 > > Contact: www.jsoftware.com > > > > > > Ak > > > > On Thu., Jan. 5, 2023, 20:41 Henry Rich, <henryhr...@gmail.com> wrote: > > > >> Each execution of (u t. '') creates a task. The task is added to a list > >> of tasks for its threadpool. When a thread in the threadpool becomes > >> available, it executes the task. That's all there is to it. > >> > >> Execution starts immediately. When you create a task, all the waiting > >> tasks in the threadpool are awakened, and one takes the task. (yes, > >> maybe we should awaken fewer threads). When a task completes, its > >> thread grabs another task if there is one. > >> > >> You just create the tasks; we will execute them. :) > >> > >> Henry Rich > >> > >> On 1/5/2023 9:41 PM, Ak O wrote: > >>> On Tue Dec 20 17:52:26 UTC 2022 > >>> > >>> You suggested, > >>> ... or, if the blockverbs are the same, you could use > >>> > >>> pyx012 =. blockverb t. ''"0 block0args;block1args;block2args... > >>> > >>> I think is similar to what you suggest here. > >>> > >>> Can explain how the execution is distributed? > >>> > >>> When is the execution started? > >>> > >>> > >>> Ak > >>> > >>> > >>> On Thu., Jan. 5, 2023, 16:51 Henry Rich, <henryhr...@gmail.com> wrote: > >>> > >>>> You don't need multiple threadpools, or a work_list. Just have > >>>> something like > >>>> > >>>> tabulation_task@>/ x (?@[ A. i.@]) t. ''"0 y > >>>> > >>>> Henry Rich > >>>> > >>>> On 1/5/2023 6:38 PM, Ak O wrote: > >>>>> Is this the correct way to consider scheduling? Is there a better way > >> to > >>>>> structure the distribution of this execution? > >>>>> > >>>>> > >>>>> Ak > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> NB. Simulated long running tasks, of variable execution length. > >>>>> > >>>>> ] wrk_prcs =: ([: < (1 ? [) A. ([: i. ]))"0 0 > >>>>> ] x=. 90 31 235 77 83 99 17 62 122 23 > >>>>> ] y=. 12 4 _17 8 5 _8 9 6 15 _4 > >>>>> > >>>>> NB. The solution pyx look like this: > >>>>> > >>>>> (x wrk_prcs y) > >>>>> > >>>>> ] notional_work_list =: ,.<;._1 > >>>>> > >> > ',(<(1?90)A.(i.12)),(<(1?31)A.(i.4)),(<(1?235)A.(i._17)),(<(1?77)A.(i.8)),(<(1?83)A.(i.5)),(<(1?99)A.(i._8)),(<(1?17)A.(i.9)),(<(1?62)A.(i.6)),(<(1?122)A.(i.15)),(<(1?23)A.(i._4)) > >>>>> ' > >>>>> > >>>>> ] Exec_sched_form1 =. 2 1": ((<'Tasks'),(<'Executing Threadpool' > >>>>> )),(notional_work_list) ,."2 (,.10 $ <"_1 ( 1 +i.4)) > >>>>> > >>>>> NB. Execution is pre-assigned to threadpools. Intermediate results > are > >>>>> locked from a calling tabulation task. > >>>>> NB. The Final tabulation task executes when each pool has signaled > that > >>>> all > >>>>> of its assigned tasks are complete. > >>>>> > >>>>> ] Exec_sched_form2 =. 2 1": ((<'Tasks'),(<'Executing Threadpool' > >>>>> )),(notional_work_list) ,."2 > >>>> (,.<"_1(1),(2),(3),(4),(_),(_),(_),(_),(_),(_)) > >>>>> NB. Threadpools are initialized with an execution task (passed a > task). > >>>> By > >>>>> Thread configuration, on completion of > >>>>> NB. an execution, the worker checks for remaining tasks (from the > >>>>> Work_List). If there are no remaining tasks, the pool destroyed. > >>>>> NB. If there are remaining tasks, the task is locked and executed by > >> the > >>>>> worker. This series repeats to completion. > >>>>> NB. When signaled the final tablution task is executed. > >>>>> > >>>>> > >>>>> On Thu., Jan. 5, 2023, 03:40 Ak O, <akin...@gmail.com> wrote: > >>>>> > >>>>>> NB. Simulated long running tasks, of variable execution length. > >>>>>> > >>>>>> ] wrk_prcs =: ([: < (1 ? [) A. ([: i. ]))"0 0 > >>>>>> > >>>>>> ] x=. 90 31 235 77 83 99 17 62 122 23 > >>>>>> ] y=. 12 4 _17 8 5 _8 9 6 15 _4 > >>>>>> > >>>>>> NB. The solution pyx look like this: > >>>>>> > >>>>>> (x wrk_prcs y) > >>>>>> > >>>>>> ] notional_work_list =: ,.<;._1 > >>>>>> > >> > ',(<(1?90)A.(i.12)),(<(1?31)A.(i.4)),(<(1?235)A.(i._17)),(<(1?77)A.(i.8)),(<(1?83)A.(i.5)),(<(1?99)A.(i._8)),(<(1?17)A.(i.9)),(<(1?62)A.(i.6)),(<(1?122)A.(i.15)),(<(1?23)A.(i._4)) > >>>>>> ' > >>>>>> > >>>>>> > >>>>>> ] Exec_sched_form1 =. 2 1": ((<'Tasks'),(<'Executing Threadpool' > >>>>>> )),(notional_work_list) ,."2 (,.10 $ <"_1 ( 1 +i.4)) > >>>>>> > >>>>>> NB. Execution is pre-assigned to threadpools. Intermediate results > are > >>>>>> locked from a calling tabulation task. > >>>>>> NB. The Final tabulation task executes when each pool has signaled > >> that > >>>>>> all of its assigned tasks are complete. > >>>>>> > >>>>>> > >>>>>> ] Exec_sched_form2 =. 2 1": ((<'Tasks'),(<'Executing Threadpool' > >>>>>> )),(notional_work_list) ,."2 > >>>>>> (,.<"_1(1),(2),(3),(4),(_),(_),(_),(_),(_),(_)) > >>>>>> > >>>>>> NB. Threadpools are initialized with an execution task (passed a > >> task). > >>>> By > >>>>>> Thread configuration, on completion of > >>>>>> NB. an execution, the worker checks for remaining tasks (from the > >>>>>> Work_List). If there are no remaining tasks, the pool destroyed. > >>>>>> NB. If there are remaining tasks, the task is locked and executed by > >> the > >>>>>> worker. This series repeats to completion. > >>>>>> NB. When signaled the final tablution task is executed. > >>>>>> > >>>>>> > >>>>>> > >>>>>> Ak > >>>>>> > >>>>>> > >>>>>> On Wed., Jan. 4, 2023, 22:14 Raul Miller, <rauldmil...@gmail.com> > >>>> wrote: > >>>>>>> It's also worth noting that threads do not spin down immediately -- > >>>>>>> they only spin down when they're idle. > >>>>>>> > >>>>>>> And, as you have noted it's basically a stack of threads. > >>>>>>> > >>>>>>> So what you'd have to do is spin down as many threads as necessary > to > >>>>>>> eliminate the thread you wish to eliminate and then spin back up > the > >>>>>>> threads which you wish to remain. > >>>>>>> > >>>>>>> Or, shut down J completely and initialize a new instance of J with > >>>>>>> your desired thread pool structure. > >>>>>>> > >>>>>>> (That said... why would you want to restructure your thread pools > >> like > >>>>>>> this?) > >>>>>>> > >>>>>>> -- > >>>>>>> Raul > >>>>>>> > >>>>>>> On Wed, Jan 4, 2023 at 8:33 PM Ak O <akin...@gmail.com> wrote: > >>>>>>>> In a case where, > >>>>>>>> {{0 T. 2}}'' > >>>>>>>> {{0 T. 4}}'' > >>>>>>>> {{0 T. 7}}'' > >>>>>>>> > >>>>>>>> How do I spin down the thread in pool number 4? > >>>>>>>> > >>>>>>>> I think operation, > >>>>>>>> {{55 T. ''}} > >>>>>>>> spins down only the most recently created thread. > >>>>>>>> > >>>>>>>> > >>>>>>>> Thank you Henry. > >>>>>>>> > >>>>>>>> Ak > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> On Wed., Jan. 4, 2023, 16:29 Henry Rich, <henryhr...@gmail.com> > >>>> wrote: > >>>>>>>>> Yes, that's right. > >>>>>>>>> > >>>>>>>>> Henry > >>>>>>>>> On 1/4/ > >>>>>>>> Rich > >>>>>>>> > >>>>>>>> 2023 6:11 PM, Ak O wrote: > >>>>>>>>>> Happy New Year, > >>>>>>>>>> > >>>>>>>>>> I hope you are all well. > >>>>>>>>>> > >>>>>>>>>> I am still struggling, please continue to have patience with me. > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> Where, > >>>>>>>>>> {{0 T. ''}}'' > >>>>>>>>>> creates a new thread. > >>>>>>>>>> > >>>>>>>>>> Does this, > >>>>>>>>>> {{0 T. 7}}'' > >>>>>>>>>> create a new thread in pool number 7? Or how is this function > >>>>>>> treated? > >>>>>>>>>> Thank you, > >>>>>>>>>> > >>>>>>>>>> Ak > >>>>>>>>>> > >> ---------------------------------------------------------------------- > >>>>>>>>>> For information about J forums see > >>>>>>> http://www.jsoftware.com/forums.htm > >>>> ---------------------------------------------------------------------- > >>>>>>>>> For information about J forums see > >>>>>>> http://www.jsoftware.com/forums.htm > >> ---------------------------------------------------------------------- > >>>>>>>> For information about J forums see > >>>> http://www.jsoftware.com/forums.htm > >> ---------------------------------------------------------------------- > >>>>>>> For information about J forums see > >> http://www.jsoftware.com/forums.htm > >>>>> > ---------------------------------------------------------------------- > >>>>> For information about J forums see > http://www.jsoftware.com/forums.htm > >>>> ---------------------------------------------------------------------- > >>>> For information about J forums see > http://www.jsoftware.com/forums.htm > >>>> > >>> ---------------------------------------------------------------------- > >>> For information about J forums see http://www.jsoftware.com/forums.htm > >> ---------------------------------------------------------------------- > >> For information about J forums see http://www.jsoftware.com/forums.htm > >> > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm