Questions about the generation and use of compiled functions using Compile.
58
votes
4answers
3k views
How to compile effectively?
What are the best practices of compiling functions? I understand that this is a vague question, but let me list some aspects that might trigger useful answers. Some of these have already been answered ...
50
votes
6answers
3k views
List of compilable functions
Is there somewhere a list on the functions that Compile can compile, or the cases in which a particular function can be compiled that I haven't found?
I'd be glad ...
32
votes
2answers
979 views
Internal`Bag inside Compile
Since Internal`Bag, Internal`StuffBag and Internal`BagPart can be compiled down, it is a ...
31
votes
4answers
1k views
Speeding up this fractal-generating code
I used the code below (which is a sample from this gist containing more similar code) in my answer to my own question about Mandelbrot-like sets for functions other than the simple quadratic on ...
27
votes
4answers
1k views
How well does Mathematica code exported to C compare to code directly written for C?
Essentially what it says in the title. Mathematica can, IIRC, export it's code to C. How much overhead does that inflict on the code, as compared to writing it from scratch in C?
15
votes
3answers
358 views
How to force Compile to return multiple results?
I would like to return two separate values from a compiled function, but Mathematica refuses to use the compiled version. Here is a narrowed-down example:
...
14
votes
1answer
157 views
How can you profile compiled code?
Is it possible to profile compiled code? I am using Workbench 2.0 and the Profile[] command but I do not get a profile of my compiled function.
I apologize if the answer is readily available but I ...
13
votes
3answers
270 views
Quick multiple selections from a list
What is the fastest way to make multiple selections from a list? Compiled methods included.
For example, here are two methods for selecting a subset, compared:-
...
13
votes
2answers
302 views
Fastest way to measure Hamming distance of integers
I am looking for a fast and robust way to calculate the Hamming distance of integers. The Hamming distance of two integers is the number of matching bits in their binary representations. I expect that ...
13
votes
1answer
181 views
Is the sharing of variables in Module/Block within Compile documented behavior?
Today I noticed something, I think for the first time.
When used inside Compile variable values within Module (and ...
13
votes
1answer
228 views
Using Boost with CreateLibrary
I was looking at the answer of Leonid of Faster alternatives for DayOfWeek and wanted to see how hard it would be to do something similar in C++ using an external library like Boost. I tried to ...
13
votes
1answer
487 views
What technical obstacles prevent all Mathematica code compiling to C
The following represents an attempt at a very simple view of the levels in Mathematica code:
We have had lots of questions about deployment and compiling Mathematica code to C. Some of these for ...
12
votes
2answers
415 views
Efficiently collecting results inside a compiled function
When we don't know the number of results that will be generated, the usual way to collect results is Reap/Sow. Another ...
11
votes
2answers
242 views
How can I compile this function
I want to simplify my function f1 to f2, but f2 can't be compiled. How can I make it ...
11
votes
3answers
279 views
What compilers are “suitable” for CompilationTarget->“C”?
The documentation for CompilationTarget says, "if you do not have a suitable C compiler then you will not be able to set CompilationTarget to C". Well at this time, I don't have a compiler installed ...
11
votes
2answers
558 views
Speeding up random walk for many particles
I am trying to speed up this code for many particles to take a random walk. I'm not sure why it is so slow for such a simple task.
I got a few hints from colleagues to reduce the precision of the ...
11
votes
2answers
119 views
How do you determine the optimal autocompilation length on your system
When you pack lists there is an overhead therefore packing a list with, say, 2 elements is likely to cost more than you get back in efficiency. Mathematica has default list lengths for which functions ...
11
votes
1answer
752 views
How do I get Mathematica to recognize a C compiler on a 64-bit Windows machine?
Mathematica does not recognize any C compiler on my computer. I run Mathematica 8.0.4.0 on Windows 7. I've tried to make sure various C compilers are installed on my computer, but I'm not sure how to ...
11
votes
1answer
162 views
Is it possible to use Compile on a function with optional arguments?
My Mathematica is a little rusty, so apologies in advance. I think my problem is quite simple, but I can't seem to find the answer on my own!
Simple example : ...
11
votes
1answer
270 views
Parallel compiled functions running on parallel sub-kernels
Question
Why is it, that compiled, Listable, parallel functions which work perfectly fine on the main kernel, do not run in parallel on sub-kernels?
Details
...
11
votes
1answer
289 views
Which Distributions can be Compiled using RandomVariate
Recently, Oleksandr kindly showed a list of Mathematica commands that can be compiled.
RandomVariate was part of that list. However, whether this can be compiled depends upon the distribution that is ...
10
votes
3answers
422 views
Function does not compile with Greater in it
I have to speed up a matrix-calculation and would like to use Compile for it, though it fails and produces an unknown error message:
...
10
votes
3answers
237 views
Efficient implementation of a linear complexity measure of binary sequences
For a implementation of testing the quality of random number generators I implemented the NIST test suite in Mathematica based on the nice workbook by Ilja Gerhardt.
However I took up the challenge ...
10
votes
2answers
152 views
Avoiding MainEvaluate in a CompiledFunction to fetch “global” variables
I'm trying to write a simulation using Mathematica 8.0. Since I will most likely be doing the same operation over and over again, I'm trying to Compile whatever I ...
10
votes
2answers
98 views
tol and None in output of CompilePrint
A bit of background:
I'm trying to fit a very complicated symbolic function. By compiling the function I got about 100x speedup, but I would need another 10. Therefore I'm trying to understand if the ...
10
votes
2answers
181 views
Compiling LinearSolve[] or creating a compilable procedural version of it
Earlier today I had a discussion with a representative at Premier Support about the 2 questions I've asked here over the past couple of days:
Seeking strategies to deploy a function securely ...
10
votes
1answer
176 views
Removing calls to MainEvalute when using inlined compiled closures
This question is tightly related to the answer Shaving the last 50 ms off NMinimize.
There @OleksandR shows how inlined closures can be used to eliminate calls to ...
10
votes
2answers
249 views
Using Goto and Label in compiled function?
Below I post some rudimentary code to show that there is something wrong using Goto and Label commands in compiled functions (or I believe there is something wrong). It seems that the command Label is ...
10
votes
1answer
520 views
How to install and configure Intel C++ Compiler for Mathematica correctly?
I wish to try the trial version of the latest Intel C++ Compiler for Windows with Mathematica. I have downloaded the current version of Intel® C++ Composer XE 2011 for Windows and installed only the ...
10
votes
1answer
226 views
Using Apply inside Compile
In this great answer a compiled version of the Nelder-Mead algorithm is presented.
Since it works on arbitrary dimensions (i.e. arbitrary number of arguments), it has to use apply on the objective ...
9
votes
3answers
270 views
Compiled function error - nontensor object created
I'm trying to optimize code that uses Position MANY times.
The following toy code works:
...
9
votes
2answers
162 views
Can RecurrenceTable make use of CompiledFunction?
I'm trying to implement a discrete-time 2D Verlet algorithm for a point-mass subject to a softened gravitational interaction as a test for a more computationally intensive simulation using ...
8
votes
1answer
233 views
Why is MainEvaluate being used when LinearSolve can be compiled?
According to this question LinearSolve can be Compiled. However, CompilePrint shows a MainEvaluate but no-warning is generated. It appears that LinearSolve is not ...
8
votes
1answer
135 views
error when defining a compiled function with ReplacePart
I always have difficulty in writing a non-trivial compiled function. I'm using Mathematica 9. Please see the following code
...
8
votes
0answers
178 views
Using Compile to speed up Function with PermutationProduct
I have the following fairly simple routine dot involving PermutationProduct that I wish to speed up using ...
7
votes
3answers
334 views
Threading a compiled function over multiple arguments of different lengths
I am interested in threading a compiled function over multiple argument lists of different lengths.
I will explain this in two steps:
Suppose f is some function. Then one can define another ...
7
votes
2answers
152 views
Compiling more functions that don't call MainEvaluate
I would like to use Compile with functions defined outside Compile.
For example if I have the two basic functions F and G
F[x_] := x + 2
G[x_] := x
And I want ...
7
votes
2answers
392 views
Working with large data, pass-by-reference, compiled functions
I think I know the answer to this, but after two days of Googling, this is my last effort before going down an unwanted path...
I have a function that takes lots of large data as arguments as well as ...
7
votes
1answer
162 views
Compiling Map over expression that yields a ragged array
I'm trying to speed up a function that looks in the neighborhood of each 3D point in a large dataset and finds all the points within 1 unit in each direction, x, y, z.
I've started by using ...
7
votes
1answer
293 views
7
votes
0answers
80 views
Compile not correctly initializing a variable defined inside Module
In the following example, inside the minimumX's Module, x is initialized to 1, but the ...
6
votes
2answers
131 views
MemberQ weird inside Compile
Compile[{{x, _Real, 1}}, MemberQ[x, 2]][{2}]
outputs False.
In fact, it seems to get compiled as ...
6
votes
2answers
193 views
Compiling a spatial predator-prey model and optimising it for speed
I just made a spatial predator-prey model but it runs a little slow and I am seeking some advice on how to compile it to optimise it for speed.
I first define matrix with 0 for an empty site, 1 for a ...
6
votes
1answer
194 views
How to compile Map and MapAt
I have a long list (say, million of elements, like this one:
{{{1.0, 2.0}, 3}, {{4.0, 5.0}, 6},...}
I would like to compile a function ...
6
votes
1answer
270 views
Speeding up numerical Fourier Transform
I wrote this function NFourierTransform, which takes a function $f(k)$ and numerically calculates the fourier transform integral for discrete values of $k \in ...
6
votes
2answers
353 views
Expression evaluation inside of FindRoot inside a Compiled Function
I'm trying to get some performance increase out of my own implicit differential equation solver using Compile[]. The uncompiled function is of the following form:
...
6
votes
1answer
151 views
Why does compiling a function with ConstantArray give an error when used in parallel?
Here is a sample compiled function:
...
6
votes
1answer
264 views
Compiling a recursive formula
My question is related to computing what is called "invariant measure" for a particular well known fractal - the Sierpinski triangle.
We have an array m of four two by two matrices, say
...
6
votes
1answer
127 views
Elementwise, compilable min function
I am trying to implement efficiently a transfer-matrix like algorithm. On each iteration, I have two vectors $x=\{x_1,\dots,x_n\}$, $y=\{y_1,\dots,y_n\}$ with real numbers and I need to compute the ...
6
votes
1answer
112 views
Unexpected behavior of Compile, Return and ;
Could somebody explain why
test = Compile[{{x}},
Return[x];
];
test[0.]
returns
...
