View Javadoc
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  }