Class NativeOpenCLFFTBackend
java.lang.Object
org.episteme.nativ.mathematics.analysis.fft.backends.NativeOpenCLFFTBackend
- All Implemented Interfaces:
FFTProvider, AlgorithmProvider, Backend, ComputeBackend, GPUBackend, NativeBackend
@AutoService({FFTProvider.class,GPUBackend.class,ComputeBackend.class,Backend.class,NativeBackend.class})
public class NativeOpenCLFFTBackend
extends Object
implements FFTProvider, GPUBackend, NativeBackend
OpenCL implementation of FFTProvider using a Direct Fourier Transform (DFT) kernel.
This provides a GPU-accelerated implementation using standard O(N^2) DFT logic for correctness verification. Note: For high performance on large N, an optimized Cooley-Tukey (O(N log N)) kernel is required.
- Since:
- 1.2
- Author:
- Silvere Martin-Michiellot, Gemini AI (Google DeepMind)
-
Nested Class Summary
Nested classes/interfaces inherited from interface GPUBackend
GPUBackend.DeviceInfo -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionlongallocateGPUMemory(long sizeBytes) Allocates GPU memory and returns a handle.voidcopyFromGPU(long gpuHandle, DoubleBuffer hostBuffer, long sizeBytes) Copies data from GPU to host.voidcopyToGPU(long gpuHandle, DoubleBuffer hostBuffer, long sizeBytes) Copies data from host to GPU.Creates an execution context for running operations.voidfreeGPUMemory(long gpuHandle) Frees GPU memory.Returns the type of hardware accelerator used by this backend.Returns the unique category of the algorithm.Returns information about available GPU devices.getId()Returns the unique identifier for this backend (e.g., "javafx", "jmol", "cuda").getName()Returns the display name for UI presentation.Returns the name of the native library this backend depends on.intReturns the execution priority (higher is better).voiddouble[][]inverseTransform(double[] real, double[] imag) float[][]inverseTransform(float[] real, float[] imag) Real[][]inverseTransform(Real[] real, Real[] imag) double[][][]inverseTransform2D(double[][] real, double[][] imag) float[][][]inverseTransform2D(float[][] real, float[][] imag) Real[][][]inverseTransform2D(Real[][] real, Real[][] imag) double[][][][]inverseTransform3D(double[][][] real, double[][][] imag) float[][][][]inverseTransform3D(float[][][] real, float[][][] imag) Real[][][][]inverseTransform3D(Real[][][] real, Real[][][] imag) Complex[]inverseTransformComplex(Complex[] data) Complex[][]inverseTransformComplex2D(Complex[][] data) Complex[][][]inverseTransformComplex3D(Complex[][][] data) booleanChecks if the provider is available in the current environment.booleanChecks if this backend is specifically disabled via a system property:"episteme.backend.disable." + getId().booleanisLoaded()Checks if the native library is loaded and available.voidmatrixMultiply(DoubleBuffer A, DoubleBuffer B, DoubleBuffer C, int m, int n, int k) Performs matrix multiplication C = A * B on the GPU.doublescore(OperationContext context) Context-aware scoring that accounts for GPU data transfer overhead.voidselectDevice(int deviceId) Selects a GPU device for computation.voidshutdown()Called when the provider is no longer needed (e.g., application shutdown).voidSynchronizes GPU execution (waits for all kernels to complete).double[][]transform(double[] real, double[] imag) float[][]transform(float[] real, float[] imag) Real[][]double[][][]transform2D(double[][] real, double[][] imag) float[][][]transform2D(float[][] real, float[][] imag) Real[][][]transform2D(Real[][] real, Real[][] imag) double[][][][]transform3D(double[][][] real, double[][][] imag) float[][][][]transform3D(float[][][] real, float[][][] imag) Real[][][][]transform3D(Real[][][] real, Real[][][] imag) Complex[]transformComplex(Complex[] data) Complex[][]transformComplex2D(Complex[][] data) Complex[][][]transformComplex3D(Complex[][][] data) Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface AlgorithmProvider
description, getMetadataMethods inherited from interface Backend
getAlgorithmProviders, getStatusMessageMethods inherited from interface ComputeBackend
createBackend, getDescription, getType, supportsComplexNumbers, supportsFloatingPoint, supportsParallelOps
-
Constructor Details
-
NativeOpenCLFFTBackend
public NativeOpenCLFFTBackend()
-
-
Method Details
-
isAvailable
public boolean isAvailable()Description copied from interface:AlgorithmProviderChecks if the provider is available in the current environment.- Specified by:
isAvailablein interfaceAlgorithmProvider- Specified by:
isAvailablein interfaceBackend
-
isExplicitlyDisabled
public boolean isExplicitlyDisabled()Description copied from interface:BackendChecks if this backend is specifically disabled via a system property:"episteme.backend.disable." + getId().It also checks specialized properties like
"episteme.linearalgebra.disable." + getId().- Specified by:
isExplicitlyDisabledin interfaceBackend- Returns:
- true if explicitly disabled
-
getId
-
initialize
public void initialize() -
getName
Description copied from interface:BackendReturns the display name for UI presentation.- Specified by:
getNamein interfaceAlgorithmProvider- Specified by:
getNamein interfaceBackend- Specified by:
getNamein interfaceFFTProvider
-
getPriority
public int getPriority()Description copied from interface:AlgorithmProviderReturns the execution priority (higher is better).- Specified by:
getPriorityin interfaceAlgorithmProvider- Specified by:
getPriorityin interfaceBackend
-
getAcceleratorType
Description copied from interface:ComputeBackendReturns the type of hardware accelerator used by this backend.- Specified by:
getAcceleratorTypein interfaceComputeBackend- Returns:
- the accelerator type
-
getAlgorithmType
Description copied from interface:AlgorithmProviderReturns the unique category of the algorithm.- Specified by:
getAlgorithmTypein interfaceAlgorithmProvider- Specified by:
getAlgorithmTypein interfaceFFTProvider
-
getDevices
Description copied from interface:GPUBackendReturns information about available GPU devices.- Specified by:
getDevicesin interfaceGPUBackend
-
selectDevice
public void selectDevice(int deviceId) Description copied from interface:GPUBackendSelects a GPU device for computation.- Specified by:
selectDevicein interfaceGPUBackend- Parameters:
deviceId- Device index (0-based)
-
allocateGPUMemory
public long allocateGPUMemory(long sizeBytes) Description copied from interface:GPUBackendAllocates GPU memory and returns a handle.- Specified by:
allocateGPUMemoryin interfaceGPUBackend- Parameters:
sizeBytes- Size in bytes- Returns:
- GPU memory handle (opaque pointer)
-
copyToGPU
Description copied from interface:GPUBackendCopies data from host to GPU.- Specified by:
copyToGPUin interfaceGPUBackend- Parameters:
gpuHandle- GPU memory handlehostBuffer- Host buffersizeBytes- Number of bytes to copy
-
copyFromGPU
Description copied from interface:GPUBackendCopies data from GPU to host.- Specified by:
copyFromGPUin interfaceGPUBackend- Parameters:
gpuHandle- GPU memory handlehostBuffer- Host buffersizeBytes- Number of bytes to copy
-
freeGPUMemory
public void freeGPUMemory(long gpuHandle) Description copied from interface:GPUBackendFrees GPU memory.- Specified by:
freeGPUMemoryin interfaceGPUBackend- Parameters:
gpuHandle- GPU memory handle
-
synchronize
public void synchronize()Description copied from interface:GPUBackendSynchronizes GPU execution (waits for all kernels to complete).- Specified by:
synchronizein interfaceGPUBackend
-
matrixMultiply
Description copied from interface:GPUBackendPerforms matrix multiplication C = A * B on the GPU. Dimensions: A(m x k), B(k x n), C(m x n).- Specified by:
matrixMultiplyin interfaceGPUBackend
-
createContext
Description copied from interface:ComputeBackendCreates an execution context for running operations.The context should be used within a try-with-resources block to ensure proper cleanup of resources.
- Specified by:
createContextin interfaceComputeBackend- Returns:
- new execution context
-
score
Context-aware scoring that accounts for GPU data transfer overhead.- Specified by:
scorein interfaceAlgorithmProvider- Parameters:
context- the operation context (data size, hints, etc.)- Returns:
- suitability score (higher = better)
-
transform
public double[][] transform(double[] real, double[] imag) - Specified by:
transformin interfaceFFTProvider
-
inverseTransform
public double[][] inverseTransform(double[] real, double[] imag) - Specified by:
inverseTransformin interfaceFFTProvider
-
transform
- Specified by:
transformin interfaceFFTProvider
-
inverseTransform
- Specified by:
inverseTransformin interfaceFFTProvider
-
transformComplex
- Specified by:
transformComplexin interfaceFFTProvider
-
inverseTransformComplex
- Specified by:
inverseTransformComplexin interfaceFFTProvider
-
transform
public float[][] transform(float[] real, float[] imag) - Specified by:
transformin interfaceFFTProvider
-
inverseTransform
public float[][] inverseTransform(float[] real, float[] imag) - Specified by:
inverseTransformin interfaceFFTProvider
-
transform2D
public double[][][] transform2D(double[][] real, double[][] imag) - Specified by:
transform2Din interfaceFFTProvider
-
inverseTransform2D
public double[][][] inverseTransform2D(double[][] real, double[][] imag) - Specified by:
inverseTransform2Din interfaceFFTProvider
-
transform3D
public double[][][][] transform3D(double[][][] real, double[][][] imag) - Specified by:
transform3Din interfaceFFTProvider
-
inverseTransform3D
public double[][][][] inverseTransform3D(double[][][] real, double[][][] imag) - Specified by:
inverseTransform3Din interfaceFFTProvider
-
transform2D
- Specified by:
transform2Din interfaceFFTProvider
-
inverseTransform2D
- Specified by:
inverseTransform2Din interfaceFFTProvider
-
transform3D
- Specified by:
transform3Din interfaceFFTProvider
-
inverseTransform3D
- Specified by:
inverseTransform3Din interfaceFFTProvider
-
transform2D
public float[][][] transform2D(float[][] real, float[][] imag) - Specified by:
transform2Din interfaceFFTProvider
-
inverseTransform2D
public float[][][] inverseTransform2D(float[][] real, float[][] imag) - Specified by:
inverseTransform2Din interfaceFFTProvider
-
transform3D
public float[][][][] transform3D(float[][][] real, float[][][] imag) - Specified by:
transform3Din interfaceFFTProvider
-
inverseTransform3D
public float[][][][] inverseTransform3D(float[][][] real, float[][][] imag) - Specified by:
inverseTransform3Din interfaceFFTProvider
-
transformComplex2D
- Specified by:
transformComplex2Din interfaceFFTProvider
-
inverseTransformComplex2D
- Specified by:
inverseTransformComplex2Din interfaceFFTProvider
-
transformComplex3D
- Specified by:
transformComplex3Din interfaceFFTProvider
-
inverseTransformComplex3D
- Specified by:
inverseTransformComplex3Din interfaceFFTProvider
-
shutdown
public void shutdown()Description copied from interface:AlgorithmProviderCalled when the provider is no longer needed (e.g., application shutdown). Use this to release local resources or close native segments.- Specified by:
shutdownin interfaceAlgorithmProvider- Specified by:
shutdownin interfaceBackend
-
isLoaded
public boolean isLoaded()Description copied from interface:NativeBackendChecks if the native library is loaded and available.- Specified by:
isLoadedin interfaceNativeBackend- Returns:
- true if the native library has been successfully loaded
-
getNativeLibraryName
Description copied from interface:NativeBackendReturns the name of the native library this backend depends on.- Specified by:
getNativeLibraryNamein interfaceNativeBackend- Returns:
- library name (e.g., "openblas", "cuda", "fftw3")
-