# About PCJ

PCJ is Java library for parallel computing in Java. It is based on the PGAS (Partitioned Global Address Space) paradigm. It allows for easy implementation in Java of any parallel algorithm. PCJ application can be run on laptop, workstation, cluster and HPC system including large supercomputers. It has been demonstrated that PCJ applications scale up to 200 000 cores.

Recently we have run PCJ application on the coud (AWS EC2) using both x86 and arm processors. Therefore you can run PCJ on most popular architectures indluding Intel KNL, Power, ARM and of course x86.

Current version of the library is 5.3.3. Comparing version 5.3.x to 5.2 and 5.1, it has improved performance due to use of *shifted tree* communication. New methos has been added: *PCJ.scatter()*, *PCJ.splitGroup().* New collective communication methods are avaliable: *PCJ.collect()*, *PCJ.asyncCollect()*,

For more changes see: <https://github.com/hpdcj/PCJ/releases/tag/v5.3.3>

## Using PCJ library

You can use PCJ Library by adding jar file to your project.

PCJ Library is also available on Maven Central Repository. For maven project, just add this dependency to your `pom.xml` file.

```markup
<dependency>
    <groupId>pl.edu.icm.pcj</groupId>
    <artifactId>pcj</artifactId>
    <version>5.3.3</version>
</dependency>
```

If you are using gradle, add those lines to your `build.gradle` file:

```gradle
implementation 'pl.edu.icm.pcj:pcj:5.3.3'
annotationProcessor 'pl.edu.icm.pcj:pcj:5.3.3'
```

### Building PCJ library project by your own

If you wish to compile project by your own, use these instructions:

* to package the jar: `./gradlew assemble` or `gradlew.bat assemble`
* to create javadoc: `./gradlew javadoc` or `gradlew.bat javadoc`

### Importing the project in eclipse

Execute `./gradlew eclipse`, start `eclipse`, and use `File -> Import : Existing Projects into Workspace`. See <http://gradle.org/docs/current/userguide/eclipse_plugin.html> for more information.

## References

* **M. Nowicki, Ł. Górski, P. Bała** [PCJ – Java Library for Highly Scalable HPC and Big Data Processing](https://ieeexplore.ieee.org/abstract/document/8514322) *2018 International Conference on High Performance Computing & Simulation (HPCS)*, pp:12-20 IEEE, 2018
* **M. Nowicki, Ł. Górski, P. Bała** [Scalable computing in Java with PCJ Library. Improved collective operations.](https://open.icm.edu.pl/items/5375ddd3-627c-45c7-b8fe-9130fa88a73a)" In: *Proceedings of International Symposium on Grids and Clouds 2021 - Proceedings of Science (ISGC2021)*, 2021, vol. 378, p. 7; [DOI: 10.22323/1.378.0007](https://doi.org/10.22323/1.378.0007)
* **M. Nowicki**, **M. Ryczkowska, Ł. Górski, M. Szynkiewicz, P. Bała** [PCJ - a Java library for heterogenous parallel computing](http://www.wseas.us/e-library/conferences/2016/barcelona/SECEA/SECEA-08.pdf) In: X. Zhuang (Ed.) *Recent Advances in Information Science (Recent Advances in Computer Engineering Series vol 36)* WSEAS Press 2016 pp. 66-72
* **M. Nowicki**, **Ł. Górski, P. Grabarczyk, P. Bała** [PCJ - Java library for high performance computing in PGAS model](http://ieeexplore.ieee.org/xpl/abstractAuthors.jsp?arnumber=6903687) In: W. W. Smari and V. Zeljkovic (Eds.) *2012 International Conference on High Performance Computing and Simulation (HPCS)* IEEE 2014 pp. 202-209
* **M. Nowicki**, **P. Bała** [PCJ-new approach for parallel computations in java](https://link.springer.com/chapter/10.1007/978-3-642-36803-5_8) In: P. Manninen, P. Oster (Eds.) *Applied Parallel and Scientific Computing*, LNCS 7782, Springer, Heidelberg (2013) pp. 115-125
* **M. Nowicki**, **P. Bała** [Parallel computations in Java with PCJ library](http://ieeexplore.ieee.org/xpl/login.jsp?tp=\&arnumber=6266941\&url=http%3A%2F%2Fieeexplore.ieee.org%2Fxpls%2Fabs_all.jsp%3Farnumber%3D6266941) In: W. W. Smari and V. Zeljkovic (Eds.) *2012 International Conference on High Performance Computing and Simulation (HPCS)* IEEE 2012 pp. 381-387
