From d754a34b64a8da4f7d426c79961b6f7927b7c572 Mon Sep 17 00:00:00 2001 From: lesech Date: Wed, 26 May 2021 16:31:02 +0200 Subject: [PATCH 1/4] javadoc for class Platform --- .../main/java/matrixstudio/kernel/CLUtil.java | 31 +++++++ .../java/matrixstudio/kernel/Simulator.java | 23 +++-- .../java/matrixstudio/model/Platform.java | 85 +++++++++++++++++++ .../java/matrixstudio/model/Scheduler.java | 18 ++++ .../java/matrixstudio/model/ModelTest.java | 21 +++++ 5 files changed, 173 insertions(+), 5 deletions(-) create mode 100644 core/src/main/java/matrixstudio/model/Platform.java diff --git a/core/src/main/java/matrixstudio/kernel/CLUtil.java b/core/src/main/java/matrixstudio/kernel/CLUtil.java index eb9cb77..fd8ca0f 100644 --- a/core/src/main/java/matrixstudio/kernel/CLUtil.java +++ b/core/src/main/java/matrixstudio/kernel/CLUtil.java @@ -1,6 +1,8 @@ package matrixstudio.kernel; import matrixstudio.model.Device; +import matrixstudio.model.Platform; + import org.jocl.CL; import org.jocl.Pointer; import org.jocl.cl_device_id; @@ -155,8 +157,37 @@ public static Device getDevice(cl_device_id device) { } } + public static List getListPlatform(){ + List listPlatform = new ArrayList<>(); + + int numPlatforms[] = new int[1]; + clGetPlatformIDs(0, null, numPlatforms); + + // Obtain the platform IDs + cl_platform_id platforms[] = new cl_platform_id[numPlatforms[0]]; + clGetPlatformIDs(platforms.length, platforms, null); + + listPlatform.addAll(Arrays.asList(platforms)); + + return listPlatform; + + } + + public static Platform getPlatform(cl_platform_id platformId) { + + Platform res = new Platform(platformId); + + return res; + } + public static void main(String[] args) { cl_device_id id = selectHardware(Device.CPU).get(0); System.out.println(getLong(id, CL.CL_DEVICE_MAX_WORK_GROUP_SIZE)); + + List list = getListPlatform(); + + for(int i = 0; i < list.size(); i++) { + System.out.println(list.get(i)); + } } } diff --git a/core/src/main/java/matrixstudio/kernel/Simulator.java b/core/src/main/java/matrixstudio/kernel/Simulator.java index 33ab7b1..5c46eb5 100644 --- a/core/src/main/java/matrixstudio/kernel/Simulator.java +++ b/core/src/main/java/matrixstudio/kernel/Simulator.java @@ -254,12 +254,27 @@ private void initMatrices() { } private void initCL() throws EvaluationException, ParseException { + final Model model = getModel(); + final Scheduler scheduler = model.getScheduler(); + long numBytes[] = new long[1]; - + // Creation of an OpenCL context on GPU log.log("Obtaining platform..."); - cl_platform_id platforms[] = new cl_platform_id[1]; - clGetPlatformIDs(platforms.length, platforms, null); + cl_platform_id platforms[]; + + if(scheduler.getPlatform().getPlatformId() != null) { + platforms = new cl_platform_id[1]; + platforms[0] = scheduler.getPlatform().getPlatformId(); + + }else { + + platforms = new cl_platform_id[1]; + clGetPlatformIDs(platforms.length, platforms, null); + } + + + if(platforms[0]==null) { throw new CLException("No OpenCL plateform found. Impossible to compile the code."); } else { @@ -272,8 +287,6 @@ private void initCL() throws EvaluationException, ParseException { // Enable exceptions and subsequently get error checks CL.setExceptionsEnabled(true); - final Model model = getModel(); - final Scheduler scheduler = model.getScheduler(); // checks if device exist final List hardwareList = CLUtil.selectHardware(scheduler.getDevice()); diff --git a/core/src/main/java/matrixstudio/model/Platform.java b/core/src/main/java/matrixstudio/model/Platform.java new file mode 100644 index 0000000..3872dbc --- /dev/null +++ b/core/src/main/java/matrixstudio/model/Platform.java @@ -0,0 +1,85 @@ +package matrixstudio.model; + +import java.util.ArrayList; +import java.util.List; + +import org.jocl.cl_platform_id; + +import matrixstudio.kernel.CLUtil; + +/** + * Classe Platform + *

La classe Platform permet de récupérer l'id de la platform + * + * @author lesech + */ + +/** + * + */ + +public class Platform { + + /** + * Id de platform + * + * @see Platform#getPlatformId() + * @see Platform#setPlatformId(cl_platform_id) + * @see Platform#setPlatformId(int) + */ + private cl_platform_id platformId; + + //List listPlatform; + + /** + * + * @param platformId constructeur de la classe Platform avec en paramètre une variable de type cl_platform + */ + + public Platform(cl_platform_id platformId) { + //this.listPlatform = new ArrayList<>(); + //listPlatform.add(platformId); + this.platformId = platformId; + } + + /** + * Constructeur par défaut de la classe platform + * + *

Constructeur par défaut de la classe platforme

+ */ + public Platform() { + //this.listPlatform = new ArrayList<>(); + this.platformId = null; + } + + /** + * + * @return Getter de l'attribut platformId + */ + public cl_platform_id getPlatformId() { + return this.platformId; + } + + /** + * + * @param platformId mofifier la valeur de platformID à partir du paramètre + */ + + public void setPlatformId(cl_platform_id platformId) { + this.platformId = platformId; + } + + /** + * + * @param index modifier platformId à partir d'un index + */ + + public void setPlatformId(int index) { + List listPlatform = CLUtil.getListPlatform(); + cl_platform_id res = listPlatform.get(index); + + this.platformId = res; + + } + +} diff --git a/core/src/main/java/matrixstudio/model/Scheduler.java b/core/src/main/java/matrixstudio/model/Scheduler.java index 1add094..14cd921 100644 --- a/core/src/main/java/matrixstudio/model/Scheduler.java +++ b/core/src/main/java/matrixstudio/model/Scheduler.java @@ -21,6 +21,8 @@ public class Scheduler implements ModelObject, BoostObject { private final List taskList = new ArrayList(); private Device device = Device.ANY; + + private Platform platform = new Platform(); private int deviceOrder = 1; @@ -208,6 +210,7 @@ public void setDevice(Device newValue) { this.device= newValue; } } + /** *

Gets deviceOrder.

@@ -226,6 +229,21 @@ public void setDeviceOrder(int newValue) { } } + + //platformId + + public void setPlatform(Platform platform) { + this.platform = platform; + } + + public void setPlatform(int index) { + this.platform.setPlatformId(index); + } + + public Platform getPlatform() { + return this.platform; + } + public void writeToBoost(Boost boost) { boost.writeObject(model); BoostUtil.writeObjectCollection(boost, taskList); diff --git a/core/src/test/java/matrixstudio/model/ModelTest.java b/core/src/test/java/matrixstudio/model/ModelTest.java index e715e92..327f2c8 100644 --- a/core/src/test/java/matrixstudio/model/ModelTest.java +++ b/core/src/test/java/matrixstudio/model/ModelTest.java @@ -1,7 +1,12 @@ package matrixstudio.model; import java.io.File; +import java.util.List; + +import matrixstudio.kernel.CLUtil; import matrixstudio.kernel.Tools; + +import org.jocl.cl_platform_id; import org.junit.Assert; import org.junit.Test; @@ -25,6 +30,22 @@ public void test1() throws Exception { Assert.assertEquals(1, loaded.getScheduler().getTaskCount()); } + + @Test + public void testTaillePlatform() { + List listPlatform = CLUtil.getListPlatform(); + + Assert.assertEquals(1, listPlatform.size()); + } + + @Test + public void testInstanceof() { + List listPlatform = CLUtil.getListPlatform(); + + for(int i = 0; i < listPlatform.size(); i++) { + Assert.assertTrue(listPlatform.get(i) instanceof cl_platform_id); + } + } private Model createModel() { Model model = new Model(); From 745bfc83795fffb87ad0c8bc0ded05ff595dface Mon Sep 17 00:00:00 2001 From: lesech Date: Thu, 27 May 2021 13:38:51 +0200 Subject: [PATCH 2/4] complete Javadoc --- .../src/main/java/matrixstudio/kernel/CLUtil.java | 11 +++++++++++ .../main/java/matrixstudio/model/Platform.java | 12 ++++++------ .../main/java/matrixstudio/model/Scheduler.java | 15 +++++++++++++-- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/matrixstudio/kernel/CLUtil.java b/core/src/main/java/matrixstudio/kernel/CLUtil.java index fd8ca0f..82df14d 100644 --- a/core/src/main/java/matrixstudio/kernel/CLUtil.java +++ b/core/src/main/java/matrixstudio/kernel/CLUtil.java @@ -157,6 +157,11 @@ public static Device getDevice(cl_device_id device) { } } + /** + * get list of platform + * @return + */ + public static List getListPlatform(){ List listPlatform = new ArrayList<>(); @@ -173,6 +178,12 @@ public static List getListPlatform(){ } + /** + * get platform by platformId + * @param platformId + * @return + */ + public static Platform getPlatform(cl_platform_id platformId) { Platform res = new Platform(platformId); diff --git a/core/src/main/java/matrixstudio/model/Platform.java b/core/src/main/java/matrixstudio/model/Platform.java index 3872dbc..0f1bac5 100644 --- a/core/src/main/java/matrixstudio/model/Platform.java +++ b/core/src/main/java/matrixstudio/model/Platform.java @@ -53,16 +53,16 @@ public Platform() { } /** - * - * @return Getter de l'attribut platformId + * get platform id's + * @return */ public cl_platform_id getPlatformId() { return this.platformId; } /** - * - * @param platformId mofifier la valeur de platformID à partir du paramètre + * set platform Id + * @param platformId */ public void setPlatformId(cl_platform_id platformId) { @@ -70,8 +70,8 @@ public void setPlatformId(cl_platform_id platformId) { } /** - * - * @param index modifier platformId à partir d'un index + * set platformId with Index + * @param index */ public void setPlatformId(int index) { diff --git a/core/src/main/java/matrixstudio/model/Scheduler.java b/core/src/main/java/matrixstudio/model/Scheduler.java index 14cd921..bb9d27f 100644 --- a/core/src/main/java/matrixstudio/model/Scheduler.java +++ b/core/src/main/java/matrixstudio/model/Scheduler.java @@ -230,20 +230,31 @@ public void setDeviceOrder(int newValue) { } - //platformId + /** + * set platform + * @param platform + */ public void setPlatform(Platform platform) { this.platform = platform; } + /** + * set platform with index + * @param index + */ public void setPlatform(int index) { this.platform.setPlatformId(index); } + /** + * get platform attribut + * @return platform + */ public Platform getPlatform() { return this.platform; } - + public void writeToBoost(Boost boost) { boost.writeObject(model); BoostUtil.writeObjectCollection(boost, taskList); From 48b749b8826d6477a46b457f38caffd8684a9695 Mon Sep 17 00:00:00 2001 From: lesech Date: Thu, 27 May 2021 14:22:44 +0200 Subject: [PATCH 3/4] I have translated french comments into english, I hope it is better :) --- .../main/java/matrixstudio/kernel/CLUtil.java | 4 ++-- .../main/java/matrixstudio/kernel/Simulator.java | 1 + .../main/java/matrixstudio/model/Platform.java | 16 +++++----------- 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/matrixstudio/kernel/CLUtil.java b/core/src/main/java/matrixstudio/kernel/CLUtil.java index 82df14d..09c959b 100644 --- a/core/src/main/java/matrixstudio/kernel/CLUtil.java +++ b/core/src/main/java/matrixstudio/kernel/CLUtil.java @@ -158,7 +158,7 @@ public static Device getDevice(cl_device_id device) { } /** - * get list of platform + * Get list of platform * @return */ @@ -179,7 +179,7 @@ public static List getListPlatform(){ } /** - * get platform by platformId + * Get platform by platformId * @param platformId * @return */ diff --git a/core/src/main/java/matrixstudio/kernel/Simulator.java b/core/src/main/java/matrixstudio/kernel/Simulator.java index 5c46eb5..9b47d5e 100644 --- a/core/src/main/java/matrixstudio/kernel/Simulator.java +++ b/core/src/main/java/matrixstudio/kernel/Simulator.java @@ -263,6 +263,7 @@ private void initCL() throws EvaluationException, ParseException { log.log("Obtaining platform..."); cl_platform_id platforms[]; + //Condition if platform IDs is null or not if(scheduler.getPlatform().getPlatformId() != null) { platforms = new cl_platform_id[1]; platforms[0] = scheduler.getPlatform().getPlatformId(); diff --git a/core/src/main/java/matrixstudio/model/Platform.java b/core/src/main/java/matrixstudio/model/Platform.java index 0f1bac5..0f23651 100644 --- a/core/src/main/java/matrixstudio/model/Platform.java +++ b/core/src/main/java/matrixstudio/model/Platform.java @@ -9,7 +9,7 @@ /** * Classe Platform - *

La classe Platform permet de récupérer l'id de la platform + *

The Platform class is used to retrieve the platform id

* * @author lesech */ @@ -21,7 +21,7 @@ public class Platform { /** - * Id de platform + * platform id * * @see Platform#getPlatformId() * @see Platform#setPlatformId(cl_platform_id) @@ -29,26 +29,20 @@ public class Platform { */ private cl_platform_id platformId; - //List listPlatform; - /** - * - * @param platformId constructeur de la classe Platform avec en paramètre une variable de type cl_platform + * Constructor of the Platform class with a variable of type cl_platform as parameter + * @param platformId */ public Platform(cl_platform_id platformId) { - //this.listPlatform = new ArrayList<>(); - //listPlatform.add(platformId); this.platformId = platformId; } /** - * Constructeur par défaut de la classe platform * - *

Constructeur par défaut de la classe platforme

+ *

Default constructor of the platform class

*/ public Platform() { - //this.listPlatform = new ArrayList<>(); this.platformId = null; } From 40dafa09670ef6b55143cd1be89e9210fd35ff4a Mon Sep 17 00:00:00 2001 From: lesech Date: Fri, 28 May 2021 13:35:01 +0200 Subject: [PATCH 4/4] I change Platform class name to "PlatformCL" --- core/src/main/java/matrixstudio/kernel/CLUtil.java | 6 +++--- .../model/{Platform.java => PlatformCL.java} | 12 ++++++------ core/src/main/java/matrixstudio/model/Scheduler.java | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) rename core/src/main/java/matrixstudio/model/{Platform.java => PlatformCL.java} (83%) diff --git a/core/src/main/java/matrixstudio/kernel/CLUtil.java b/core/src/main/java/matrixstudio/kernel/CLUtil.java index 09c959b..dd02575 100644 --- a/core/src/main/java/matrixstudio/kernel/CLUtil.java +++ b/core/src/main/java/matrixstudio/kernel/CLUtil.java @@ -1,7 +1,7 @@ package matrixstudio.kernel; import matrixstudio.model.Device; -import matrixstudio.model.Platform; +import matrixstudio.model.PlatformCL; import org.jocl.CL; import org.jocl.Pointer; @@ -184,9 +184,9 @@ public static List getListPlatform(){ * @return */ - public static Platform getPlatform(cl_platform_id platformId) { + public static PlatformCL getPlatform(cl_platform_id platformId) { - Platform res = new Platform(platformId); + PlatformCL res = new PlatformCL(platformId); return res; } diff --git a/core/src/main/java/matrixstudio/model/Platform.java b/core/src/main/java/matrixstudio/model/PlatformCL.java similarity index 83% rename from core/src/main/java/matrixstudio/model/Platform.java rename to core/src/main/java/matrixstudio/model/PlatformCL.java index 0f23651..8fbb6a4 100644 --- a/core/src/main/java/matrixstudio/model/Platform.java +++ b/core/src/main/java/matrixstudio/model/PlatformCL.java @@ -18,14 +18,14 @@ * */ -public class Platform { +public class PlatformCL { /** * platform id * - * @see Platform#getPlatformId() - * @see Platform#setPlatformId(cl_platform_id) - * @see Platform#setPlatformId(int) + * @see PlatformCL#getPlatformId() + * @see PlatformCL#setPlatformId(cl_platform_id) + * @see PlatformCL#setPlatformId(int) */ private cl_platform_id platformId; @@ -34,7 +34,7 @@ public class Platform { * @param platformId */ - public Platform(cl_platform_id platformId) { + public PlatformCL(cl_platform_id platformId) { this.platformId = platformId; } @@ -42,7 +42,7 @@ public Platform(cl_platform_id platformId) { * *

Default constructor of the platform class

*/ - public Platform() { + public PlatformCL() { this.platformId = null; } diff --git a/core/src/main/java/matrixstudio/model/Scheduler.java b/core/src/main/java/matrixstudio/model/Scheduler.java index bb9d27f..8b5e68f 100644 --- a/core/src/main/java/matrixstudio/model/Scheduler.java +++ b/core/src/main/java/matrixstudio/model/Scheduler.java @@ -22,7 +22,7 @@ public class Scheduler implements ModelObject, BoostObject { private Device device = Device.ANY; - private Platform platform = new Platform(); + private PlatformCL platform = new PlatformCL(); private int deviceOrder = 1; @@ -235,7 +235,7 @@ public void setDeviceOrder(int newValue) { * @param platform */ - public void setPlatform(Platform platform) { + public void setPlatform(PlatformCL platform) { this.platform = platform; } @@ -251,7 +251,7 @@ public void setPlatform(int index) { * get platform attribut * @return platform */ - public Platform getPlatform() { + public PlatformCL getPlatform() { return this.platform; }