Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Ateji PX

From Wikipedia, the free encyclopedia
Object-oriented programming language extension for Java
The topic of this articlemay not meet Wikipedia'sgeneral notability guideline. Please help to demonstrate the notability of the topic by citingreliable secondary sources that areindependent of the topic and provide significant coverage of it beyond a mere trivial mention. If notability cannot be shown, the article is likely to bemerged,redirected, ordeleted.
Find sources: "Ateji PX" – news ·newspapers ·books ·scholar ·JSTOR
(April 2018) (Learn how and when to remove this message)
Ateji PX
Paradigmobject-oriented,pi calculus
Typing disciplinestrong,static
Licensecommercial, free 30-day Premium Trial & free Edition
Websitewww.Ateji.com
Influenced by
Java

Ateji PX is anobject-orientedprogramming language extension forJava. It is intended to facilliateparallel computing onmulti-core processors,GPU, Grid and Cloud.[1][2] It appears to be no longer maintained.[3]

Ateji PX can be integrated with theEclipse IDE, requires minimal learning of the additional parallel constructs and does not alter the development process.

Code examples

[edit]

Hello World

[edit]
publicclassHelloWorld{publicstaticvoidmain(String[]args){[||System.out.println("Hello");||System.out.println("World");]}}

Each|| symbol introduces a parallel branch. Running this program will print either

HelloWorld

or

WorldHello

depending on how the parallel branches happen to be scheduled.

Data parallelism

[edit]
[||(inti:array.length)array[i]++;]

The quantification(int i : N) creates one parallel branch for each value ofi. The effect of this code is to increment all elements ofarray in parallel. This code is equivalent to

[||array[0]++;||array[1]++;...||array[array.length-1]++;]

More complex quantifications are possible. The following example quantifies over the upper left triangle of a square matrix:

[||(inti:N,intj:N,ifi+j<N)matrix[i][j]++;]

Code that performs a similar and typically small operation on a large collection of elements is calleddata parallel, and appears often in high-performance scientific applications. A typical representative of data-parallel languages for the C/C++ or Fortran ecosystems isOpenMP.

Data parallelism features can also be implemented by libraries using dedicated data structures, such asparallel arrays.

Task parallelism

[edit]

The term task parallelism is used when work can conceptually be decomposed into a number of logical tasks. In this example, tasks are created recursively:

intfib(intn){if(n<=1)return1;intfib1,fib2;// recursively create parallel branches[||fib1=fib(n-1);||fib2=fib(n-2);]returnfib1+fib2;}

Task parallelism is implemented in languages such asCilk, and in libraries similar to thefork/join pair of Unix system calls.

Message-passing

[edit]

Parallel branches have two ways of communicating; either by concurrently reading and writing shared variables, or by sending explicit messages. The operators! and? respectively send and receive a message on a channel.

In this example, two parallel branches communicate via explicit message passing:

Chan<String>chan=newChan<String>();[// branch 1 sends a value over the channel||chan!"Hello";// branch 2 receives a value from the channel and prints it||chan?s;System.out.println(s);]

Data-flow

[edit]

A program is said to bedata-flow when computation is initiated and synchronized by the availability of data in a flow. A typical example is an adder: it has two inputs, one output, and whenever the two inputs are ready, it sends their sum on the output.

voidadder(Chan<Integer>in1,Chan<Integer>in2,Chan<Integer>out){for(;;){intvalue1,value2;[in1?value1;||in2?value2;];out!value1+value2;}}

Note the parallel read[ in1 ? value1; || in2 ? value2; ]. It means that the two input values can come in any order. Without it, the code may deadlock if values were coming in the wrong order. This shows that parallel primitives in a programming language are not only about performance, but also about the behavior of programs.

The adder by itself doesn't do anything, since it reacts on input data. It needs to be put in a context where other parts feed input values and read output values. The way to express this is to compose all pieces in a large parallel block:

[||source(c1);// generates values on c1||source(c2);// generates values on c2||adder(c1,c2,c3);||sink(c3);// read values from c3]

Anything that can be thought of as a combination of logical gates or electrical circuits can readily be expressed in this way as a data-flow program.

References

[edit]
  1. ^https://www.eetimes.com/software-tools-ateji-px-for-java-simplifies-parallel-programming-for-multicores/
  2. ^"Ateji PX: Java Parallel Programming Made Simple".Ateji. Archived fromthe original on 24 February 2014. Retrieved1 March 2014.
  3. ^https://surface.syr.edu/cgi/viewcontent.cgi?article=1712&context=etd

External links

[edit]
General
Levels
Multithreading
Theory
Elements
Coordination
Programming
Hardware
APIs
Problems
Retrieved from "https://en.wikipedia.org/w/index.php?title=Ateji_PX&oldid=1336235252"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2026 Movatter.jp