Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Reorder ndarray dimensions and associated strides for loop interchange.

License

NotificationsYou must be signed in to change notification settings

stdlib-js/ndarray-base-loop-interchange-order

About stdlib...

We believe in a future in which the web is a preferred environment for numerical computation. To help realize this future, we've built stdlib. stdlib is a standard library, with an emphasis on numerical and scientific computation, written in JavaScript (and C) for execution in browsers and in Node.js.

The library is fully decomposable, being architected in such a way that you can swap out and mix and match APIs and functionality to cater to your exact preferences and use cases.

When you use stdlib, you can be absolutely certain that you are using the most thorough, rigorous, well-written, studied, documented, tested, measured, and high-quality code out there.

To join us in bringing numerical computing to the web, get started by checking us out onGitHub, and please considerfinancially supporting stdlib. We greatly appreciate your continued support!

loopOrder

NPM versionBuild StatusCoverage Status

Reorder ndarray dimensions and associated strides for loop interchange.

Installation

npm install @stdlib/ndarray-base-loop-interchange-order

Alternatively,

  • To load the package in a website via ascript tag without installation and bundlers, use theES Module available on theesm branch (seeREADME).
  • If you are using Deno, visit thedeno branch (seeREADME for usage intructions).
  • For use in Observable, or in browser/node environments, use theUniversal Module Definition (UMD) build available on theumd branch (seeREADME).

Thebranches.md file summarizes the available branches and displays a diagram illustrating their relationships.

To view installation and usage instructions specific to each branch build, be sure to explicitly navigate to the respective README files on each branch, as linked to above.

Usage

varloopOrder=require('@stdlib/ndarray-base-loop-interchange-order');

loopOrder( shape, strides )

Reordersndarray dimensions and associated strides forloop interchange.

// Define an array shape:varshape=[2,2];// Define the strides for the input arrays:varstridesX=[2,1];// row-majorvarstridesY=[4,2];// row-major// Define the strides for the output array:varstridesZ=[1,2];// column-major// Resolve the loop interchange order:varo=loopOrder(shape,[stridesX,stridesY,stridesZ]);// returns [...]

The function returns an array having the following elements:

[ <shape>, ...<strides> ]

where

  • shape: dimensions sorted in loop order.
  • ...strides: strides for each respective ndarray sorted in loop order.

For all returned arrays, the first element corresponds to the innermost loop, and the last element corresponds to the outermost loop.

Notes

  • When iterating over the elements of a multi-dimensional array, accessing elements which are closer in memory can improve performance. To this end,loop interchange is a technique used inloop nest optimization to improve locality of reference and take advantage of CPU cache.

    The purpose of this function is to orderndarray dimensions according to the magnitude of array strides. By using the ordered dimensions and associated strides, one can construct nested loops (one for each dimension) such that the innermost loop iterates over the dimension in which array elements are closest in memory and the outermost loop iterates over the dimension in which array elements are farthest apart in memory. As a consequence, element iteration is optimized to minimize cache misses and ensure locality of reference.

  • Cache performance may be degraded if the layout order (i.e., row-major or column-major) differs for the input and outputndarrays. This function is intended to optimize cache performance for the most common layout order. Accordingly, if the outputndarray has a different layout order (e.g., if the inputndarrays are row-major and the outputndarray is column-major), cache misses are likely for the outputndarray. In general, to ensure best performance, input and outputndarrays should have the same layout order.

  • The function assumes that the input and outputndarrays have the same shape. Hence, loop interchange order should only be determinedafter broadcasting.

Examples

vararray=require('@stdlib/ndarray-array');vargetShape=require('@stdlib/ndarray-shape');vargetStrides=require('@stdlib/ndarray-strides');varloopOrder=require('@stdlib/ndarray-base-loop-interchange-order');// Create ndarrays:varx=array([[1,2],[3,4]]);vary=array([[5,6],[7,8]]);varz=array([[0,0],[0,0]]);// Resolve loop interchange data:varo=loopOrder(getShape(x),[getStrides(x),getStrides(y),getStrides(z)]);// returns [...]console.log(o);

Notice

This package is part ofstdlib, a standard library for JavaScript and Node.js, with an emphasis on numerical and scientific computing. The library provides a collection of robust, high performance libraries for mathematics, statistics, streams, utilities, and more.

For more information on the project, filing bug reports and feature requests, and guidance on how to developstdlib, see the main projectrepository.

Community

Chat


License

SeeLICENSE.

Copyright

Copyright © 2016-2025. The StdlibAuthors.

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp