C$ Project Home Page

The aim of this project is creating a unified language and system for seamless parallel programming on modern GPU's and CPU's. In future, it is planned to be extended to other processors.


10.10.2007 Publications & Presentations section added, with two publications uploaded. More publications to follow...

12.02.2007 The C$ Project home page created.

Project Idea & Description

The concept of C$ project comes from several sources. The project started as a quest for a convenient,portable and expressive language for GPGPU programming, as existing languages were either low-level or lacked expressivity. However, the GPU is not the only source of parallelism on the PC. The other source is modern multi-core processors. With the emergence of other commodity-level processors (such as CELL), a convenient language for writing parallel programs becomes very desirable.

We propose our C$ langauge as a C#-like language extended with several features for parallel programming support. C$ is a data-parallel function-level object-oriented language. The features C#-like language is extended with are as follows:
  • Array programming features, such as promotion of functions and operators
  • Functional programming features, such as no-side-effect functions, currying, closure etc.
  • Lazy Evaluation in order to be able to optimize array and functional expressions in runtime
  • Integration of OOP and Functional Programming, which includes, among all, the ability to view the functional type as an interface type and thus inherit (or implement) classes from functional types. This can be used to create sparse arrays, cached functions, file-backed data functions etc. Arrays and index domains are also special cases of functions, and entire array-programming paradigm is promoted to the promotion of functions. The main source of parallelism in the language is function evaluation for the entire domain simultaneously. This is one of the features which distinguishes C$ from other data-parallel languages.

C$ language shall allow to write portable and efficient programs which can run on a number of parallel architectures, including GPU-equipped commodity PCs. C$ is indended for writing various domain-specific libraries for parallel architectures, which, in turn, can be used to write HPC applications in C$.

C$ is intended to be translated to a number of target architectures (backends). Currently the list of intended architectures includes GPU, Multi-core CPU, Multi-GPU (SLI, CrossFire), and Multi-GPU + Multi-CPU Hybrid Architecture. In future, other architectures may be added, such as CELL processors, GPU clusters and GPU grids, as the data-parallel nature of the language is not tied to any particular architecture.

The language can be either interpreted (interpreter is being written now as a proof-of-concept), or compiled. Currently compilation into .NET MSIL code is intended, with function-parallel code being compiled into calls to C$ runtime for building expression trees, which then are optimized in run-time and executed on a backend.

Further info about C$ can be obtained from the documents published below.

Publications & Presentations


Adinetz A. V., Sakharnykh N. A., On Approaches to GPU Programming, Scientific Service in Internet 2007: Multicore Computer World (In Russian), September 23-29, Abrau-Durso, Russia
PDF (In Russian) Slides (PDF, in Russian) Slides (PPTX, in Russian)

Adinetz A. V., A Higher-Level and Portable Approach to GPGPU programming, SYRCoSE'2007, May 31-June 1, Moscow, Russia
PDF (In English) Slides (PDF, in English) Slides (PPTX, in English)

Language Documents

C$ Language Concept
C$ Main Idea
C$ System Structure
C$ Sample Code (not final)

Support & Acknowledgements

Planned Releases

  • Initial alpha version with .NET compiler and GPU runtime is planned for end of December 2007.

Last edited Oct 9, 2007 at 11:03 PM by adinetz, version 9