Class CLFFTPlan
- java.lang.Object
-
- gov.nih.mipav.model.algorithms.filters.OpenCL.filters.CLFFTPlan
-
public class CLFFTPlan extends java.lang.Object
- Author:
- notzed
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
CLFFTPlan.CLFFTDataFormat
(package private) class
CLFFTPlan.CLFFTDim3
static class
CLFFTPlan.CLFFTDirection
(package private) static class
CLFFTPlan.CLFFTKernelDir
(package private) class
CLFFTPlan.CLFFTKernelInfo
private class
CLFFTPlan.fftPadding
class
CLFFTPlan.InvalidContextException
private class
CLFFTPlan.WorkDimensions
-
Field Summary
Fields Modifier and Type Field Description (package private) static java.lang.String
baseKernels
org.jocl.cl_context
context
(package private) int
dim
(package private) CLFFTPlan.CLFFTDataFormat
format
(package private) java.util.LinkedList<CLFFTPlan.CLFFTKernelInfo>
kernel_list
(package private) java.lang.StringBuilder
kernel_string
(package private) int
last_batch_size
(package private) int
max_localmem_fft_size
(package private) int
max_radix
(package private) int
max_work_item_per_workgroup
(package private) int
min_mem_coalesce_width
(package private) int
num_local_mem_banks
(package private) org.jocl.cl_program
program
CLFFTPlan.CLFFTDim3
size
(package private) boolean
temp_buffer_needed
(package private) org.jocl.cl_mem
tempmemobj
(package private) org.jocl.cl_mem
tempmemobj_imag
(package private) org.jocl.cl_mem
tempmemobj_real
(package private) org.jocl.cl_kernel
twist_kernel
(package private) static java.lang.String
twistKernelInterleaved
(package private) static java.lang.String
twistKernelPlannar
-
Constructor Summary
Constructors Constructor Description CLFFTPlan(org.jocl.cl_context context, int[] sizes, CLFFTPlan.CLFFTDataFormat dataFormat, org.jocl.cl_device_id gpu)
Create a new FFT plan.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) void
allocateTemporaryBufferInterleaved(int batchSize)
(package private) void
allocateTemporaryBufferPlanar(int batchSize)
(package private) void
createGlobalFFTKernelString(int n, int BS, CLFFTPlan.CLFFTKernelDir dir, int vertBS)
private void
createKernelList()
(package private) void
createLocalMemfftKernelString()
void
dumpPlan(java.io.OutputStream os)
Dump the planner result to the output stream.void
executeInterleaved(org.jocl.cl_command_queue queue, int batchSize, CLFFTPlan.CLFFTDirection dir, org.jocl.cl_mem data_in, org.jocl.cl_mem data_out, org.jocl.cl_event condition, org.jocl.cl_event event)
Calculate FFT on interleaved complex data.void
executePlanar(org.jocl.cl_command_queue queue, int batchSize, CLFFTPlan.CLFFTDirection dir, org.jocl.cl_mem data_in_real, org.jocl.cl_mem data_in_imag, org.jocl.cl_mem data_out_real, org.jocl.cl_mem data_out_imag, org.jocl.cl_event contition, org.jocl.cl_event event)
Calculate FFT of planar data.(package private) void
FFT1D(CLFFTPlan.CLFFTKernelDir dir)
(package private) void
formattedLoad(java.lang.StringBuilder kernelString, int aIndex, int gIndex, CLFFTPlan.CLFFTDataFormat dataFormat)
(package private) void
formattedStore(java.lang.StringBuilder kernelString, int aIndex, int gIndex, CLFFTPlan.CLFFTDataFormat dataFormat)
private void
getBlockConfigAndKernelString()
(package private) int
getGlobalRadixInfo(int n, int[] radix, int[] R1, int[] R2)
(package private) CLFFTPlan.WorkDimensions
getKernelWorkDimensions(CLFFTPlan.CLFFTKernelInfo kernelInfo, int batchSize)
(package private) long
getMaxKernelWorkGroupSize(org.jocl.cl_device_id devices)
(package private) CLFFTPlan.fftPadding
getPadding(int numWorkItemsPerXForm, int Nprev, int numWorkItemsReq, int numXFormsPerWG, int Nr, int numBanks)
private boolean
getPatchingRequired(org.jocl.cl_device_id devices)
(package private) int
getRadixArray(int n, int[] radixArray, int maxRadix)
(package private) void
insertfftKernel(java.lang.StringBuilder kernelString, int Nr, int numIter)
(package private) int
insertGlobalLoadsAndTranspose(java.lang.StringBuilder kernelString, int N, int numWorkItemsPerXForm, int numXFormsPerWG, int R0, int mem_coalesce_width, CLFFTPlan.CLFFTDataFormat dataFormat)
(package private) int
insertGlobalStoresAndTranspose(java.lang.StringBuilder kernelString, int N, int maxRadix, int Nr, int numWorkItemsPerXForm, int numXFormsPerWG, int mem_coalesce_width, CLFFTPlan.CLFFTDataFormat dataFormat)
(package private) void
insertHeader(java.lang.StringBuilder kernelString, java.lang.String kernelName, CLFFTPlan.CLFFTDataFormat dataFormat)
(package private) void
insertLocalLoadIndexArithmatic(java.lang.StringBuilder kernelString, int Nprev, int Nr, int numWorkItemsReq, int numWorkItemsPerXForm, int numXFormsPerWG, int offset, int midPad)
(package private) void
insertLocalLoads(java.lang.StringBuilder kernelString, int n, int Nr, int Nrn, int Nprev, int Ncurr, int numWorkItemsPerXForm, int numWorkItemsReq, int offset, java.lang.String comp)
(package private) void
insertLocalStoreIndexArithmatic(java.lang.StringBuilder kernelString, int numWorkItemsReq, int numXFormsPerWG, int Nr, int offset, int midPad)
(package private) void
insertLocalStores(java.lang.StringBuilder kernelString, int numIter, int Nr, int numWorkItemsPerXForm, int numWorkItemsReq, int offset, java.lang.String comp)
(package private) void
insertTwiddleKernel(java.lang.StringBuilder kernelString, int Nr, int numIter, int Nprev, int len, int numWorkItemsPerXForm)
(package private) void
insertVariables(java.lang.StringBuilder kStream, int maxRadix)
(package private) int
log2(int x)
void
release()
Release system resources.
-
-
-
Field Detail
-
context
public org.jocl.cl_context context
-
size
public CLFFTPlan.CLFFTDim3 size
-
dim
int dim
-
format
CLFFTPlan.CLFFTDataFormat format
-
kernel_string
java.lang.StringBuilder kernel_string
-
program
org.jocl.cl_program program
-
kernel_list
java.util.LinkedList<CLFFTPlan.CLFFTKernelInfo> kernel_list
-
twist_kernel
org.jocl.cl_kernel twist_kernel
-
temp_buffer_needed
boolean temp_buffer_needed
-
last_batch_size
int last_batch_size
-
tempmemobj
org.jocl.cl_mem tempmemobj
-
tempmemobj_real
org.jocl.cl_mem tempmemobj_real
-
tempmemobj_imag
org.jocl.cl_mem tempmemobj_imag
-
max_localmem_fft_size
int max_localmem_fft_size
-
max_work_item_per_workgroup
int max_work_item_per_workgroup
-
max_radix
int max_radix
-
min_mem_coalesce_width
int min_mem_coalesce_width
-
num_local_mem_banks
int num_local_mem_banks
-
baseKernels
static java.lang.String baseKernels
-
twistKernelInterleaved
static java.lang.String twistKernelInterleaved
-
twistKernelPlannar
static java.lang.String twistKernelPlannar
-
-
Constructor Detail
-
CLFFTPlan
public CLFFTPlan(org.jocl.cl_context context, int[] sizes, CLFFTPlan.CLFFTDataFormat dataFormat, org.jocl.cl_device_id gpu) throws CLFFTPlan.InvalidContextException
Create a new FFT plan. Use the matching executeInterleaved() or executePlanar() depending on the dataFormat specified.- Parameters:
context
-sizes
- Array of sizes for each dimension. The length of array defines how many dimensions there are.dataFormat
- Data format, InterleavedComplex (array of complex) or SplitComplex (separate planar arrays).- Throws:
zephyr.cl.CLFFTPlan.InvalidContextException
CLFFTPlan.InvalidContextException
-
-
Method Detail
-
release
public void release()
Release system resources.
-
allocateTemporaryBufferInterleaved
void allocateTemporaryBufferInterleaved(int batchSize)
-
executeInterleaved
public void executeInterleaved(org.jocl.cl_command_queue queue, int batchSize, CLFFTPlan.CLFFTDirection dir, org.jocl.cl_mem data_in, org.jocl.cl_mem data_out, org.jocl.cl_event condition, org.jocl.cl_event event)
Calculate FFT on interleaved complex data.- Parameters:
queue
-batchSize
- How many instances to calculate. Use 1 for a single FFT.dir
- Direction of calculation, Forward or Inverse.data_in
- Input buffer.data_out
- Output buffer. May be the same as data_in for in-place transform.condition
- Condition to wait for. NOT YET IMPLEMENTED.event
- Event to wait for completion. NOT YET IMPLEMENTED.
-
allocateTemporaryBufferPlanar
void allocateTemporaryBufferPlanar(int batchSize)
-
executePlanar
public void executePlanar(org.jocl.cl_command_queue queue, int batchSize, CLFFTPlan.CLFFTDirection dir, org.jocl.cl_mem data_in_real, org.jocl.cl_mem data_in_imag, org.jocl.cl_mem data_out_real, org.jocl.cl_mem data_out_imag, org.jocl.cl_event contition, org.jocl.cl_event event)
Calculate FFT of planar data.- Parameters:
queue
-batchSize
-dir
-data_in_real
-data_in_imag
-data_out_real
-data_out_imag
-contition
-event
-
-
dumpPlan
public void dumpPlan(java.io.OutputStream os)
Dump the planner result to the output stream.- Parameters:
os
- if null, System.out is used.
-
getKernelWorkDimensions
CLFFTPlan.WorkDimensions getKernelWorkDimensions(CLFFTPlan.CLFFTKernelInfo kernelInfo, int batchSize)
-
getBlockConfigAndKernelString
private void getBlockConfigAndKernelString()
-
createKernelList
private void createKernelList()
-
getPatchingRequired
private boolean getPatchingRequired(org.jocl.cl_device_id devices)
-
getMaxKernelWorkGroupSize
long getMaxKernelWorkGroupSize(org.jocl.cl_device_id devices)
-
log2
int log2(int x)
-
getRadixArray
int getRadixArray(int n, int[] radixArray, int maxRadix)
-
insertHeader
void insertHeader(java.lang.StringBuilder kernelString, java.lang.String kernelName, CLFFTPlan.CLFFTDataFormat dataFormat)
-
insertVariables
void insertVariables(java.lang.StringBuilder kStream, int maxRadix)
-
formattedLoad
void formattedLoad(java.lang.StringBuilder kernelString, int aIndex, int gIndex, CLFFTPlan.CLFFTDataFormat dataFormat)
-
formattedStore
void formattedStore(java.lang.StringBuilder kernelString, int aIndex, int gIndex, CLFFTPlan.CLFFTDataFormat dataFormat)
-
insertGlobalLoadsAndTranspose
int insertGlobalLoadsAndTranspose(java.lang.StringBuilder kernelString, int N, int numWorkItemsPerXForm, int numXFormsPerWG, int R0, int mem_coalesce_width, CLFFTPlan.CLFFTDataFormat dataFormat)
-
insertGlobalStoresAndTranspose
int insertGlobalStoresAndTranspose(java.lang.StringBuilder kernelString, int N, int maxRadix, int Nr, int numWorkItemsPerXForm, int numXFormsPerWG, int mem_coalesce_width, CLFFTPlan.CLFFTDataFormat dataFormat)
-
insertfftKernel
void insertfftKernel(java.lang.StringBuilder kernelString, int Nr, int numIter)
-
insertTwiddleKernel
void insertTwiddleKernel(java.lang.StringBuilder kernelString, int Nr, int numIter, int Nprev, int len, int numWorkItemsPerXForm)
-
getPadding
CLFFTPlan.fftPadding getPadding(int numWorkItemsPerXForm, int Nprev, int numWorkItemsReq, int numXFormsPerWG, int Nr, int numBanks)
-
insertLocalStores
void insertLocalStores(java.lang.StringBuilder kernelString, int numIter, int Nr, int numWorkItemsPerXForm, int numWorkItemsReq, int offset, java.lang.String comp)
-
insertLocalLoads
void insertLocalLoads(java.lang.StringBuilder kernelString, int n, int Nr, int Nrn, int Nprev, int Ncurr, int numWorkItemsPerXForm, int numWorkItemsReq, int offset, java.lang.String comp)
-
insertLocalLoadIndexArithmatic
void insertLocalLoadIndexArithmatic(java.lang.StringBuilder kernelString, int Nprev, int Nr, int numWorkItemsReq, int numWorkItemsPerXForm, int numXFormsPerWG, int offset, int midPad)
-
insertLocalStoreIndexArithmatic
void insertLocalStoreIndexArithmatic(java.lang.StringBuilder kernelString, int numWorkItemsReq, int numXFormsPerWG, int Nr, int offset, int midPad)
-
createLocalMemfftKernelString
void createLocalMemfftKernelString()
-
getGlobalRadixInfo
int getGlobalRadixInfo(int n, int[] radix, int[] R1, int[] R2)
-
createGlobalFFTKernelString
void createGlobalFFTKernelString(int n, int BS, CLFFTPlan.CLFFTKernelDir dir, int vertBS)
-
FFT1D
void FFT1D(CLFFTPlan.CLFFTKernelDir dir)
-
-