public class KernelManager
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
static class |
KernelManager.DeprecatedMethods
New home for deprecated methods of
Device . |
Modifier and Type | Field and Description |
---|---|
private KernelPreferences |
defaultPreferences |
private static KernelManager |
INSTANCE |
private java.util.LinkedHashMap<java.lang.Class<? extends Kernel>,PreferencesWrapper> |
preferences |
private java.util.LinkedHashMap<java.lang.Class<? extends Kernel>,KernelProfile> |
profiles |
private java.util.LinkedHashMap<java.lang.Class<? extends Kernel>,Kernel> |
sharedInstances |
Modifier | Constructor and Description |
---|---|
protected |
KernelManager() |
Modifier and Type | Method and Description |
---|---|
Device |
bestDevice() |
protected KernelPreferences |
createDefaultPreferences() |
protected java.util.LinkedHashSet<Device> |
createDefaultPreferredDevices() |
protected java.util.Comparator<OpenCLDevice> |
getDefaultAcceleratorComparator()
NB, returns -ve for the better device.
|
protected java.util.Comparator<OpenCLDevice> |
getDefaultGPUComparator()
NB, returns -ve for the better device.
|
KernelPreferences |
getDefaultPreferences() |
KernelPreferences |
getPreferences(Kernel kernel) |
protected java.util.List<Device.TYPE> |
getPreferredDeviceTypes() |
KernelProfile |
getProfile(java.lang.Class<? extends Kernel> kernelClass) |
private <T extends Kernel> |
getSharedKernelInstance(java.lang.Class<T> kernelClass) |
static KernelManager |
instance() |
void |
reportDeviceUsage(java.lang.StringBuilder builder,
boolean withProfilingInfo)
Append a report to
builder which contains information, per Kernel subclass, on which device is currently being used for the
kernel class, and which (if any) devices failed to execute a given Kernel. |
void |
reportProfilingSummary(java.lang.StringBuilder builder) |
protected static boolean |
selectLhs(OpenCLDevice _deviceLhs,
OpenCLDevice _deviceRhs) |
private static boolean |
selectLhsByType(Device.TYPE lhs,
Device.TYPE rhs) |
protected static boolean |
selectLhsIfCUDA(OpenCLDevice _deviceLhs,
OpenCLDevice _deviceRhs)
NVidia/CUDA architecture reports maxComputeUnits in a completely different context, i.e.
|
void |
setDefaultPreferredDevices(java.util.LinkedHashSet<Device> _devices) |
static void |
setKernelManager(KernelManager manager) |
void |
setPreferredDevices(Kernel _kernel,
java.util.LinkedHashSet<Device> _devices) |
protected void |
setup()
Default KernelManager initialization.
Convenience method for being overridden to an empty implementation, so that derived KernelManager classes can provide non static parameters to their constructors. |
static <T extends Kernel> |
sharedKernelInstance(java.lang.Class<T> kernelClass)
This method returns a shared instance of a given Kernel subclass.
|
private static KernelManager INSTANCE
private java.util.LinkedHashMap<java.lang.Class<? extends Kernel>,PreferencesWrapper> preferences
private java.util.LinkedHashMap<java.lang.Class<? extends Kernel>,KernelProfile> profiles
private java.util.LinkedHashMap<java.lang.Class<? extends Kernel>,Kernel> sharedInstances
private KernelPreferences defaultPreferences
protected void setup()
public static KernelManager instance()
public static void setKernelManager(KernelManager manager)
public static <T extends Kernel> T sharedKernelInstance(java.lang.Class<T> kernelClass)
Each new Kernel instance requires a new JNIContext, the creation of which is expensive. There is apparently no simple solution by which a cached JNIContext can be reused for all instances of a given Kernel class, since it is intimately connected with resource aquisition and release. In the absence of a context caching solution, it is often highly desirable to only ever create one instance of any given Kernel subclass, which this method facilitates.
In order to maintain thread saftey when using a shared instance, it is necessary to synchronize on the returned kernel for the duration of the process of setting up, executing and extracting the results from that kernel.
This method instantiates a Kernel (per Kernel class) via Reflection, and thus can only be used where the Kernel class has a no-args constructor, which need not be public. In fact, if a Kernel subclass is designed to be used in conjunction with this method, it is recommended that its only constructor is a private no-args constructor.
java.lang.RuntimeException
- if the class cannot be instantiatedpublic void reportDeviceUsage(java.lang.StringBuilder builder, boolean withProfilingInfo)
builder
which contains information, per Kernel subclass, on which device is currently being used for the
kernel class, and which (if any) devices failed to execute a given Kernel.public void reportProfilingSummary(java.lang.StringBuilder builder)
public KernelPreferences getPreferences(Kernel kernel)
public void setPreferredDevices(Kernel _kernel, java.util.LinkedHashSet<Device> _devices)
public KernelPreferences getDefaultPreferences()
public void setDefaultPreferredDevices(java.util.LinkedHashSet<Device> _devices)
protected KernelPreferences createDefaultPreferences()
private <T extends Kernel> T getSharedKernelInstance(java.lang.Class<T> kernelClass)
protected java.util.LinkedHashSet<Device> createDefaultPreferredDevices()
protected java.util.List<Device.TYPE> getPreferredDeviceTypes()
protected java.util.Comparator<OpenCLDevice> getDefaultAcceleratorComparator()
protected java.util.Comparator<OpenCLDevice> getDefaultGPUComparator()
public Device bestDevice()
protected static boolean selectLhs(OpenCLDevice _deviceLhs, OpenCLDevice _deviceRhs)
protected static boolean selectLhsIfCUDA(OpenCLDevice _deviceLhs, OpenCLDevice _deviceRhs)
Therefore when comparing an NVidia device we use different criteria.
private static boolean selectLhsByType(Device.TYPE lhs, Device.TYPE rhs)
public KernelProfile getProfile(java.lang.Class<? extends Kernel> kernelClass)