Arrays, non-determinism, side-effects, and parallelism: A functional perspective
Proc. of a workshop on Graph reduction
Nondeterminism with referential transparency in functional programming languages
The Computer Journal
Implementing the NAS Benchmark MG in SAC
IPDPS '02 Proceedings of the 16th International Parallel and Distributed Processing Symposium
WITH-Loop-Folding in SAC - Condensing Consecutive Array Operations
IFL '97 Selected Papers from the 9th International Workshop on Implementation of Functional Languages
Dissecting Cyclops: a detailed analysis of a multithreaded architecture
ACM SIGARCH Computer Architecture News
Focus on SDL
Single Assignment C: efficient support for high-level array operations in a functional setting
Journal of Functional Programming
Shared memory multiprocessor support for functional array processing in SAC
Journal of Functional Programming
SAC: a functional array language for efficient multi-threaded execution
International Journal of Parallel Programming
Cell broadband engine architecture and its first implementation: a performance view
IBM Journal of Research and Development
ACM Transactions on Programming Languages and Systems (TOPLAS)
Parallel Computing Experiences with CUDA
IEEE Micro
Validity of the single processor approach to achieving large scale computing capabilities
AFIPS '67 (Spring) Proceedings of the April 18-20, 1967, spring joint computer conference
With-Loop scalarization – merging nested array operations
IFL'03 Proceedings of the 15th international conference on Implementation of Functional Languages
IFL'05 Proceedings of the 17th international conference on Implementation and Application of Functional Languages
With-Loop fusion for data locality and parallelism
IFL'05 Proceedings of the 17th international conference on Implementation and Application of Functional Languages
CEFP'11 Proceedings of the 4th Summer School conference on Central European Functional Programming School
Hi-index | 0.00 |
With the rising variety of hardware designs for multi-core systems, the effectiveness in exploiting implicit concurrency of programs plays a more vital role for programming such systems than ever before. We believe that a combination of a data-parallel approach with a declarative programming-style is up to that task: Data-parallel approaches are known to enable compilers to make efficient use of multi-processors without requiring low-level program annotations. Combining the data-parallel approach with a declarative programming-style guarantees semantic equivalence between sequential and concurrent executions of data parallel operations. Furthermore, the side-effect free setting and explicit model of dependencies enables compilers to maximise the size of the data-parallel program sections. However, the strength of the rigidity of the declarative approach also constitutes its weakness: Being bound to observe all data dependencies categorically rules out the use of side-effecting operations within data-parallel sections. Not only does this limit the size of these regions in certain situations, but it may also hamper an effective workload distribution. Considering side effects such as plotting individual pixels of an image or output for debugging purposes, there are situations where a non-deterministic order of side-effects would not be considered harmful at all. We propose a mechanism for enabling such non-determinism on the execution of side-effecting operations within data-parallel sections without sacrificing the side-effect free setting in general. Outside of the data-parallel sections we ensure single-threading of side-effecting operations using uniqueness typing. Within data-parallel operations however we allow the side-effecting operations of different threads to occur in any order, as long as effects of different threads are not interleaved. Furthermore, we still model the dependencies arising from the manipulated states within the data parallel sections. This measure preserves the explicitness of all data dependencies and therefore it preserves the transformational potential of any restructuring compiler.