Dear Tony
Please change OOP to,
case[nam_] :=
Module[{begin, end},
nam[set[{be_, en_}]] := {begin, end} = {be, en};
sol = NDSolve[{y'[x] == Sin[x^2 + 2 x]/(2 Cos[x/2 + 3 x] + 3),
y[0] == 0}, y, {x, 0, 500}, MaxSteps -> 10^6, AccuracyGoal -> 30];
go[] := Table[{x, y[x] /. sol[[1]]}, {x, begin, end, 0.01}]
]
object = {Association["name" -> Unique[k], "range" -> {0, 125},
"kernel" -> kernelList[[1]]],
Association["name" -> Unique[k], "range" -> {125, 250},
"kernel" -> kernelList[[2]]],
Association["name" -> Unique[k], "range" -> {250, 375},
"kernel" -> kernelList[[3]]],
Association["name" -> Unique[k], "range" -> {375, 500},
"kernel" -> kernelList[[4]]]};
Map[ParallelEvaluate[case[#name], #kernel] &, object];
Map[ParallelEvaluate[#name[set[#range]], #kernel] &, object];
Then, execute as,
enter codin1 = SessionTime[]
para1 = ParallelEvaluate[go[]];
SessionTime[] - in1e here
ListPlot[para1]
In the Mathematica parallel calculation style, it should be avoided much communication between controller and nodes. From this point of view, NDSolve should be evaluated on each node.