Skip to content

Experimental n-dimensional array implementation in Clojure. Based on ideas from the Blaze project, the Chapele language, the ZPL language and others.

Notifications You must be signed in to change notification settings

clojure-numerics/arrayspace

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Introduction

This is an experimental n-dimensional array implementation in Clojure. Based on ideas from the Blaze project, the Chapele language, the ZPL language and others.

Core Abstractions

These top level abstractions are mainly based off the main abstractions in the Chapele language.

Domain

A Domain represents an index set. Domains are a generalization of the region concept pioneered by the ZPL language. Domains can be named, assigned, and passed between functions. Domains support iteration, intersection, set-oriented queries, and operations for creating other domains. They are also used to declare, slice, and reallocate arrays

A Domain is used to represent each domain value in a program. As such, its main responsibility is to store a representation of the domain’s index set. For layouts and regular domains, the complete index set representation is typically stored directly within the descriptor. For distributions of irregular domains that require O(numIndices) storage to represent the index set, a distribution will typically store only summarizing information in its global descriptor. The representation of the complete index set is spread between its associated local descriptors in order to achieve scalability

DomainMap

A domain map specifies the implementation of the domains and arrays that are mapped using it. That is, it defines how domain indices and array elements are mapped to distributions, how they are stored in memory, and how operations such as accesses, iteration, and slicing are performed. Each domain and array is mapped using some domain map.

Distribution

A distribution abstractly represents a unit of the target architecture that supports processing and storage. On conventional machines, a distribution is typically defined to be a single node, its memory, and its multicore/SMP processors.

Distributions facilitate the storage/retrieval of the actual elements of an array. It is the responsibility of the DomainMap to translate the coordinates of a domain into the low-level storage coordinates of the elements contained in a distribution.

Many implementations of Distributions will also implement the Indexed and Counted protocols for low level access to their elements.

Concept map

ConceptNumPyBlazeZPLChapelex10RKJAPL
Cartesian Coordinate Spaceshape tupleSpace & ShapeRegionDomain/IndexSetRegion
Coordinatesx,y… coordsIndexPoint
Mapping of coords to storageLayoutDomainMap
Low Level StoragebufferByteProviderLocalePlace
Storage DistributionDistribution

Further Reading

About

Experimental n-dimensional array implementation in Clojure. Based on ideas from the Blaze project, the Chapele language, the ZPL language and others.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published