1 package net.bmahe.genetics4j.gpu.opencl; 2 3 import org.apache.commons.lang3.Validate; 4 import org.apache.logging.log4j.LogManager; 5 import org.apache.logging.log4j.Logger; 6 import org.jocl.CL; 7 import org.jocl.cl_device_id; 8 import org.jocl.cl_kernel; 9 10 import net.bmahe.genetics4j.gpu.opencl.model.KernelInfo; 11 12 public class KernelInfoReader { 13 public static final Logger logger = LogManager.getLogger(KernelInfoReader.class); 14 15 public KernelInfo read(final cl_device_id deviceId, final cl_kernel kernel, final String kernelName) { 16 Validate.notNull(deviceId); 17 Validate.notNull(kernel); 18 Validate.notBlank(kernelName); 19 20 final var kernelInfoBuilder = KernelInfo.builder(); 21 kernelInfoBuilder.name(kernelName); 22 23 final long workGroupSize = KernelInfoUtils 24 .getKernelWorkGroupInfoLong(deviceId, kernel, CL.CL_KERNEL_WORK_GROUP_SIZE); 25 kernelInfoBuilder.workGroupSize(workGroupSize); 26 27 final long preferredWorkGroupSizeMultiple = KernelInfoUtils 28 .getKernelWorkGroupInfoLong(deviceId, kernel, CL.CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE); 29 kernelInfoBuilder.preferredWorkGroupSizeMultiple(preferredWorkGroupSizeMultiple); 30 31 final long localMemSize = KernelInfoUtils 32 .getKernelWorkGroupInfoLong(deviceId, kernel, CL.CL_KERNEL_LOCAL_MEM_SIZE); 33 kernelInfoBuilder.localMemSize(localMemSize); 34 35 final long privateMemSize = KernelInfoUtils 36 .getKernelWorkGroupInfoLong(deviceId, kernel, CL.CL_KERNEL_PRIVATE_MEM_SIZE); 37 kernelInfoBuilder.privateMemSize(privateMemSize); 38 39 return kernelInfoBuilder.build(); 40 } 41 }