Mr. Roman Pearce

1678 Reputation

19 Badges

19 years, 99 days
Research Associate
Abbotsford, British Columbia, Canada

I am a research associate at Simon Fraser University and a member of the Computer Algebra Group at the CECM.

MaplePrimes Activity

These are replies submitted by roman_pearce

@Carl Love When threads share execution resources (e.g. hyperthreading) cpu times can increase substantially. The operating system reports the total number of clock cycles observed by each thread, but it has no way to know how much of a core each thread got to use. With a hyperthreaded Core i7, each thread might run at about 60% of its normal speed. That's a 20% increase in throughput, but the operating system will report twice as many cpu seconds. It makes the software look inefficient.  That's before any extra overhead from actually using more threads.

Intel Core i7 3930k 3.20 GHz 64-bit Linux, 6 cores, no hyperthreading. Cpu time is a consistent 1.53s, real speedup is 1.86x for 2, 2.62x for 3, 3.28x for 4, 3.85x for 5, 4.37x for 6 threads. The operating system can take up to 10ms to start running a thread (Windows can take 25ms) and these little inefficiencies can wipe out the parallel speedup on small examples (Amdahl's law).

AMD FX-8350 4 GHz 64-bit Linux, 8 cores. Pairs of cores share some execution resources. Cpu time is 1.83s for 1-2 threads, 1.89s for 2-4, then 2.24/2.56/2.86/3.13s. Real speedup is 1.83x for 2, 2.48x for 3, 3.05x for 4, 3.13x for 5, 3.21x for 6, 3.29x for 7 and 3.38x for 8. AMD was sued for advertising 8 cores.

Another thing that plays havoc is that most CPUs run lightly loaded cores at higher clock speeds (turbo boost). Your software can scale linearly with the number of cores and it will look like something is wrong.

What cpu is this?

@Carl Love Try kernelopts(gcmaxthreads=1); to turn off the parallelism in the garbage collector. Here is an example where kernelopts(numcpus) should have an effect:  

f := expand((1+x+y+z+t)^25): g := f+1: p := CodeTools:-Usage( expand(f*g) ):


I think you should ask Maplesoft support at about running Maple on AWS.  It will use a license, however they may also allow you to activate more than one machine.  Check with them.

64-bit Maple can use 100 GB of memory without modification.  However the maximum size of a Maple object is 2^32-1 words, or 32 GB.  E.g. a list can have at most 4 billion entries, or a polynomial (which stores a monomial and coefficient per term) can have at most 2 billion terms.  The size limit does not apply to dense matrices, so you can have a 100000 x 100000 matrix (75 GB).

The answer I think is that the algcurves package could use an update.

There is no global flag you can set to do this.  For a matrix A you would do one of the following:

A := map(expand,A);  # splits rational expressions into a sum of terms
A := map(normal,A,expanded);  # keeps rational expressions together

When computing with rational expressions, e.g. in Gaussian elimination for a matrix of polynomials, Maple takes advantage of partial factorizations.  Factored form can be very fast if common factors are pulled out or cancelled.  Expanded form often gives the worst case performance.

No, you have to do it manually with the Groebner package and the characteristic option.

@Carl Love The inner command computes dot products, matrix vector products, and matrix products, where the vectors and matrices are represented by lists or lists of lists.

inner([1,2], [3,4]);
inner([[1,2],[3,4]], [5,6]);
inner([[1,2],[3,4]], [[5,6], [7,8]]);
inner([[1,2],[3,4]], [[5,6], [7,8]], [9,10]);

I thought about putting Expand(f) mod p first, but it reduces RootOfs.  I think it's better to combine terms via substitution first.  The coeffs command will call expand if it has to.

Let each task check a global variable from time to time, and when a task completes set the variable to true.  

There's no YAML import as far as I know.  It might not be that hard to write.

@Thomas Richard This is really weird.  Any idea what is going on?

Error, (in NumberTheory:-ContinuedFraction:-Term) unable to compute Laurent series and terms

Maplesoft officially supports the current release and the two previous releases, which means Maple 2016, 2015, and Maple 18 currently.  But if you find bugs in Maple 16 it's worth reporting them.  And you can always post on this website to get unofficial support.

I have no idea how long future releases will officially support Windows 7, but it's also hard to think of a reason why they would not work on Windows 7.  The current release of Maple runs on Windows XP for instance.

@Carl Love I just copied his text.  He was solving for {tgtX[4], tgtY[4]}, where the other variables are allowed to take on any value and are not solved for.  I'm not sure if that's what he wanted, I couldn't really tell.  Set infolevel[solve] := 5; and Maple will tell you when the system is inconsistent.

Your solution doesn't satisfy all the equations, e.g. eq2.  Maple says the general system is inconsistent.  It could still have a solution for particular values of the parameters.


Try something like this:

vars := [x,y,z]:
f := randpoly(vars,degree=2,dense);
C := [coeffs(f,vars,'M')];
M := [seq(map2(degree,i,vars), i=[M])];
1 2 3 4 5 6 7 Last Page 2 of 39