| 1 | package net.bmahe.genetics4j.gpu.spec.fitness; | |
| 2 | ||
| 3 | import java.util.Map; | |
| 4 | ||
| 5 | import org.apache.commons.lang3.Validate; | |
| 6 | import org.apache.logging.log4j.LogManager; | |
| 7 | import org.apache.logging.log4j.Logger; | |
| 8 | import org.jocl.CL; | |
| 9 | import org.jocl.Pointer; | |
| 10 | import org.jocl.Sizeof; | |
| 11 | ||
| 12 | import net.bmahe.genetics4j.gpu.opencl.OpenCLExecutionContext; | |
| 13 | import net.bmahe.genetics4j.gpu.opencl.model.Device; | |
| 14 | import net.bmahe.genetics4j.gpu.spec.fitness.cldata.CLData; | |
| 15 | ||
| 16 | /** | |
| 17 | * Utility class for extracting computation results from OpenCL device memory after GPU kernel execution. | |
| 18 | * | |
| 19 | * <p>ResultExtractor provides type-safe methods for retrieving different data types from OpenCL memory buffers that | |
| 20 | * contain the results of GPU-accelerated fitness evaluation. This class handles the device-to-host data transfer and | |
| 21 | * type conversion necessary to make GPU computation results available to the evolutionary algorithm. | |
| 22 | * | |
| 23 | * <p>Key functionality includes: | |
| 24 | * <ul> | |
| 25 | * <li><strong>Type-safe extraction</strong>: Methods for extracting float, int, long arrays with type validation</li> | |
| 26 | * <li><strong>Image data support</strong>: Specialized extraction for OpenCL image objects</li> | |
| 27 | * <li><strong>Device management</strong>: Tracks result data across multiple devices</li> | |
| 28 | * <li><strong>Argument indexing</strong>: Maps kernel arguments to their corresponding result data</li> | |
| 29 | * </ul> | |
| 30 | * | |
| 31 | * <p>Common usage patterns: | |
| 32 | * | |
| 33 | * <pre>{@code | |
| 34 | * // Extract fitness values as float array | |
| 35 | * float[] fitnessValues = resultExtractor.extractFloatArray(context, 0); | |
| 36 | * | |
| 37 | * // Extract integer results (e.g., classification results) | |
| 38 | * int[] classifications = resultExtractor.extractIntArray(context, 1); | |
| 39 | * | |
| 40 | * // Extract long results (e.g., counters or large indices) | |
| 41 | * long[] counters = resultExtractor.extractLongArray(context, 2); | |
| 42 | * | |
| 43 | * // Extract image data for visualization | |
| 44 | * byte[] imageData = resultExtractor.extractImageAsByteArray(context, 3, width, height, channels, channelSize); | |
| 45 | * | |
| 46 | * // Use extracted results in fitness evaluation | |
| 47 | * List<Double> fitness = IntStream.range(0, fitnessValues.length) | |
| 48 | * .mapToDouble(i -> (double) fitnessValues[i]) | |
| 49 | * .boxed() | |
| 50 | * .collect(Collectors.toList()); | |
| 51 | * }</pre> | |
| 52 | * | |
| 53 | * <p>Data extraction workflow: | |
| 54 | * <ol> | |
| 55 | * <li><strong>Kernel execution</strong>: GPU kernels compute results and store them in device memory</li> | |
| 56 | * <li><strong>Result mapping</strong>: Results are mapped by device and kernel argument index</li> | |
| 57 | * <li><strong>Type validation</strong>: Data types are validated before extraction</li> | |
| 58 | * <li><strong>Data transfer</strong>: Results are transferred from device to host memory</li> | |
| 59 | * <li><strong>Type conversion</strong>: Data is converted to appropriate Java types</li> | |
| 60 | * </ol> | |
| 61 | * | |
| 62 | * <p>Error handling and validation: | |
| 63 | * <ul> | |
| 64 | * <li><strong>Device validation</strong>: Ensures requested device has result data</li> | |
| 65 | * <li><strong>Argument validation</strong>: Validates argument indices exist in result mapping</li> | |
| 66 | * <li><strong>Type checking</strong>: Ensures extracted data matches expected OpenCL types</li> | |
| 67 | * <li><strong>Transfer validation</strong>: Validates successful device-to-host data transfer</li> | |
| 68 | * </ul> | |
| 69 | * | |
| 70 | * <p>Performance considerations: | |
| 71 | * <ul> | |
| 72 | * <li><strong>Synchronous transfers</strong>: Uses blocking transfers to ensure data availability</li> | |
| 73 | * <li><strong>Memory efficiency</strong>: Allocates host memory based on actual data sizes</li> | |
| 74 | * <li><strong>Transfer optimization</strong>: Minimizes number of device-to-host transfers</li> | |
| 75 | * <li><strong>Type safety</strong>: Validates types at runtime to prevent data corruption</li> | |
| 76 | * </ul> | |
| 77 | * | |
| 78 | * @see CLData | |
| 79 | * @see net.bmahe.genetics4j.gpu.spec.fitness.OpenCLFitness | |
| 80 | * @see OpenCLExecutionContext | |
| 81 | */ | |
| 82 | public class ResultExtractor { | |
| 83 | public static final Logger logger = LogManager.getLogger(ResultExtractor.class); | |
| 84 | ||
| 85 | private final Map<Device, Map<Integer, CLData>> resultData; | |
| 86 | ||
| 87 | /** | |
| 88 | * Extracts CLData for the specified device and kernel argument index. | |
| 89 | * | |
| 90 | * @param device the OpenCL device to extract data from | |
| 91 | * @param argumentIndex the kernel argument index for the data | |
| 92 | * @return the CLData object containing the result data | |
| 93 | * @throws IllegalArgumentException if device is null, argumentIndex is negative, device not found, or argument index | |
| 94 | * not found | |
| 95 | */ | |
| 96 | protected CLData extractClData(final Device device, final int argumentIndex) { | |
| 97 | Validate.notNull(device); | |
| 98 | Validate.isTrue(argumentIndex >= 0); | |
| 99 | ||
| 100 |
4
1. extractClData : removed conditional - replaced equality check with true → NO_COVERAGE 2. extractClData : removed conditional - replaced equality check with false → NO_COVERAGE 3. extractClData : negated conditional → NO_COVERAGE 4. extractClData : removed call to java/util/Map::containsKey → NO_COVERAGE |
if (resultData.containsKey(device) == false) { |
| 101 |
2
1. extractClData : removed call to java/lang/IllegalArgumentException::<init> → NO_COVERAGE 2. extractClData : removed call to net/bmahe/genetics4j/gpu/opencl/model/Device::name → NO_COVERAGE |
throw new IllegalArgumentException("Could not find entry for device [" + device.name() + "]"); |
| 102 | } | |
| 103 | ||
| 104 |
2
1. extractClData : replaced call to java/util/Map::get with argument → NO_COVERAGE 2. extractClData : removed call to java/util/Map::get → NO_COVERAGE |
final var deviceResults = resultData.get(device); |
| 105 | ||
| 106 |
5
1. extractClData : removed call to java/lang/Integer::valueOf → NO_COVERAGE 2. extractClData : removed conditional - replaced equality check with true → NO_COVERAGE 3. extractClData : negated conditional → NO_COVERAGE 4. extractClData : removed conditional - replaced equality check with false → NO_COVERAGE 5. extractClData : removed call to java/util/Map::containsKey → NO_COVERAGE |
if (deviceResults.containsKey(argumentIndex) == false) { |
| 107 |
1
1. extractClData : removed call to java/lang/IllegalArgumentException::<init> → NO_COVERAGE |
throw new IllegalArgumentException("No data defined for argument " + argumentIndex); |
| 108 | } | |
| 109 | ||
| 110 |
3
1. extractClData : removed call to java/lang/Integer::valueOf → NO_COVERAGE 2. extractClData : removed call to java/util/Map::get → NO_COVERAGE 3. extractClData : replaced call to java/util/Map::get with argument → NO_COVERAGE |
final var clData = deviceResults.get(argumentIndex); |
| 111 |
1
1. extractClData : replaced return value with null for net/bmahe/genetics4j/gpu/spec/fitness/ResultExtractor::extractClData → NO_COVERAGE |
return clData; |
| 112 | } | |
| 113 | ||
| 114 | /** | |
| 115 | * Constructs a ResultExtractor with the specified result data mapping. | |
| 116 | * | |
| 117 | * @param _resultData mapping from devices to their kernel argument results | |
| 118 | */ | |
| 119 | public ResultExtractor(final Map<Device, Map<Integer, CLData>> _resultData) { | |
| 120 | ||
| 121 |
1
1. <init> : Removed assignment to member variable resultData → NO_COVERAGE |
this.resultData = _resultData; |
| 122 | } | |
| 123 | ||
| 124 | /** | |
| 125 | * Extracts image data from OpenCL device memory as a byte array. | |
| 126 | * | |
| 127 | * <p>This method reads an OpenCL image object from device memory and converts it to a byte array suitable for host | |
| 128 | * processing. The image dimensions and channel information must be provided to properly interpret the image data. | |
| 129 | * | |
| 130 | * @param openCLExecutionContext the OpenCL execution context | |
| 131 | * @param argumentIndex the kernel argument index containing the image data | |
| 132 | * @param width the image width in pixels | |
| 133 | * @param height the image height in pixels | |
| 134 | * @param numChannels the number of color channels (e.g., 3 for RGB, 4 for RGBA) | |
| 135 | * @param channelSize the size of each channel in bytes | |
| 136 | * @return byte array containing the image data | |
| 137 | * @throws IllegalArgumentException if any parameter is invalid | |
| 138 | */ | |
| 139 | public byte[] extractImageAsByteArray(final OpenCLExecutionContext openCLExecutionContext, final int argumentIndex, | |
| 140 | final int width, final int height, final int numChannels, final int channelSize) { | |
| 141 | Validate.isTrue(argumentIndex >= 0); | |
| 142 | Validate.isTrue(width > 0); | |
| 143 | Validate.isTrue(height > 0); | |
| 144 | Validate.isTrue(numChannels > 0); | |
| 145 | Validate.isTrue(channelSize > 0); | |
| 146 | ||
| 147 |
1
1. extractImageAsByteArray : removed call to net/bmahe/genetics4j/gpu/opencl/OpenCLExecutionContext::device → NO_COVERAGE |
final var device = openCLExecutionContext.device(); |
| 148 |
1
1. extractImageAsByteArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/ResultExtractor::extractClData → NO_COVERAGE |
final var clData = extractClData(device, argumentIndex); |
| 149 | ||
| 150 |
1
1. extractImageAsByteArray : removed call to net/bmahe/genetics4j/gpu/opencl/OpenCLExecutionContext::clCommandQueue → NO_COVERAGE |
final var clCommandQueue = openCLExecutionContext.clCommandQueue(); |
| 151 | ||
| 152 |
3
1. extractImageAsByteArray : Replaced integer multiplication with division → NO_COVERAGE 2. extractImageAsByteArray : Replaced integer multiplication with division → NO_COVERAGE 3. extractImageAsByteArray : Replaced integer multiplication with division → NO_COVERAGE |
final byte[] data = new byte[width * height * numChannels * channelSize]; |
| 153 |
2
1. extractImageAsByteArray : removed call to org/jocl/CL::clEnqueueReadImage → NO_COVERAGE 2. extractImageAsByteArray : replaced call to org/jocl/CL::clEnqueueReadImage with argument → NO_COVERAGE |
CL.clEnqueueReadImage(clCommandQueue, |
| 154 |
16
1. extractImageAsByteArray : Substituted 0 with 1 → NO_COVERAGE 2. extractImageAsByteArray : Substituted 2 with 3 → NO_COVERAGE 3. extractImageAsByteArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/cldata/CLData::clMem → NO_COVERAGE 4. extractImageAsByteArray : Substituted 1 with 0 → NO_COVERAGE 5. extractImageAsByteArray : Substituted 1 with 0 → NO_COVERAGE 6. extractImageAsByteArray : Substituted 0 with 1 → NO_COVERAGE 7. extractImageAsByteArray : Substituted 3 with 4 → NO_COVERAGE 8. extractImageAsByteArray : Substituted 0 with 1 → NO_COVERAGE 9. extractImageAsByteArray : Substituted 0 with 1 → NO_COVERAGE 10. extractImageAsByteArray : Substituted 1 with 0 → NO_COVERAGE 11. extractImageAsByteArray : Substituted 3 with 4 → NO_COVERAGE 12. extractImageAsByteArray : Substituted 0 with 1 → NO_COVERAGE 13. extractImageAsByteArray : Substituted 1 with 2 → NO_COVERAGE 14. extractImageAsByteArray : Substituted 2 with 3 → NO_COVERAGE 15. extractImageAsByteArray : Substituted 0 with 1 → NO_COVERAGE 16. extractImageAsByteArray : Substituted 0 with 1 → NO_COVERAGE |
clData.clMem(), |
| 155 | CL.CL_TRUE, | |
| 156 | new long[] { 0, 0, 0 }, | |
| 157 | new long[] { width, height, 1 }, | |
| 158 | 0, | |
| 159 | 0, | |
| 160 |
2
1. extractImageAsByteArray : Substituted 0 with 1 → NO_COVERAGE 2. extractImageAsByteArray : removed call to org/jocl/Pointer::to → NO_COVERAGE |
Pointer.to(data), |
| 161 | 0, | |
| 162 | null, | |
| 163 | null); | |
| 164 | ||
| 165 |
1
1. extractImageAsByteArray : replaced return value with null for net/bmahe/genetics4j/gpu/spec/fitness/ResultExtractor::extractImageAsByteArray → NO_COVERAGE |
return data; |
| 166 | } | |
| 167 | ||
| 168 | /** | |
| 169 | * Extracts floating-point data from OpenCL device memory as a float array. | |
| 170 | * | |
| 171 | * <p>This method reads floating-point data from device memory and transfers it to host memory. The data type is | |
| 172 | * validated to ensure it contains floating-point values before extraction. | |
| 173 | * | |
| 174 | * @param openCLExecutionContext the OpenCL execution context | |
| 175 | * @param argumentIndex the kernel argument index containing the float data | |
| 176 | * @return float array containing the extracted data | |
| 177 | * @throws IllegalArgumentException if the data is not of type float | |
| 178 | */ | |
| 179 | public float[] extractFloatArray(final OpenCLExecutionContext openCLExecutionContext, final int argumentIndex) { | |
| 180 |
1
1. extractFloatArray : removed call to net/bmahe/genetics4j/gpu/opencl/OpenCLExecutionContext::device → NO_COVERAGE |
final var device = openCLExecutionContext.device(); |
| 181 |
1
1. extractFloatArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/ResultExtractor::extractClData → NO_COVERAGE |
final var clData = extractClData(device, argumentIndex); |
| 182 | ||
| 183 |
5
1. extractFloatArray : negated conditional → NO_COVERAGE 2. extractFloatArray : removed conditional - replaced equality check with false → NO_COVERAGE 3. extractFloatArray : removed conditional - replaced equality check with true → NO_COVERAGE 4. extractFloatArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/cldata/CLData::clType → NO_COVERAGE 5. extractFloatArray : Substituted 4 with 5 → NO_COVERAGE |
if (clData.clType() != Sizeof.cl_float) { |
| 184 |
1
1. extractFloatArray : removed call to java/lang/IllegalArgumentException::<init> → NO_COVERAGE |
throw new IllegalArgumentException("Data is not of type of float[]"); |
| 185 | } | |
| 186 | ||
| 187 |
1
1. extractFloatArray : removed call to net/bmahe/genetics4j/gpu/opencl/OpenCLExecutionContext::clCommandQueue → NO_COVERAGE |
final var clCommandQueue = openCLExecutionContext.clCommandQueue(); |
| 188 | ||
| 189 |
1
1. extractFloatArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/cldata/CLData::size → NO_COVERAGE |
final float[] data = new float[clData.size()]; |
| 190 |
2
1. extractFloatArray : removed call to org/jocl/CL::clEnqueueReadBuffer → NO_COVERAGE 2. extractFloatArray : replaced call to org/jocl/CL::clEnqueueReadBuffer with argument → NO_COVERAGE |
CL.clEnqueueReadBuffer(clCommandQueue, |
| 191 |
3
1. extractFloatArray : Substituted 1 with 0 → NO_COVERAGE 2. extractFloatArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/cldata/CLData::clMem → NO_COVERAGE 3. extractFloatArray : Substituted 0 with 1 → NO_COVERAGE |
clData.clMem(), |
| 192 | CL.CL_TRUE, | |
| 193 | 0, | |
| 194 |
3
1. extractFloatArray : Replaced integer multiplication with division → NO_COVERAGE 2. extractFloatArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/cldata/CLData::size → NO_COVERAGE 3. extractFloatArray : Substituted 4 with 5 → NO_COVERAGE |
clData.size() * Sizeof.cl_float, |
| 195 |
2
1. extractFloatArray : removed call to org/jocl/Pointer::to → NO_COVERAGE 2. extractFloatArray : Substituted 0 with 1 → NO_COVERAGE |
Pointer.to(data), |
| 196 | 0, | |
| 197 | null, | |
| 198 | null); | |
| 199 | ||
| 200 |
1
1. extractFloatArray : replaced return value with null for net/bmahe/genetics4j/gpu/spec/fitness/ResultExtractor::extractFloatArray → NO_COVERAGE |
return data; |
| 201 | } | |
| 202 | ||
| 203 | /** | |
| 204 | * Extracts integer data from OpenCL device memory as an int array. | |
| 205 | * | |
| 206 | * <p>This method reads integer data from device memory and transfers it to host memory. The data type is validated | |
| 207 | * to ensure it contains integer values before extraction. | |
| 208 | * | |
| 209 | * @param openCLExecutionContext the OpenCL execution context | |
| 210 | * @param argumentIndex the kernel argument index containing the integer data | |
| 211 | * @return int array containing the extracted data | |
| 212 | * @throws IllegalArgumentException if the data is not of type int | |
| 213 | */ | |
| 214 | public int[] extractIntArray(final OpenCLExecutionContext openCLExecutionContext, final int argumentIndex) { | |
| 215 |
1
1. extractIntArray : removed call to net/bmahe/genetics4j/gpu/opencl/OpenCLExecutionContext::device → NO_COVERAGE |
final var device = openCLExecutionContext.device(); |
| 216 |
1
1. extractIntArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/ResultExtractor::extractClData → NO_COVERAGE |
final var clData = extractClData(device, argumentIndex); |
| 217 | ||
| 218 |
5
1. extractIntArray : removed conditional - replaced equality check with true → NO_COVERAGE 2. extractIntArray : removed conditional - replaced equality check with false → NO_COVERAGE 3. extractIntArray : Substituted 4 with 5 → NO_COVERAGE 4. extractIntArray : negated conditional → NO_COVERAGE 5. extractIntArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/cldata/CLData::clType → NO_COVERAGE |
if (clData.clType() != Sizeof.cl_int) { |
| 219 |
1
1. extractIntArray : removed call to java/lang/IllegalArgumentException::<init> → NO_COVERAGE |
throw new IllegalArgumentException("Data is not of type of int[]"); |
| 220 | } | |
| 221 | ||
| 222 |
1
1. extractIntArray : removed call to net/bmahe/genetics4j/gpu/opencl/OpenCLExecutionContext::clCommandQueue → NO_COVERAGE |
final var clCommandQueue = openCLExecutionContext.clCommandQueue(); |
| 223 | ||
| 224 |
1
1. extractIntArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/cldata/CLData::size → NO_COVERAGE |
final int[] data = new int[clData.size()]; |
| 225 |
2
1. extractIntArray : removed call to org/jocl/CL::clEnqueueReadBuffer → NO_COVERAGE 2. extractIntArray : replaced call to org/jocl/CL::clEnqueueReadBuffer with argument → NO_COVERAGE |
CL.clEnqueueReadBuffer(clCommandQueue, |
| 226 |
3
1. extractIntArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/cldata/CLData::clMem → NO_COVERAGE 2. extractIntArray : Substituted 1 with 0 → NO_COVERAGE 3. extractIntArray : Substituted 0 with 1 → NO_COVERAGE |
clData.clMem(), |
| 227 | CL.CL_TRUE, | |
| 228 | 0, | |
| 229 |
3
1. extractIntArray : Replaced integer multiplication with division → NO_COVERAGE 2. extractIntArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/cldata/CLData::size → NO_COVERAGE 3. extractIntArray : Substituted 4 with 5 → NO_COVERAGE |
clData.size() * Sizeof.cl_int, |
| 230 |
2
1. extractIntArray : Substituted 0 with 1 → NO_COVERAGE 2. extractIntArray : removed call to org/jocl/Pointer::to → NO_COVERAGE |
Pointer.to(data), |
| 231 | 0, | |
| 232 | null, | |
| 233 | null); | |
| 234 | ||
| 235 |
1
1. extractIntArray : replaced return value with null for net/bmahe/genetics4j/gpu/spec/fitness/ResultExtractor::extractIntArray → NO_COVERAGE |
return data; |
| 236 | } | |
| 237 | ||
| 238 | /** | |
| 239 | * Extracts long integer data from OpenCL device memory as a long array. | |
| 240 | * | |
| 241 | * <p>This method reads long integer data from device memory and transfers it to host memory. The data type is | |
| 242 | * validated to ensure it contains long integer values before extraction. | |
| 243 | * | |
| 244 | * @param openCLExecutionContext the OpenCL execution context | |
| 245 | * @param argumentIndex the kernel argument index containing the long integer data | |
| 246 | * @return long array containing the extracted data | |
| 247 | * @throws IllegalArgumentException if the data is not of type long | |
| 248 | */ | |
| 249 | public long[] extractLongArray(final OpenCLExecutionContext openCLExecutionContext, final int argumentIndex) { | |
| 250 |
1
1. extractLongArray : removed call to net/bmahe/genetics4j/gpu/opencl/OpenCLExecutionContext::device → NO_COVERAGE |
final var device = openCLExecutionContext.device(); |
| 251 |
1
1. extractLongArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/ResultExtractor::extractClData → NO_COVERAGE |
final var clData = extractClData(device, argumentIndex); |
| 252 | ||
| 253 |
5
1. extractLongArray : Substituted 8 with 9 → NO_COVERAGE 2. extractLongArray : removed conditional - replaced equality check with false → NO_COVERAGE 3. extractLongArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/cldata/CLData::clType → NO_COVERAGE 4. extractLongArray : negated conditional → NO_COVERAGE 5. extractLongArray : removed conditional - replaced equality check with true → NO_COVERAGE |
if (clData.clType() != Sizeof.cl_long) { |
| 254 |
1
1. extractLongArray : removed call to java/lang/IllegalArgumentException::<init> → NO_COVERAGE |
throw new IllegalArgumentException("Data is not of type of long[]"); |
| 255 | } | |
| 256 | ||
| 257 |
1
1. extractLongArray : removed call to net/bmahe/genetics4j/gpu/opencl/OpenCLExecutionContext::clCommandQueue → NO_COVERAGE |
final var clCommandQueue = openCLExecutionContext.clCommandQueue(); |
| 258 | ||
| 259 |
1
1. extractLongArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/cldata/CLData::size → NO_COVERAGE |
final long[] data = new long[clData.size()]; |
| 260 |
2
1. extractLongArray : replaced call to org/jocl/CL::clEnqueueReadBuffer with argument → NO_COVERAGE 2. extractLongArray : removed call to org/jocl/CL::clEnqueueReadBuffer → NO_COVERAGE |
CL.clEnqueueReadBuffer(clCommandQueue, |
| 261 |
3
1. extractLongArray : Substituted 1 with 0 → NO_COVERAGE 2. extractLongArray : Substituted 0 with 1 → NO_COVERAGE 3. extractLongArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/cldata/CLData::clMem → NO_COVERAGE |
clData.clMem(), |
| 262 | CL.CL_TRUE, | |
| 263 | 0, | |
| 264 |
3
1. extractLongArray : removed call to net/bmahe/genetics4j/gpu/spec/fitness/cldata/CLData::size → NO_COVERAGE 2. extractLongArray : Substituted 8 with 9 → NO_COVERAGE 3. extractLongArray : Replaced integer multiplication with division → NO_COVERAGE |
clData.size() * Sizeof.cl_long, |
| 265 |
2
1. extractLongArray : Substituted 0 with 1 → NO_COVERAGE 2. extractLongArray : removed call to org/jocl/Pointer::to → NO_COVERAGE |
Pointer.to(data), |
| 266 | 0, | |
| 267 | null, | |
| 268 | null); | |
| 269 |
1
1. extractLongArray : replaced return value with null for net/bmahe/genetics4j/gpu/spec/fitness/ResultExtractor::extractLongArray → NO_COVERAGE |
return data; |
| 270 | } | |
| 271 | } | |
Mutations | ||
| 100 |
1.1 2.2 3.3 4.4 |
|
| 101 |
1.1 2.2 |
|
| 104 |
1.1 2.2 |
|
| 106 |
1.1 2.2 3.3 4.4 5.5 |
|
| 107 |
1.1 |
|
| 110 |
1.1 2.2 3.3 |
|
| 111 |
1.1 |
|
| 121 |
1.1 |
|
| 147 |
1.1 |
|
| 148 |
1.1 |
|
| 150 |
1.1 |
|
| 152 |
1.1 2.2 3.3 |
|
| 153 |
1.1 2.2 |
|
| 154 |
1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9 10.10 11.11 12.12 13.13 14.14 15.15 16.16 |
|
| 160 |
1.1 2.2 |
|
| 165 |
1.1 |
|
| 180 |
1.1 |
|
| 181 |
1.1 |
|
| 183 |
1.1 2.2 3.3 4.4 5.5 |
|
| 184 |
1.1 |
|
| 187 |
1.1 |
|
| 189 |
1.1 |
|
| 190 |
1.1 2.2 |
|
| 191 |
1.1 2.2 3.3 |
|
| 194 |
1.1 2.2 3.3 |
|
| 195 |
1.1 2.2 |
|
| 200 |
1.1 |
|
| 215 |
1.1 |
|
| 216 |
1.1 |
|
| 218 |
1.1 2.2 3.3 4.4 5.5 |
|
| 219 |
1.1 |
|
| 222 |
1.1 |
|
| 224 |
1.1 |
|
| 225 |
1.1 2.2 |
|
| 226 |
1.1 2.2 3.3 |
|
| 229 |
1.1 2.2 3.3 |
|
| 230 |
1.1 2.2 |
|
| 235 |
1.1 |
|
| 250 |
1.1 |
|
| 251 |
1.1 |
|
| 253 |
1.1 2.2 3.3 4.4 5.5 |
|
| 254 |
1.1 |
|
| 257 |
1.1 |
|
| 259 |
1.1 |
|
| 260 |
1.1 2.2 |
|
| 261 |
1.1 2.2 3.3 |
|
| 264 |
1.1 2.2 3.3 |
|
| 265 |
1.1 2.2 |
|
| 269 |
1.1 |