Platform.java

1
package net.bmahe.genetics4j.gpu.opencl.model;
2
3
import java.util.Set;
4
5
import org.immutables.value.Value;
6
import org.jocl.cl_platform_id;
7
8
/**
9
 * Represents an OpenCL platform providing access to compute devices and their capabilities.
10
 * 
11
 * <p>Platform encapsulates the information about an OpenCL platform, which is a vendor-specific implementation of the
12
 * OpenCL specification. Each platform represents a collection of OpenCL devices (CPUs, GPUs, accelerators) provided by
13
 * a single vendor with consistent runtime behavior.
14
 * 
15
 * <p>Key platform characteristics include:
16
 * <ul>
17
 * <li><strong>Vendor identification</strong>: Platform vendor (AMD, NVIDIA, Intel, etc.)</li>
18
 * <li><strong>Capability profile</strong>: FULL_PROFILE or EMBEDDED_PROFILE feature support</li>
19
 * <li><strong>Version support</strong>: OpenCL specification version implemented</li>
20
 * <li><strong>Extension support</strong>: Additional features beyond the core specification</li>
21
 * <li><strong>Device count</strong>: Number of compute devices available on this platform</li>
22
 * </ul>
23
 * 
24
 * <p>Platform selection considerations:
25
 * <ul>
26
 * <li><strong>Vendor optimization</strong>: Different vendors may optimize for different workloads</li>
27
 * <li><strong>Feature requirements</strong>: Embedded profiles may lack required features</li>
28
 * <li><strong>Version compatibility</strong>: Newer OpenCL versions provide additional features</li>
29
 * <li><strong>Extension dependencies</strong>: Some algorithms may require specific extensions</li>
30
 * <li><strong>Device availability</strong>: Platforms must have compatible devices</li>
31
 * </ul>
32
 * 
33
 * <p>Common filtering patterns:
34
 * 
35
 * <pre>{@code
36
 * // Select platforms with full OpenCL profile support
37
 * Predicate<Platform> fullProfileFilter = platform -> platform.profile() == PlatformProfile.FULL_PROFILE;
38
 * 
39
 * // Select platforms from specific vendors
40
 * Predicate<Platform> vendorFilter = platform -> platform.vendor()
41
 * 		.toLowerCase()
42
 * 		.contains("nvidia")
43
 * 		|| platform.vendor()
44
 * 				.toLowerCase()
45
 * 				.contains("amd");
46
 * 
47
 * // Select platforms with minimum OpenCL version
48
 * Predicate<Platform> versionFilter = platform -> {
49
 * 	String version = platform.version();
50
 * 	return version.contains("2.") || version.contains("3.");
51
 * };
52
 * 
53
 * // Select platforms with required extensions
54
 * Predicate<Platform> extensionFilter = platform -> platform.extensions()
55
 * 		.contains("cl_khr_fp64");
56
 * 
57
 * // Combine filters for comprehensive platform selection
58
 * Predicate<Platform> combinedFilter = fullProfileFilter.and(versionFilter)
59
 * 		.and(platform -> platform.numDevices() > 0);
60
 * }</pre>
61
 * 
62
 * <p>Platform discovery workflow:
63
 * <ol>
64
 * <li><strong>Enumeration</strong>: System discovers all available OpenCL platforms</li>
65
 * <li><strong>Information query</strong>: Platform properties are read from OpenCL runtime</li>
66
 * <li><strong>Model creation</strong>: Platform objects are created with discovered information</li>
67
 * <li><strong>Filtering</strong>: User-defined predicates select appropriate platforms</li>
68
 * <li><strong>Device discovery</strong>: Selected platforms are queried for available devices</li>
69
 * </ol>
70
 * 
71
 * <p>Performance implications:
72
 * <ul>
73
 * <li><strong>Driver optimization</strong>: Platform vendors optimize for their hardware</li>
74
 * <li><strong>Memory models</strong>: Different platforms may have different memory hierarchies</li>
75
 * <li><strong>Kernel compilation</strong>: Platform-specific optimizations during compilation</li>
76
 * <li><strong>Runtime behavior</strong>: Platform-specific scheduling and resource management</li>
77
 * </ul>
78
 * 
79
 * <p>Error handling considerations:
80
 * <ul>
81
 * <li><strong>Platform availability</strong>: Platforms may become unavailable at runtime</li>
82
 * <li><strong>Version compatibility</strong>: Kernels may require specific OpenCL versions</li>
83
 * <li><strong>Extension support</strong>: Missing extensions may cause compilation failures</li>
84
 * <li><strong>Device enumeration</strong>: Platform may have no compatible devices</li>
85
 * </ul>
86
 * 
87
 * @see Device
88
 * @see PlatformProfile
89
 * @see net.bmahe.genetics4j.gpu.spec.GPUEAExecutionContext#platformFilters()
90
 * @see net.bmahe.genetics4j.gpu.opencl.PlatformUtils
91
 */
92
@Value.Immutable
93
public interface Platform {
94
95
	/**
96
	 * Returns the native OpenCL platform identifier.
97
	 * 
98
	 * @return the OpenCL platform ID for low-level operations
99
	 */
100
	cl_platform_id platformId();
101
102
	/**
103
	 * Returns the OpenCL profile supported by this platform.
104
	 * 
105
	 * @return the platform profile (FULL_PROFILE or EMBEDDED_PROFILE)
106
	 */
107
	PlatformProfile profile();
108
109
	/**
110
	 * Returns the OpenCL version string supported by this platform.
111
	 * 
112
	 * @return the OpenCL version (e.g., "OpenCL 2.1")
113
	 */
114
	String version();
115
116
	/**
117
	 * Returns the platform name provided by the vendor.
118
	 * 
119
	 * @return the human-readable platform name
120
	 */
121
	String name();
122
123
	/**
124
	 * Returns the platform vendor name.
125
	 * 
126
	 * @return the vendor name (e.g., "NVIDIA Corporation", "AMD")
127
	 */
128
	String vendor();
129
130
	/**
131
	 * Returns the set of OpenCL extensions supported by this platform.
132
	 * 
133
	 * @return set of extension names (e.g., "cl_khr_fp64", "cl_khr_global_int32_base_atomics")
134
	 */
135
	Set<String> extensions();
136
137
	/**
138
	 * Returns the number of OpenCL devices available on this platform.
139
	 * 
140
	 * @return the count of devices that can be used for computation
141
	 */
142
	int numDevices();
143
144
	/**
145
	 * Creates a new builder for constructing Platform instances.
146
	 * 
147
	 * @return a new builder for creating platform objects
148
	 */
149
	static ImmutablePlatform.Builder builder() {
150 2 1. builder : removed call to net/bmahe/genetics4j/gpu/opencl/model/ImmutablePlatform::builder → NO_COVERAGE
2. builder : replaced return value with null for net/bmahe/genetics4j/gpu/opencl/model/Platform::builder → NO_COVERAGE
		return ImmutablePlatform.builder();
151
	}
152
}

Mutations

150

1.1
Location : builder
Killed by : none
removed call to net/bmahe/genetics4j/gpu/opencl/model/ImmutablePlatform::builder → NO_COVERAGE

2.2
Location : builder
Killed by : none
replaced return value with null for net/bmahe/genetics4j/gpu/opencl/model/Platform::builder → NO_COVERAGE

Active mutators

Tests examined


Report generated by PIT 1.20.3