} \
}
-cuFFT::cuFFT(): m_num_of_streams(4)
-{}
-
void cuFFT::init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales, bool big_batch_mode)
{
m_width = width;
std::cerr << "Image dimension after forward FFT are too big for CUDA kernels." << std::endl;
std::exit(EXIT_FAILURE);
}
-
- for (unsigned i = 0; i < m_num_of_streams; i++) cudaStreamCreate(&streams[i]);
//FFT forward one scale
{
cuFFT::~cuFFT()
{
-
- for(unsigned i = 0; i < m_num_of_streams; i++) cudaStreamDestroy(streams[i]);
cufftDestroy(plan_f);
cufftDestroy(plan_f_all_scales);
class cuFFT : public Fft
{
public:
- cuFFT();
void init(unsigned width, unsigned height, unsigned num_of_feats, unsigned num_of_scales, bool big_batch_mode) override;
void set_window(const cv::Mat &window) override;
ComplexMat forward(const cv::Mat &input) override;
~cuFFT() override;
private:
cv::Mat m_window;
- unsigned m_width, m_height, m_num_of_feats, m_num_of_scales, m_num_of_streams;
+ unsigned m_width, m_height, m_num_of_feats, m_num_of_scales;
bool m_big_batch_mode;
- cudaStream_t streams[4];
cufftHandle plan_f, plan_f_all_scales, plan_fw, plan_fw_all_scales, plan_i_features,
plan_i_features_all_scales, plan_i_1ch, plan_i_1ch_all_scales;
float *data_f, *data_f_all_scales, *data_fw, *data_fw_d, *data_fw_all_scales, *data_fw_all_scales_d, *data_i_features, *data_i_features_d,