On Tuesday, 23 June 2015 at 10:50:51 UTC, John Colvin wrote:
If I remember correctly, core.simd should work with every
compiler on every supported OS. What did you try that didn't
work?
I figured out the issue! You have to compile using the -m64 flag
to get it to work on Windows (this works on both dmd and rdmd).
The 32bit specification does not support SIMD. I don't think I
had ever noticed that it wasn't using a 64bit compilation.
I was a little disheartened getting an error running one of the
first pieces of code on this page http://dlang.org/simd.html
the second line below, some casting issue.
int4 v = 7;
v = 3 * v; // multiply each element in v by 3
Outside of that, I can see one issue. I was overloading a version
of exp that takes a real and returns a real. I see no support for
a real SIMD type, perhaps because the CPUs don't support it. So I
pretty much could only overload the float or double versions.
On std.parallelism, I noticed that I could only loop through the
static arrays with foreach with I appended them with []. I still
get mixed up on that syntax. The good thing about static loops is
that I could determine the length at compile time. I'm not
positive, but I think I might be able to get it set up so that I
could have different functions, one non-parallel below some
length and one parallel above some length. This is good because
the parallel one may not be able to use all the function
attributes of the non-parallel ones.
I haven't been able to get anything like that to work for a
dynamic array version as the length is not known at compile time,
just one big function.