Re: array multiplying (for a change) [message #38022] |
Tue, 17 February 2004 12:18  |
JD Smith
Messages: 850 Registered: December 1999
|
Senior Member |
|
|
On Tue, 17 Feb 2004 10:21:04 -0600, Craig Markwardt wrote:
>
> "Christopher Lee" <cl@127.0.0.1> writes:
>> What I want is result = a * b'
>> where b' = rebin(reform(b, [1,20,1]), 10,20,30)
>> , which (clearly :) I know how to do in principle.
> ...
>> Are there any functions, buit-in or otherwise, that I can use? I found
>> CMAPPLY, which I can beat into a form which works. (I use a similar
>> function now but it's very _VERY_ bad code).
>>
>> A quick test using loops versus rebin/reform of the shows loops to be
>> slower (for a matrix 72,36,31,200) which I'm not really surprised by. Is
>> this a case where a DLM would be faster?
I can think of almost no case where a DLM wouldn't be faster; the real
questions is, is a DLM faster by a large enough margin to make it
worth it?
> My philosophy is that DLMs are almost always bad, unless you are
> developing an embedded system. They tie you to a particular version
> of IDL and a particular OS and architecture. They are rather difficult
> to debug, and making changes is rather laborious. DLMs = bleccchhh.
That may be true to some extent, but I have a method for calling
compiled C code automatically within IDL which is, as far as I can
tell, as portable as possible. The MAKE_DLM routine allows you to
invoke a standard compiler to produce a shared executable library. A
few other tricks then check that the compilation succeeded, and
execute the compiled code (I usually just use CALL_EXTERNAL). Is this
guaranteed to work? No, of course not. The compiler could be
mis-configured or missing. But it does provide a decent degree of
portability, and completely relieves the end-user from having to know
which end of a compiler is up. The AUTO_GLUE functionality makes it
easy to call existing functions (e.g. N.R.) without too much trouble.
In my case, I include an equivalent but slow version of the algorithm
coded in IDL, which I use as a fall-back if the compilation fails.
JD
|
|
|