Macaulay2 / Macaulay2/M2

Bizarre crash involving local symbol and computing basis in parallel

Open
#3,439 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Engine threads
Dominant language
Macaulay2
Stars
435
Forks
297
Avg merge
4d 20h
Merged PRs (30d)
11

Description

I accidentally made a typo in a random piece of code I wrote, and I can't understand the ensuing crash. To replicate, put this in a file and run from "needs" until the end.

await = method(Dispatch => Thing)
await Thing := identity
await BasicList := L -> apply(L, await)
await Task := await @@ taskResult

async = method(Dispatch => Thing)
async Function := f -> (x -> schedule(f, x))

repeat = (n, R) -> (
    if n == 1 then return n;
    r := {repeat(n//2, R), repeat(n//2, R)};
    basis(10, ideal vars R);
    t) --                                <-- here is my typo!
repeat = async repeat

end--
restart
needs "parallel.m2"

R = ZZ/101[x_0..x_10]
elapsedTime await repeat(allowableThreads*2, R)

Note the typo I made, the t should have been an r. Here is what I got on a 1.24.05 binary:

i1 : needs "parallel.m2"

i2 : 
     R = ZZ/101[x_0..x_10]

o2 = R

o2 : PolynomialRing

i3 : elapsedTime await repeat(allowableThreads*2, R)
 -- 0.38629 seconds elapsed

o3 = t

o3 : Symbol

i4 : /home/linuxbrew/.linuxbrew/share/Macaulay2/Core/expressions.m2:675:47:(1):[21]: error: unknown engine error
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/expressions.m2:675:47:(1):[21]: error: unknown engine error
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/expressions.m2:675:47:(1):[21]: error: unknown engine error
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/basis.m2:262:10:(1):[19]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/basis.m2:262:10:(1):[19]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/basis.m2:262:10:(1):[19]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:625:51:(1):[18]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:625:51:(1):[18]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:625:51:(1):[18]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:639:23:(1):[17]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:639:23:(1):[17]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:639:23:(1):[17]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:638:26:(1):[16]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:638:26:(1):[16]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:638:26:(1):[16]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:40:8:(1):[15]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:40:8:(1):[15]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:154:80:(1):[14]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:40:8:(1):[15]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:154:80:(1):[14]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:40:8:(1):[13]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:154:80:(1):[14]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:631:83:(1):[12]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:40:8:(1):[13]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:40:8:(1):[13]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:40:8:(1):[11]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:631:83:(1):[12]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:631:83:(1):[12]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:154:80:(1):[10]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:40:8:(1):[11]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:40:8:(1):[11]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:154:80:(1):[10]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:40:8:(1):[9]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:154:80:(1):[10]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/basis.m2:226:10:(1):[8]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:40:8:(1):[9]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:40:8:(1):[9]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/basis.m2:144:73:(1):[7]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/basis.m2:226:10:(1):[8]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/basis.m2:226:10:(1):[8]: --back trace--/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/basis.m2:144:73:(1):[7]: --back trace--

/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:154:80:(1):[6]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:154:80:(1):[6]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/basis.m2:144:73:(1):[7]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:17:8:(1):[5]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:17:8:(1):[5]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:154:80:(1):[6]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/basis.m2:149:72:(1):[4]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/basis.m2:149:72:(1):[4]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:154:80:(1):[3]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:17:8:(1):[5]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:154:80:(1):[3]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:17:8:(1):[2]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/basis.m2:149:72:(1):[4]: --back trace--
parallel.m2:12:5:(3):[1]: --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:17:8:(1):[2]: --back trace--
parallel.m2:10:28:(3): --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/methods.m2:154:80:(1):[3]: --back trace--
parallel.m2:12:5:(3):[1]: --back trace--
parallel.m2:10:28:(3): --back trace--
/home/linuxbrew/.linuxbrew/share/Macaulay2/Core/option.m2:17:8:(1):[2]: --back trace--
parallel.m2:12:5:(3):[1]: --back trace--
parallel.m2:10:28:(3): --back trace--

If I fix the t to r then I don't get this error. It also doesn't happen if the first input to repeat is at most a little above allowableThreads.

What on earth is happening?

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the crash with the supplied Macaulay2 input and inspect parallel.m2 first, then trace the reported paths in Core/basis.m2 and Core/expressions.m2. Compare runs with t and r, and with different thread counts. Done means explaining the interaction that produces the unknown engine error and establishing a regression test or a narrowly defined fix.

Written by the indexing model from the issue text.

Assessment

Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.