1 package net.bmahe.genetics4j.gpu.opencl;
2
3 import java.util.Objects;
4
5 import org.apache.commons.lang3.StringUtils;
6 import org.apache.logging.log4j.LogManager;
7 import org.apache.logging.log4j.Logger;
8 import org.jocl.CL;
9 import org.jocl.cl_platform_id;
10
11 import net.bmahe.genetics4j.gpu.opencl.model.Platform;
12 import net.bmahe.genetics4j.gpu.opencl.model.PlatformProfile;
13
14 public class PlatformReader {
15 public static final Logger logger = LogManager.getLogger(PlatformReader.class);
16
17 public static final String PROFILE_FULL_STR = "FULL_PROFILE";
18 public static final String PROFILE_EMBEDDED = "EMBEDDED_PROFILE";
19
20 public Platform read(final cl_platform_id platformId) {
21 Objects.requireNonNull(platformId);
22
23 final var platformBuilder = Platform.builder();
24
25 platformBuilder.platformId(platformId);
26
27 final String platformName = PlatformUtils.getStringParameter(platformId, CL.CL_PLATFORM_NAME);
28 platformBuilder.name(platformName);
29
30 final String platformVendor = PlatformUtils.getStringParameter(platformId, CL.CL_PLATFORM_VENDOR);
31 platformBuilder.vendor(platformVendor);
32
33 final String platformVersion = PlatformUtils.getStringParameter(platformId, CL.CL_PLATFORM_VERSION);
34 platformBuilder.version(platformVersion);
35
36 final String platformExtensions = PlatformUtils.getStringParameter(platformId, CL.CL_PLATFORM_EXTENSIONS);
37 if (StringUtils.isNotBlank(platformExtensions)) {
38 final String[] platformExtensionsArr = platformExtensions.split(StringUtils.SPACE);
39 if (platformExtensionsArr.length > 0) {
40 platformBuilder.addExtensions(platformExtensionsArr);
41 }
42 }
43
44 final String platformProfileStr = PlatformUtils.getStringParameter(platformId, CL.CL_PLATFORM_PROFILE);
45 final var platformProfile = switch (platformProfileStr) {
46 case PROFILE_FULL_STR -> PlatformProfile.FULL_PROFILE;
47 case PROFILE_EMBEDDED -> PlatformProfile.FULL_PROFILE;
48 default -> throw new IllegalArgumentException("Unexpected value: " + platformProfileStr);
49 };
50 platformBuilder.profile(platformProfile);
51
52 final int numDevices = PlatformUtils.numDevices(platformId);
53 platformBuilder.numDevices(numDevices);
54
55 return platformBuilder.build();
56 }
57 }