#pragma once
#if !defined( AMD_CLFFT_action_H )
#define AMD_CLFFT_action_H
#include "plan.h"
class FFTCopyAction : public FFTAction
{
public:
FFTCopyAction(clfftPlanHandle plHandle, FFTPlan * plan, cl_command_queue queue, clfftStatus & err);
clfftGenerators getGenerator() { return Copy; }
};
class FFTStockhamAction : public FFTAction
{
public:
FFTStockhamAction(clfftPlanHandle plHandle, FFTPlan * plan, cl_command_queue queue, clfftStatus & err);
clfftGenerators getGenerator() { return Stockham; }
};
class FFTTransposeGCNAction : public FFTAction
{
public:
FFTTransposeGCNAction(clfftPlanHandle plHandle, FFTPlan * plan, cl_command_queue queue, clfftStatus & err);
clfftGenerators getGenerator() { return Transpose_GCN; }
};
class FFTTransposeSquareAction : public FFTAction
{
public:
FFTTransposeSquareAction(clfftPlanHandle plHandle, FFTPlan * plan, cl_command_queue queue, clfftStatus & err);
clfftGenerators getGenerator() { return Transpose_SQUARE; }
};
class FFTTransposeNonSquareAction : public FFTAction
{
public:
FFTTransposeNonSquareAction(clfftPlanHandle plHandle, FFTPlan * plan, cl_command_queue queue, clfftStatus & err);
clfftGenerators getGenerator() { return Transpose_NONSQUARE; }
};
class FFTGeneratedCopyAction : public FFTCopyAction
{
public:
FFTGeneratedCopyAction(clfftPlanHandle plHandle, FFTPlan * plan, cl_command_queue queue, clfftStatus & err);
typedef FFTKernelSignature<FFTKernelGenKeyParams, FFT_DEFAULT_COPY_ACTION> Signature;
private:
Signature signature;
clfftStatus generateKernel (FFTRepo& fftRepo, const cl_command_queue commQueueFFT );
clfftStatus getWorkSizes (std::vector<size_t> & globalws, std::vector<size_t> & localws);
clfftStatus initParams ();
bool buildForwardKernel();
bool buildBackwardKernel();
public:
virtual const Signature * getSignatureData()
{
return &this->signature;
}
};
class FFTGeneratedStockhamAction : public FFTStockhamAction
{
public:
FFTGeneratedStockhamAction(clfftPlanHandle plHandle, FFTPlan * plan, cl_command_queue queue, clfftStatus & err);
typedef FFTKernelSignature<FFTKernelGenKeyParams, FFT_DEFAULT_STOCKHAM_ACTION> Signature;
private:
Signature signature;
clfftStatus generateKernel (FFTRepo& fftRepo, const cl_command_queue commQueueFFT );
clfftStatus getWorkSizes (std::vector<size_t> & globalws, std::vector<size_t> & localws);
clfftStatus initParams ();
bool buildForwardKernel();
bool buildBackwardKernel();
public:
virtual const Signature * getSignatureData()
{
return &this->signature;
}
};
class FFTGeneratedTransposeGCNAction : public FFTTransposeGCNAction
{
public:
FFTGeneratedTransposeGCNAction(clfftPlanHandle plHandle, FFTPlan * plan, cl_command_queue queue, clfftStatus & err);
typedef FFTKernelSignature<FFTKernelGenKeyParams, FFT_DEFAULT_TRANSPOSE_ACTION> Signature;
private:
Signature signature;
clfftStatus generateKernel (FFTRepo& fftRepo, const cl_command_queue commQueueFFT );
clfftStatus getWorkSizes (std::vector<size_t> & globalws, std::vector<size_t> & localws);
clfftStatus initParams ();
bool buildForwardKernel();
bool buildBackwardKernel();
public:
virtual const Signature * getSignatureData()
{
return &this->signature;
}
};
class FFTGeneratedTransposeSquareAction : public FFTTransposeSquareAction
{
public:
FFTGeneratedTransposeSquareAction(clfftPlanHandle plHandle, FFTPlan * plan, cl_command_queue queue, clfftStatus & err);
typedef FFTKernelSignature<FFTKernelGenKeyParams, FFT_DEFAULT_TRANSPOSE_ACTION> Signature;
private:
Signature signature;
clfftStatus generateKernel (FFTRepo& fftRepo, const cl_command_queue commQueueFFT );
clfftStatus getWorkSizes (std::vector<size_t> & globalws, std::vector<size_t> & localws);
clfftStatus initParams ();
bool buildForwardKernel();
bool buildBackwardKernel();
public:
virtual const Signature * getSignatureData()
{
return &this->signature;
}
};
class FFTGeneratedTransposeNonSquareAction : public FFTTransposeNonSquareAction
{
public:
FFTGeneratedTransposeNonSquareAction(clfftPlanHandle plHandle, FFTPlan * plan, cl_command_queue queue, clfftStatus & err);
typedef FFTKernelSignature<FFTKernelGenKeyParams, FFT_DEFAULT_TRANSPOSE_ACTION> Signature;
private:
Signature signature;
clfftStatus generateKernel(FFTRepo& fftRepo, const cl_command_queue commQueueFFT);
clfftStatus getWorkSizes(std::vector<size_t> & globalws, std::vector<size_t> & localws);
clfftStatus initParams();
bool buildForwardKernel();
bool buildBackwardKernel();
public:
virtual const Signature * getSignatureData()
{
return &this->signature;
}
};
#endif