Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Programming > Forth > Re: FSL array i...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 14 of 15 Topic 3817 of 4285
Post > Topic >>

Re: FSL array indexing

by Krishna Myneni <krishnamyneni@[EMAIL PROTECTED] > Mar 12, 2008 at 07:56 PM

m_l_g3@[EMAIL PROTECTED]
 wrote:
> On Mar 9, 7:27 am, Krishna Myneni <krishnamyn...@[EMAIL PROTECTED]
> wrote:
>> Krishna Myneni wrote:
>>> Anybody know a good reason for the presence of SWAP in the following
>>> word, from fsl-util.xxx?
>>> : }   ( addr n -- addr[n])       \ word that fetches 1-D array
addresses
>>>           OVER CELL-  @[EMAIL PROTECTED]
>>>           * SWAP +
>>> ;
>>> Also, do the native code optimizing compilers eliminate the
unnecessary
>>> SWAP in the compiled code?
>>> Krishna
>> Recoding "}" to remove the frivolous SWAP, and manually inlining the
word CELL-
>> gave roughly an 8% improvement in performance, in kForth, for a curve
fitting
>> routine which uses array indexing heavily. The above definition of "}"
is
>> replaced by
>>
>> : }  OVER [ 1 CELLS ] LITERAL - @[EMAIL PROTECTED]
 * + ;
>>
>> Normally, a word like CELL- should be inlined,
> 
> 
> Recoding } in assembly would give you another 8% (or, maybe, even
> 11% ;-)
> ****table code almost never happens to be the fastest possible.
> 
> What sort of application/benchmark it was?
> 
> 

Unfortunately we have not reached the fastest potentially ****table 
implementation yet.

The recoding to inline "CELL-" in the definition of "}" gave nearly an 18%

increase in speed under Gforth. This is without resorting to assembly
language. 
Note that we have only inlined the word "CELL-". However, the word "}"
should 
really be declared to be an inline word (there's no easy ****table way to
do this 
now), and we will obtain an even greater performance increase.

The application is a curve-fitting program which fits a set of 513 points
to a 
function consisting of two Gaussian curves plus a baseline. See the
program

gfit-curvefit.fs

in the directory

ftp://ccreweb.org/software/gforth/fsl/demo/

Additional files needed are:

fsl-util.fs
dynmem.fs
gaussj.fs
curvefit.fs  (from .../fsl/extras/)
func_Ngauss.fs (from .../fsl/demo/)
wfms01-1.dat (data file from .../fsl/demo)


The test code is

: test  x{  y{  a{  deltaa{  npar  np  curvefit  fdrop ;

The word TEST executes one iteration of the curve fitting algorithm 
(Levenberg-Marquardt), without displaying any output. To time its
execution, use

MS@[EMAIL PROTECTED]
  TEST  MS@[EMAIL PROTECTED]
  SWAP - .

where MS@[EMAIL PROTECTED]
 exists in several Forth systems, and can be defined in Gforth as

: ms@[EMAIL PROTECTED]
  ( -- u )  utime 1 1000 m*/ d>s ;


Cheers,
Krishna
 




 15 Posts in Topic:
FSL array indexing
Krishna Myneni <krishn  2008-03-08 12:04:11 
Re: FSL array indexing
"C. G. Montgomery&qu  2008-03-08 17:38:51 
Re: FSL array indexing
Krishna Myneni <krishn  2008-03-08 19:35:05 
Re: FSL array indexing
"C. G. Montgomery&qu  2008-03-09 03:18:48 
Re: FSL array indexing
Krishna Myneni <krishn  2008-03-08 22:27:23 
INLINE (was: FSL array indexing)
anton@[EMAIL PROTECTED]   2008-03-09 10:57:12 
Re: INLINE (was: FSL array indexing)
Albert van der Horst <  2008-03-09 14:56:11 
Re: INLINE
Krishna Myneni <krishn  2008-03-09 14:09:17 
Re: INLINE
Andrew Haley <andrew29  2008-03-10 21:46:50 
Re: INLINE
Bruce McFarling <agila  2008-03-10 15:51:06 
Re: INLINE
mhx@[EMAIL PROTECTED] (M  2008-03-11 00:01:55 
Re: INLINE
Bruce McFarling <agila  2008-03-10 17:09:57 
Re: FSL array indexing
m_l_g3@[EMAIL PROTECTED]   2008-03-12 10:46:19 
Re: FSL array indexing
Krishna Myneni <krishn  2008-03-12 19:56:08 
Re: FSL array indexing
"C. G. Montgomery&qu  2008-03-09 17:24:27 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Sun Oct 12 13:29:17 CDT 2008.