{"id":2173,"date":"2021-11-10T10:32:08","date_gmt":"2021-11-10T09:32:08","guid":{"rendered":"https:\/\/sc21.icm.edu.pl\/?page_id=2173"},"modified":"2021-12-14T13:18:25","modified_gmt":"2021-12-14T12:18:25","slug":"parallel-computing-in-java","status":"publish","type":"page","link":"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/","title":{"rendered":"Parallel Computing in JAVA"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2173\" class=\"elementor elementor-2173\">\n\t\t\t\t\t\t<section class=\"has_eae_slider elementor-section elementor-top-section elementor-element elementor-element-676ecd43 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-eae-slider=\"25861\" data-id=\"676ecd43\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_eae_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-dfe10c3\" data-eae-slider=\"87281\" data-id=\"dfe10c3\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0938a8a elementor-position-right elementor-vertical-align-middle footer-menu-items elementor-widget elementor-widget-image-box\" data-id=\"0938a8a\" data-element_type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><img fetchpriority=\"high\" decoding=\"async\" width=\"2560\" height=\"2560\" src=\"https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-scaled.jpg\" class=\"attachment-full size-full wp-image-156\" alt=\"\" srcset=\"https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-scaled.jpg 2560w, https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-300x300.jpg 300w, https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-1024x1024.jpg 1024w, https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-150x150.jpg 150w, https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-768x768.jpg 768w, https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-1536x1536.jpg 1536w, https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-2048x2048.jpg 2048w\" sizes=\"(max-width: 2560px) 100vw, 2560px\" \/><\/figure><div class=\"elementor-image-box-content\"><h3 class=\"elementor-image-box-title\">Prof. Piotr Ba\u0142a <\/h3><p class=\"elementor-image-box-description\"><i aria-hidden=\"true\" class=\"far fa-arrow-alt-circle-right contact-arrow\"><\/i><a href=\"#1\">Email<\/a><br>\n<i aria-hidden=\"true\" class=\"far fa-arrow-alt-circle-right contact-arrow\"><\/i>\n<a href=\"https:\/\/www.researchgate.net\/profile\/Piotr-Bala-2\" target=\"_blank\" class=\"contact-info broken_link\">ResearchGate<\/a><\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-40b1be0a linear-wipe elementor-widget elementor-widget-heading\" data-id=\"40b1be0a\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Parallel Computing in JAVA<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7ab6d08f elementor-widget elementor-widget-heading\" data-id=\"7ab6d08f\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">a new tool for computing and data analytics<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-79f8caf9 elementor-widget elementor-widget-text-editor\" data-id=\"79f8caf9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tPCJ 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.\n\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-20a6d74 elementor-widget elementor-widget-text-editor\" data-id=\"20a6d74\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tRecently 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.\n\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0fe7ae3 elementor-widget elementor-widget-text-editor\" data-id=\"0fe7ae3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tCurrent version of the librarry is 5.3.0. Compare 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(),\n\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-87d6a6b elementor-widget elementor-widget-text-editor\" data-id=\"87d6a6b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tFor more changes see: <a href=\"https:\/\/github.com\/hpdcj\/PCJ\/releases\/tag\/v5.3.0\">https:\/\/github.com\/hpdcj\/PCJ\/releases\/tag\/v5.3.0<\/a>\n<br>\nSee also: <a href=\"https:\/\/icm.edu.pl\/en\/blog\/2018\/07\/23\/pcj-a-new-tool-for-computing-and-data-analytics\/\" target=\"_blank\" rel=\"noopener\" class=\"broken_link\">PCJ \u2013 a new tool for computing and data analytics<\/a>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a4fb915 elementor-widget elementor-widget-image\" data-id=\"a4fb915\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"534\" src=\"https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/11\/PCJ-czyli-jak-zoptymalizowac-obliczenia-i-analize-danych.jpg\" class=\"attachment-large size-large wp-image-2221\" alt=\"\" srcset=\"https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/11\/PCJ-czyli-jak-zoptymalizowac-obliczenia-i-analize-danych.jpg 1024w, https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/11\/PCJ-czyli-jak-zoptymalizowac-obliczenia-i-analize-danych-300x200.jpg 300w, https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/11\/PCJ-czyli-jak-zoptymalizowac-obliczenia-i-analize-danych-768x512.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"has_eae_slider elementor-section elementor-top-section elementor-element elementor-element-28c2c0d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-eae-slider=\"21740\" data-id=\"28c2c0d\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_eae_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-44e47a2\" data-eae-slider=\"65144\" data-id=\"44e47a2\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e5de1b1 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"e5de1b1\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-md elementor-animation-shrink\" href=\"https:\/\/pcj.icm.edu.pl\/\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Visit PCJ library<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"has_eae_slider elementor-section elementor-top-section elementor-element elementor-element-2cad2c3 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-eae-slider=\"86048\" data-id=\"2cad2c3\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_eae_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6cf940b9\" data-eae-slider=\"77067\" data-id=\"6cf940b9\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7f69fead elementor-widget elementor-widget-text-editor\" data-id=\"7f69fead\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Examples<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-86dc807 elementor-tabs-view-horizontal elementor-widget elementor-widget-tabs\" data-id=\"86dc807\" data-element_type=\"widget\" data-widget_type=\"tabs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-tabs\">\n\t\t\t<div class=\"elementor-tabs-wrapper\" role=\"tablist\" >\n\t\t\t\t\t\t\t\t\t<div id=\"elementor-tab-title-1411\" class=\"elementor-tab-title elementor-tab-desktop-title\" aria-selected=\"true\" data-tab=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"elementor-tab-content-1411\" aria-expanded=\"false\">Hello World<\/div>\n\t\t\t\t\t\t\t\t\t<div id=\"elementor-tab-title-1412\" class=\"elementor-tab-title elementor-tab-desktop-title\" aria-selected=\"false\" data-tab=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-1412\" aria-expanded=\"false\">Loop parallelization<\/div>\n\t\t\t\t\t\t\t\t\t<div id=\"elementor-tab-title-1413\" class=\"elementor-tab-title elementor-tab-desktop-title\" aria-selected=\"false\" data-tab=\"3\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-1413\" aria-expanded=\"false\">Reduction<\/div>\n\t\t\t\t\t\t\t\t\t<div id=\"elementor-tab-title-1414\" class=\"elementor-tab-title elementor-tab-desktop-title\" aria-selected=\"false\" data-tab=\"4\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-1414\" aria-expanded=\"false\">Parallel Monte Carlo<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t<div class=\"elementor-tabs-content-wrapper\" role=\"tablist\" aria-orientation=\"vertical\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-tab-title elementor-tab-mobile-title\" aria-selected=\"true\" data-tab=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"elementor-tab-content-1411\" aria-expanded=\"false\">Hello World<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-1411\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"tabpanel\" aria-labelledby=\"elementor-tab-title-1411\" tabindex=\"0\" hidden=\"false\"><p>Code example for PCJ 5: Print Hello World in parallel. Calculations start from a special StartPoint class. That class contains main method (<code>public void main()<\/code>): <code><code><\/code><\/code><\/p><div><div>import java.io.IOException;<\/div><div>import org.pcj.*;<\/div><div>public class HelloWorld implements StartPoint {<\/div><div>\u00a0 \u00a0 public static void main(String[] args) throws IOException {<\/div><div>\u00a0 \u00a0 String nodesFile \u00a0= &#8222;nodes.txt&#8221;;<\/div><div>\u00a0 \u00a0 PCJ.executionBuilder (PcjExample.class)<\/div><div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .addNodes(new File(&#8222;nodes.txt&#8221;))<\/div><div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .start();<\/div><div>\u00a0 \u00a0 }<\/div><div>\u00a0 \u00a0 }<\/div><div>\u00a0 \u00a0 @Override<\/div><div>\u00a0 \u00a0 public void main() throws Throwable {<\/div><div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.println(&#8222;Hello World from PCJ Thread &#8221; + PCJ.myId()<\/div><div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0+ &#8221; out of &#8221; + PCJ.threadCount() );<\/div><div>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/div><div>}<\/div><\/div><p>\u00a0 The compilation and execution requires PCJ-5.0.9.jar in the path: <code>javac -cp .:PCJ.jar HelloWorld.java java -cp .:PCJ-5.0.9.jar HelloWorld<\/code> The expected output is presented below:<\/p><div><div>wrz 23, 2016 2:00:22 AM org.pcj.internal.InternalPCJ start<\/div><div>INFO: PCJ version 5.0.0.SNAPSHOT-a728f5f built on 2016-09-13 00:58:48.180 CEST.<\/div><div>wrz 23, 2016 2:00:22 AM org.pcj.internal.InternalPCJ start<\/div><div>INFO: Starting HelloWorld with 4 threads (on 1 node)&#8230;<\/div><div>\u00a0Hello World from PCJ Thread 2 out of 4<\/div><div>\u00a0Hello World from PCJ Thread 0 out of 4<\/div><div>\u00a0Hello World from PCJ Thread 1 out of 4<\/div><div>\u00a0Hello World from PCJ Thread 3 out of 4<\/div><div>wrz 23, 2016 2:00:22 AM org.pcj.internal.InternalPCJ start<\/div><div>INFO: Completed HelloWorld with 4 threads (on 1 node) after 0h 0m 0s.<\/div><div>BUILD SUCCESSFUL (total time: 0 seconds)<\/div><\/div><\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-tab-title elementor-tab-mobile-title\" aria-selected=\"false\" data-tab=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-1412\" aria-expanded=\"false\">Loop parallelization<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-1412\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"2\" role=\"tabpanel\" aria-labelledby=\"elementor-tab-title-1412\" tabindex=\"0\" hidden=\"hidden\"><p>Estimate \u03c0 using integral. Parallelization performed by work distribution (loop parallelization).<\/p>\n\n<p>The value of \u03c0is calculated using rectangles method that approximates following integral:<\/p>\n <p><code>\u03c0 = \u222b 4.0 \/ (1 + x2 ) dx<\/code><br>\n<p>In our code, the interval is codeided into equal subintervals and we take top middle point of each subinterval to calculate area of the rectangle.<\/p>\n\n<p>The calculations will start by executing the main method from PcjExamplePiI class. Four tasks will be involved in calculations: on local machine. The listing contains comments that should clarify what program is doing. The user can easily change number of tasks by providing more host names to the deploy method. The PCJ will launch calculations on specified nodes.<\/p>\n\n<code>import org.pcj.NodesDescription;<\/code><br>\n<code>import org.pcj.PCJ;<\/code><br>\n<code>import org.pcj.StartPoint;<\/code><br>\n<code>import org.pcj.Storage;<\/code><br>\n<code>import org.pcj.PcjFuture;<\/code><br>\n<code>import org.pcj.RegisterStorage;<\/code><br>\n<code>@RegisterStorage(PcjExamplePiI.Shared.class)<\/code><br>\n<code>public class PcjExamplePiI implements StartPoint {<\/code><br>\n<code>\u00a0 \u00a0 private double f(final double x) {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 return (4.0 \/ (1.0 + x * x));<\/code><br>\n<code>\u00a0 \u00a0 }<\/code><br>\n<code>\u00a0 \u00a0 @Storage(PcjExamplePiI.class)<\/code><br>\n<code>\u00a0 \u00a0 enum Shared {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 sum<\/code><br>\n<code>\u00a0 \u00a0 }<\/code><br>\n<code>\u00a0 \u00a0 double sum;<\/code><br>\n<code>\u00a0 \u00a0 @Override<\/code><br>\n<code>\u00a0 \u00a0 public void main() {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 PCJ.barrier();<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 double time = System.nanoTime();<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 long nAll = 1_280_000_000;<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 double w = 1.0 \/ (double) nAll;<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 sum = 0.0;<\/code><br>\n<code>\/\/ Calculate partial results with the cyclic distribution<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 for (int i = PCJ.myId(); i &lt; nAll; i += PCJ.threadCount()) {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sum = sum + f(((double) i + 0.5) * w);<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 }<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 sum = sum * w;<\/code><br>\n<code>\/\/ Wait for all tasksk to finish<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 PCJ.barrier();<\/code><br>\n<code>\/\/ Gather results<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 PcjFuture cL[] = new PcjFuture[PCJ.threadCount()];<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 double pi = sum;<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 if (PCJ.myId() == 0) {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 for (int p = 1; p &lt; PCJ.threadCount(); p++) {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 cL[p] = PCJ.asyncGet(p, Shared.sum);<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 for (int p = 1; p &lt; PCJ.threadCount(); p++) {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 pi = pi + cL[p].get();<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 }<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 PCJ.barrier();<\/code><br>\n<code>\/\/ Print results<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 time = System.nanoTime() - time;<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 if (PCJ.myId() == 0) {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 System.out.format(\" %.7f \u00a0%.7f time %.5f \\n\", pi, time * 1.0E-9, time);<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 }<\/code><br>\n<code>\u00a0 \u00a0 }<\/code><br>\n<code>\u00a0 \u00a0 public static void main(String[] args) throws IOException {<\/code><br>\n<code>\u00a0 \u00a0 String nodesFile \u00a0= \"nodes.txt\";<\/code><br>\n<code>\u00a0 \u00a0 PCJ.executionBuilder (PcjExample.class)<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .addNodes(new File(\"nodes.txt\"))<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .start();<\/code><br>\n<code>\u00a0 \u00a0 }<\/code><br>\n<code>}<\/code><br>\n<\/code><br>\n<\/code><br>\n<\/code><br><\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-tab-title elementor-tab-mobile-title\" aria-selected=\"false\" data-tab=\"3\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-1413\" aria-expanded=\"false\">Reduction<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-1413\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"3\" role=\"tabpanel\" aria-labelledby=\"elementor-tab-title-1413\" tabindex=\"0\" hidden=\"hidden\"><p>Reduction operation is widely used to gather values of some variable stored on different threads.<\/p>\n\n\n<code>import java.io.IOException;<\/code><br>\n<code>import org.pcj.*;<\/code><br>\n<code>@RegisterStorage(PcjReduction.Shared.class)<\/code><br>\n<code>public class PcjReduction implements StartPoint {<\/code><br>\n<code>@Storage(PcjExample.class)<\/code><br>\n<code>enum Shared { a }<\/code><br>\n<code>public long a;<\/code><br>\n<code>public static void main(String[] args) throws IOException {<\/code><br>\n<code>\u00a0 \u00a0 String nodesFile \u00a0= \"nodes.txt\";<\/code><br>\n<code>\u00a0 \u00a0 PCJ.executionBuilder (PcjExample.class)<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .addNodes(new File(\"nodes.txt\"))<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .start();<\/code><br>\n<code>}<\/code><br>\n<code>@Override<\/code><br>\n<code>public void main() throws Throwable {<\/code><br>\n<code>\u00a0 \u00a0 a = PCJ.myId() + 10; \u00a0 \u00a0\/\/ set value of a<\/code><br>\n<code>\u00a0 \u00a0 long sum = 0;<\/code><br>\n<code><\/code><br>\n<code>\u00a0 \u00a0 if (PCJ.myId() == 0) {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 sum = PCJ.reduce(Lomg::sum, Shared.a);<\/code><br>\n<code>\u00a0 \u00a0}<\/code><br>\n<code>\u00a0 \u00a0PCJ.barrier();<\/code><br>\n<code>\u00a0 \u00a0System.out.println(PCJ.myId()+ \" \"+ sum);<\/code><br>\n<code>}<\/code><br>\n<code>}<\/code><br>\n<br>\n<p>In the presented example the values are communicated to the thread with the id 0. Than reduction operation such as\nsummation is performed. Than value of the variable a (Shared variable) stored at the thread p is communicated to the\nthread 0 and added to the local variable sum.<\/p>\n\n\n                <code>import java.io.IOException;<\/code><br>\n                <code>import org.pcj.*;<\/code><br>\n                <code>@RegisterStorage(PcjReductionGet.Shared.class)<\/code><br>\n                <code>public class PcjReductionGet implements StartPoint {<\/code><br>\n                <code>@Storage(PcjReductionGet.class)<\/code><br>\n                <code>enum Shared { a }<\/code><br>\n                <code>long a;<\/code><br>\n                <code>public static void main(String[] args) throws IOException {<\/code><br>\n                <code>String nodesFile = \"nodes.txt\";<\/code><br>\n                <code>PCJ.executionBuilder (PcjExample.class)<\/code><br>\n                <code>.addNodes(new File(\"nodes.txt\"))<\/code><br>\n                <code>.start();<\/code><br>\n                <code>}<\/code><br>\n                <code>@Override<\/code><br>\n                <code>public void main() throws Throwable {<\/code><br>\n                <code>a = PCJ.myId() + 10; \/\/ set value of a<\/code><br>\n                <code>long sum = 0;<\/code><br>\n                <code>PCJ.barrier();<\/code><br>\n                <code>if (PCJ.myId() == 0) {<\/code><br>\n                <code>for (int p = 1; p &lt; PCJ.threadCount(); p++) { sum=sum + (long) PCJ.get(p, Shared.a); } }\n                    PCJ.barrier();<\/code><br>\n                <code>\u00a0 \u00a0 System.out.println(PCJ.myId()+ \" \" + sum); } }<\/code><br>\n<br>\n<p>The presented algorithm of the reduction is based on the synchronous communication PCJ.get(). The summation is performed\nat thread 0 as data is arrived.<\/p>\n<p>The asynchronous version requires additional storage at the thread 0. The al[]variable stores values of a variable\ncommunicated in asynchronous way:<\/p>\n\n\n                <code>import java.io.IOException;<\/code><br>\n                <code>import org.pcj.*;<\/code><br>\n                <code>@RegisterStorage(PcjReductionGet.Shared.class)<\/code><br>\n                <code>public class PcjReductionGet implements StartPoint {<\/code><br>\n                <code>@Storage(PcjReductionGet.class)<\/code><br>\n                <code>enum Shared { a }<\/code><br>\n                <code>long a;<\/code><br>\n                <code>public static void main(String[] args) throws IOException {<\/code><br>\n                <code>String nodesFile = \"nodes.txt\";<\/code><br>\n                <code>PCJ.executionBuilder (PcjExample.class)<\/code><br>\n                <code>.addNodes(new File(\"nodes.txt\"))<\/code><br>\n                <code>.start();<\/code><br>\n                <code>}<\/code><br>\n                <code>@Override<\/code><br>\n                <code>public void main() throws Throwable {<\/code><br>\n                <code>PcjFuture aL[] = new PcjFuture[PCJ.threadCount()];<\/code><br>\n                <code>PCJ.barrier();<\/code><br>\n                <code>long sum;<\/code><br>\n                <code>if (PCJ.myId() == 0) { \/\/ Asynchronous communication<\/code><br>\n                <code>for (int p = 0; p &lt; PCJ.threadCount(); p++) { aL[p]=PCJ.asyncGet(p, Shared.a); } }\n                    PCJ.barrier(); \/\/ Synchronization<\/code><br>\n                <code>\u00a0 \u00a0 sum=0; if (PCJ.myId()==0) { \/\/ Sumation of local values for (int p=0; p &lt; PCJ.threadCount();\n                    p++) { sum=sum + (long)<\/code><br>\n                <code>\u00a0 \u00a0 aL[p].get(); } } System.out.println(PCJ.myId() + \" \" + sum); } }<\/code><br><\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-tab-title elementor-tab-mobile-title\" aria-selected=\"false\" data-tab=\"4\" role=\"tab\" tabindex=\"-1\" aria-controls=\"elementor-tab-content-1414\" aria-expanded=\"false\">Parallel Monte Carlo<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-1414\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"4\" role=\"tabpanel\" aria-labelledby=\"elementor-tab-title-1414\" tabindex=\"0\" hidden=\"hidden\"><p>Estimate \u03c0 using Monte Carlo method (parallelization of workload).<\/p>\n\n<p>The program picks points at random inside the square. It then checks to see if the point is inside the circle (it knows it&#8217;s inside the circle if x^2 + y^2 &lt; R^2, where x and y are the coordinates of the point and R is the radius of the circle).<\/p>\n\n<p>The program keeps track of how many points it&#8217;s picked (nAll) and how many of those points fell inside the circle(<code>circleCount<\/code>).<\/p>\n\n<p>In the parallel version, the work is divided among threads, i.e. each traed is performing <code>nAll \/ PCJ.threadsCount()<\/code> attempts. Each thread counts points inside circle.<\/p>\n\n<p>Finally, the parrial sums are communicated to the procesor 0.<\/p>\n<code>\n<code>import java.util.Random;<\/code><br>\n<code>\u00a0import org.pcj.NodesDescription;<\/code><br>\n<code>\u00a0import org.pcj.PCJ;<\/code><br>\n<code>\u00a0import org.pcj.StartPoint;<\/code><br>\n<code>\u00a0import org.pcj.Storage;<\/code><br>\n<code>\u00a0import org.pcj.PcjFuture;<\/code><br>\n<code>\u00a0import org.pcj.RegisterStorage;<\/code><br>\n<code>\u00a0@RegisterStorage(PcjExamplePiMC.Shared.class)<\/code><br>\n<code>\u00a0public class PcjExamplePiMC implements StartPoint {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0@Storage(PcjExamplePiMC.class)<\/code><br>\n<code>\u00a0 \u00a0 \u00a0enum Shared { c }<\/code><br>\n<code>\u00a0 \u00a0 \u00a0long c;<\/code><br>\n<code>\u00a0 \u00a0 \u00a0@Override<\/code><br>\n<code>\u00a0 \u00a0 \u00a0public void main() {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0PCJ.barrier();<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0Random r = new Random();<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0long nAll = 1000000;<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0long n = nAll \/ PCJ.threadCount();<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0double Rsq = 1.0;<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0long circleCount;<\/code><br>\n<code>\u00a0\/\/Calculate<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0circleCount = 0;<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0double time = System.nanoTime();<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0for (long i = 0; i &lt; n; i++) {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0double x = 2.0 * r.nextDouble() - 1.0;<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0double y = 2.0 * r.nextDouble() - 1.0;<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0if ((x * x + y * y) &lt; Rsq) {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0circleCount++;<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0}<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0}<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0c = circleCount;<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0PCJ.barrier();<\/code><br>\n<code>\u00a0 \u00a0\/\/ Communicate results<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0PcjFuture cL[] = new PcjFuture[PCJ.threadCount()];<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0long c0 = c;<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0if (PCJ.myId() == 0) {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0for (int p = 1; p &lt; PCJ.threadCount(); p++) {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0cL[p] = PCJ.asyncGet(p, Shared.c);<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0}<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0for (int p = 1; p &lt; PCJ.threadCount(); p++) {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0c0 = c0 + (long) cL[p].get();<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0}<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0}<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0PCJ.barrier();<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0double pi = 4.0 * (double) c0 \/ (double) nAll;<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0time = System.nanoTime() - time;<\/code><br>\n<code>\u00a0\/\/ Print results<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0if (PCJ.myId() == 0) {<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0System.out.println(pi + \" \" + time * 1.0E-9);<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0}<\/code><br>\n<code>\u00a0 \u00a0 \u00a0}<\/code><br>\n<code>\u00a0 \u00a0 \u00a0public static void main(String[] args) {<\/code><br>\n<code>\u00a0 \u00a0 String nodesFile \u00a0= \"nodes.txt\";<\/code><br>\n<code>\u00a0 \u00a0 PCJ.executionBuilder (PcjExample.class)<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .addNodes(new File(\"nodes.txt\"))<\/code><br>\n<code>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 .start();<\/code><br>\n<code>\u00a0 \u00a0 }<\/code><br>\n<code>\u00a0 \u00a0 \u00a0}<\/code><br>\n<code>\u00a0}<\/code><br>\n<\/code><br>\n\n<p>The code scales linearly with the numbers of processors.<\/p>\n\n<p><a href=\"https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/11\/pcj_example_pi_mc.jpg\"><img decoding=\"async\" width=\"701\" height=\"401\" class=\"size-full wp-image-2254 aligncenter\" src=\"https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/11\/pcj_example_pi_mc.jpg\" srcset=\"https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/11\/pcj_example_pi_mc.jpg 701w, https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/11\/pcj_example_pi_mc-300x172.jpg 300w\" sizes=\"(max-width: 701px) 100vw, 701px\" \/><\/a><br><span class=\"caption-text-meteo\">The performance of the code to approximate \u03c0 using Monte Carlo method.\n<\/span><\/p><\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"has_eae_slider elementor-section elementor-top-section elementor-element elementor-element-3ae1ba4 elementor-hidden-mobile elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-eae-slider=\"54514\" data-id=\"3ae1ba4\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_eae_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b3e5334\" data-eae-slider=\"18013\" data-id=\"b3e5334\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5b7243a elementor-widget elementor-widget-text-editor\" data-id=\"5b7243a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"css-1dbjc4n r-18u37iz\"><div class=\"css-1dbjc4n r-1ro0kt6 r-16y2uox r-1wbh5a2\"><div class=\"css-901oao r-1nf4jbm r-1xnzce8\" dir=\"auto\" data-rnw-media-class=\"229__227\" data-testid=\"page.title\">Papers<\/div><\/div><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-197700b elementor-align-left elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"197700b\" data-element_type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/journalofbigdata.springeropen.com\/articles\/10.1186\/s40537-021-00454-6\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-book\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">PCJ Java library as a solution to integrate HPC, Big Data and Artificial Intelligence workloads<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.liebertpub.com\/doi\/full\/10.1089\/cmb.2018.0079\" target=\"_blank\" class=\"broken_link\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-book\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Massively Parallel Implementation of Sequence Alignment with BLAST Using PCJ Library <\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/ieeexplore.ieee.org\/abstract\/document\/8514322\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-book\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Java Library for Highly Scalable HPC and Big Data Processing<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"http:\/\/www.wseas.us\/e-library\/conferences\/2016\/barcelona\/SECEA\/SECEA-08.pdf\" target=\"_blank\" class=\"broken_link\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-book\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">PCJ - a Java library for heterogenous parallel computing<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/link.springer.com\/chapter\/10.1007\/978-3-642-36803-5_8\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-book\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">PCJ-new approach for parallel computations in java<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"has_eae_slider elementor-section elementor-top-section elementor-element elementor-element-3587bfb elementor-hidden-desktop elementor-hidden-tablet elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-eae-slider=\"51868\" data-id=\"3587bfb\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"has_eae_slider elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4fe8915\" data-eae-slider=\"72762\" data-id=\"4fe8915\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5bee524 elementor-widget elementor-widget-text-editor\" data-id=\"5bee524\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"css-1dbjc4n r-18u37iz\"><div class=\"css-1dbjc4n r-1ro0kt6 r-16y2uox r-1wbh5a2\"><div class=\"css-901oao r-1nf4jbm r-1xnzce8\" dir=\"auto\" data-rnw-media-class=\"229__227\" data-testid=\"page.title\">Papers<\/div><\/div><\/div>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f2c97bc elementor-align-left elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"f2c97bc\" data-element_type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/journalofbigdata.springeropen.com\/articles\/10.1186\/s40537-021-00454-6\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-book\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">PCJ Java library as a solution to integrate HPC, Big Data and Artificial Intelligence workloads<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.liebertpub.com\/doi\/full\/10.1089\/cmb.2018.0079\" target=\"_blank\" class=\"broken_link\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-book\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Massively Parallel Implementation of Sequence Alignment with BLAST Using PCJ Library <\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/ieeexplore.ieee.org\/abstract\/document\/8514322\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-book\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Java Library for Highly Scalable HPC and Big Data Processing<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"http:\/\/www.wseas.us\/e-library\/conferences\/2016\/barcelona\/SECEA\/SECEA-08.pdf\" target=\"_blank\" class=\"broken_link\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-book\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">PCJ - a Java library for heterogenous parallel computing<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/link.springer.com\/chapter\/10.1007\/978-3-642-36803-5_8\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-book\"><\/i>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">PCJ-new approach for parallel computations in java<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Prof. Piotr Ba\u0142a Email ResearchGate Parallel Computing in JAVA a new tool for computing and data analytics 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, [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2173","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.1.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Parallel Computing in JAVA - SC21 ICM Univ of Warsaw #811<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Parallel Computing in JAVA - SC21 ICM Univ of Warsaw #811\" \/>\n<meta property=\"og:description\" content=\"Prof. Piotr Ba\u0142a Email ResearchGate Parallel Computing in JAVA a new tool for computing and data analytics 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, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/\" \/>\n<meta property=\"og:site_name\" content=\"SC21 ICM Univ of Warsaw #811\" \/>\n<meta property=\"article:modified_time\" content=\"2021-12-14T12:18:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-scaled.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data1\" content=\"10 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/\",\"url\":\"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/\",\"name\":\"Parallel Computing in JAVA - SC21 ICM Univ of Warsaw #811\",\"isPartOf\":{\"@id\":\"https:\/\/sc21.icm.edu.pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-scaled.jpg\",\"datePublished\":\"2021-11-10T09:32:08+00:00\",\"dateModified\":\"2021-12-14T12:18:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/#primaryimage\",\"url\":\"https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-scaled.jpg\",\"contentUrl\":\"https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-scaled.jpg\",\"width\":2560,\"height\":2560},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/sc21.icm.edu.pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Parallel Computing in JAVA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/sc21.icm.edu.pl\/#website\",\"url\":\"https:\/\/sc21.icm.edu.pl\/\",\"name\":\"SC21 ICM Univ of Warsaw #811\",\"description\":\"SC21 ICM Univ of Warsaw #811\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/sc21.icm.edu.pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Parallel Computing in JAVA - SC21 ICM Univ of Warsaw #811","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/","og_locale":"pl_PL","og_type":"article","og_title":"Parallel Computing in JAVA - SC21 ICM Univ of Warsaw #811","og_description":"Prof. Piotr Ba\u0142a Email ResearchGate Parallel Computing in JAVA a new tool for computing and data analytics 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, [&hellip;]","og_url":"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/","og_site_name":"SC21 ICM Univ of Warsaw #811","article_modified_time":"2021-12-14T12:18:25+00:00","og_image":[{"url":"https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-scaled.jpg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Szacowany czas czytania":"10 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/","url":"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/","name":"Parallel Computing in JAVA - SC21 ICM Univ of Warsaw #811","isPartOf":{"@id":"https:\/\/sc21.icm.edu.pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/#primaryimage"},"image":{"@id":"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/#primaryimage"},"thumbnailUrl":"https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-scaled.jpg","datePublished":"2021-11-10T09:32:08+00:00","dateModified":"2021-12-14T12:18:25+00:00","breadcrumb":{"@id":"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/#primaryimage","url":"https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-scaled.jpg","contentUrl":"https:\/\/sc21.icm.edu.pl\/wp-content\/uploads\/2021\/10\/Prof-Piotr-Bala-scaled.jpg","width":2560,"height":2560},{"@type":"BreadcrumbList","@id":"https:\/\/sc21.icm.edu.pl\/index.php\/parallel-computing-in-java\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/sc21.icm.edu.pl\/"},{"@type":"ListItem","position":2,"name":"Parallel Computing in JAVA"}]},{"@type":"WebSite","@id":"https:\/\/sc21.icm.edu.pl\/#website","url":"https:\/\/sc21.icm.edu.pl\/","name":"SC21 ICM Univ of Warsaw #811","description":"SC21 ICM Univ of Warsaw #811","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sc21.icm.edu.pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"}]}},"_links":{"self":[{"href":"https:\/\/sc21.icm.edu.pl\/index.php\/wp-json\/wp\/v2\/pages\/2173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sc21.icm.edu.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sc21.icm.edu.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sc21.icm.edu.pl\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/sc21.icm.edu.pl\/index.php\/wp-json\/wp\/v2\/comments?post=2173"}],"version-history":[{"count":97,"href":"https:\/\/sc21.icm.edu.pl\/index.php\/wp-json\/wp\/v2\/pages\/2173\/revisions"}],"predecessor-version":[{"id":4336,"href":"https:\/\/sc21.icm.edu.pl\/index.php\/wp-json\/wp\/v2\/pages\/2173\/revisions\/4336"}],"wp:attachment":[{"href":"https:\/\/sc21.icm.edu.pl\/index.php\/wp-json\/wp\/v2\/media?parent=2173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}