[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: row vs. column-major-order



According to this article on Wikipedia, Fortran uses column-major-order:

http://en.wikipedia.org/wiki/Row-major_order

"Aubrey Jaffer" <agj@xxxxxxxxxxxx> wrote in 
message news:20060517204956.7AEE91B77DA@xxxxxxxxxxxxxxxxxxxxxxxx
> Whether array elements are stored in row- or column-major-order
> matters to efficient cache use when the array is scanned.
>
> I believe that Scheme array code would run faster in
> column-major-order than it does in row-major-order.
>
> The functions which enumerate each element of an array reverse the
> indexes for each element access:
>
>    (define (ra2v dims idxs)
>      (if (null? dims)
>   (let ((val (apply array-ref ra (REVERSE idxs))))
>     ...)
>   (do ((idx (+ -1 (car dims)) (+ -1 idx)))
>       ((negative? idx) vect)
>     (ra2v (cdr dims) (cons idx idxs)))))
>    (ra2v dims '())
>
> But in column-major order the reverse is done only once:
>
>    (define (ra2v dims idxs)
>      (if (null? dims)
>   (let ((val (apply array-ref ra idxs)))
>     ...)
>   (do ((idx (+ -1 (car dims)) (+ -1 idx)))
>       ((negative? idx) vect)
>     (ra2v (cdr dims) (cons idx idxs)))))
>    (ra2v (REVERSE dims) '())
>
> Is Fortran's using column-major-order related to this?
>
>