Skip to content

Commit

Permalink
added missing C functions for execution with pointers only
Browse files Browse the repository at this point in the history
  • Loading branch information
AdhocMan committed Jan 2, 2021
1 parent ef668f7 commit 2e67b90
Show file tree
Hide file tree
Showing 14 changed files with 513 additions and 59 deletions.
44 changes: 37 additions & 7 deletions include/spfft/multi_transform.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,25 @@ extern "C" {
* @return Error code or SPFFT_SUCCESS.
*/
SPFFT_EXPORT SpfftError spfft_multi_transform_forward(int numTransforms, SpfftTransform* transforms,
SpfftProcessingUnitType* inputLocations,
double** outputPointers,
SpfftScalingType* scalingTypes);
const SpfftProcessingUnitType* inputLocations,
double* const* outputPointers,
const SpfftScalingType* scalingTypes);
/**
* Execute multiple independent forward transforms at once by internal pipelining.
*
* @param[in] numTransforms Number of transforms to execute.
* @param[in] transforms Transforms to execute.
* @param[in] inputPointers Input pointers for each transform.
* @param[out] outputPointers Output pointers for each transform.
* @param[in] scalingTypes Scaling types for each transform.
* @throw GenericError SpFFT error. Can be a derived type.
* @throw std::exception Error from standard library calls. Can be a derived type.
*/
SPFFT_EXPORT SpfftError spfft_multi_transform_forward_ptr(int numTransforms,
SpfftTransform* transforms,
const double* const* inputPointers,
double* const* outputPointers,
const SpfftScalingType* scalingTypes);

/**
* Execute multiple independent backward transforms at once by internal pipelining.
Expand All @@ -60,10 +76,24 @@ SPFFT_EXPORT SpfftError spfft_multi_transform_forward(int numTransforms, SpfftTr
* @param[in] outputLocations Output locations for each transform.
* @return Error code or SPFFT_SUCCESS.
*/
SPFFT_EXPORT SpfftError spfft_multi_transform_backward(int numTransforms,
SpfftTransform* transforms,
double** inputPointers,
SpfftProcessingUnitType* outputLocations);
SPFFT_EXPORT SpfftError spfft_multi_transform_backward(
int numTransforms, SpfftTransform* transforms, const double* const* inputPointers,
const SpfftProcessingUnitType* outputLocations);

/**
* Execute multiple independent backward transforms at once by internal pipelining.
*
* @param[in] numTransforms Number of transforms to execute.
* @param[in] transforms Transforms to execute.
* @param[in] inputPointers Input pointers for each transform.
* @param[in] outputPointers Output pointers for each transform.
* @throw GenericError SpFFT error. Can be a derived type.
* @throw std::exception Error from standard library calls. Can be a derived type.
*/
SPFFT_EXPORT SpfftError spfft_multi_transform_backward_ptr(int numTransforms,
SpfftTransform* transforms,
const double* const* inputPointers,
double* const* outputPointers);

#ifdef __cplusplus
}
Expand Down
39 changes: 35 additions & 4 deletions include/spfft/multi_transform.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,25 @@ namespace spfft {
* @throw std::exception Error from standard library calls. Can be a derived type.
*/
SPFFT_EXPORT void multi_transform_forward(int numTransforms, Transform* transforms,
SpfftProcessingUnitType* inputLocations,
double** outputPointers, SpfftScalingType* scalingTypes);
const SpfftProcessingUnitType* inputLocations,
double* const* outputPointers,
const SpfftScalingType* scalingTypes);

/**
* Execute multiple independent forward transforms at once by internal pipelining.
*
* @param[in] numTransforms Number of transforms to execute.
* @param[in] transforms Transforms to execute.
* @param[in] inputPointers Input pointers for each transform.
* @param[out] outputPointers Output pointers for each transform.
* @param[in] scalingTypes Scaling types for each transform.
* @throw GenericError SpFFT error. Can be a derived type.
* @throw std::exception Error from standard library calls. Can be a derived type.
*/
SPFFT_EXPORT void multi_transform_forward(int numTransforms, Transform* transforms,
const double* const* inputPointers,
double*const* outputPointers,
const SpfftScalingType* scalingTypes);

/**
* Execute multiple independent backward transforms at once by internal pipelining.
Expand All @@ -60,8 +77,22 @@ SPFFT_EXPORT void multi_transform_forward(int numTransforms, Transform* transfor
* @throw std::exception Error from standard library calls. Can be a derived type.
*/
SPFFT_EXPORT void multi_transform_backward(int numTransforms, Transform* transforms,
double** inputPointers,
SpfftProcessingUnitType* outputLocations);
const double* const* inputPointers,
const SpfftProcessingUnitType* outputLocations);

/**
* Execute multiple independent backward transforms at once by internal pipelining.
*
* @param[in] numTransforms Number of transforms to execute.
* @param[in] transforms Transforms to execute.
* @param[in] inputPointers Input pointers for each transform.
* @param[in] outputPointers Output pointers for each transform.
* @throw GenericError SpFFT error. Can be a derived type.
* @throw std::exception Error from standard library calls. Can be a derived type.
*/
SPFFT_EXPORT void multi_transform_backward(int numTransforms, Transform* transforms,
const double* const* inputPointers,
double* const* outputPointers);

} // namespace spfft

Expand Down
43 changes: 36 additions & 7 deletions include/spfft/multi_transform_float.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,25 @@ extern "C" {
* @param[in] scalingTypes Scaling types for each transform.
* @return Error code or SPFFT_SUCCESS.
*/
SPFFT_EXPORT SpfftError spfft_float_multi_transform_forward(int numTransforms,
SpfftFloatTransform* transforms,
SpfftProcessingUnitType* inputLocations,
float** outputPointers,
SpfftScalingType* scalingTypes);
SPFFT_EXPORT SpfftError spfft_float_multi_transform_forward(
int numTransforms, SpfftFloatTransform* transforms,
const SpfftProcessingUnitType* inputLocations, float* const* outputPointers,
const SpfftScalingType* scalingTypes);

/**
* Execute multiple independent forward transforms at once by internal pipelining.
*
* @param[in] numTransforms Number of transforms to execute.
* @param[in] transforms Transforms to execute.
* @param[in] inputPointers Input pointers for each transform.
* @param[out] outputPointers Output pointers for each transform.
* @param[in] scalingTypes Scaling types for each transform.
* @throw GenericError SpFFT error. Can be a derived type.
* @throw std::exception Error from standard library calls. Can be a derived type.
*/
SPFFT_EXPORT SpfftError spfft_float_multi_transform_forward_ptr(
int numTransforms, SpfftFloatTransform* transforms, const float* const* inputPointers,
float* const* outputPointers, const SpfftScalingType* scalingTypes);

/**
* Execute multiple independent backward transforms at once by internal pipelining.
Expand All @@ -62,8 +76,23 @@ SPFFT_EXPORT SpfftError spfft_float_multi_transform_forward(int numTransforms,
* @return Error code or SPFFT_SUCCESS.
*/
SPFFT_EXPORT SpfftError spfft_float_multi_transform_backward(
int numTransforms, SpfftFloatTransform* transforms, float** inputPointers,
SpfftProcessingUnitType* outputLocations);
int numTransforms, SpfftFloatTransform* transforms, const float* const* inputPointers,
const SpfftProcessingUnitType* outputLocations);

/**
* Execute multiple independent backward transforms at once by internal pipelining.
*
* @param[in] numTransforms Number of transforms to execute.
* @param[in] transforms Transforms to execute.
* @param[in] inputPointers Input pointers for each transform.
* @param[in] outputPointers Output pointers for each transform.
* @throw GenericError SpFFT error. Can be a derived type.
* @throw std::exception Error from standard library calls. Can be a derived type.
*/
SPFFT_EXPORT SpfftError spfft_float_multi_transform_backward_ptr(int numTransforms,
SpfftFloatTransform* transforms,
const float* const* inputPointers,
float* const* outputPointers);

#ifdef __cplusplus
}
Expand Down
41 changes: 37 additions & 4 deletions include/spfft/multi_transform_float.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
namespace spfft {

#ifdef SPFFT_SINGLE_PRECISION

/**
* Execute multiple independent forward transforms at once by internal pipelining.
*
Expand All @@ -47,8 +48,25 @@ namespace spfft {
* @throw std::exception Error from standard library calls. Can be a derived type.
*/
SPFFT_EXPORT void multi_transform_forward(int numTransforms, TransformFloat* transforms,
SpfftProcessingUnitType* inputLocations,
float** outputPointers, SpfftScalingType* scalingTypes);
const SpfftProcessingUnitType* inputLocations,
float* const* outputPointers,
const SpfftScalingType* scalingTypes);

/**
* Execute multiple independent forward transforms at once by internal pipelining.
*
* @param[in] numTransforms Number of transforms to execute.
* @param[in] transforms Transforms to execute.
* @param[in] inputPointers Input pointers for each transform.
* @param[out] outputPointers Output pointers for each transform.
* @param[in] scalingTypes Scaling types for each transform.
* @throw GenericError SpFFT error. Can be a derived type.
* @throw std::exception Error from standard library calls. Can be a derived type.
*/
SPFFT_EXPORT void multi_transform_forward(int numTransforms, TransformFloat* transforms,
const float* const* inputPointers,
float* const* outputPointers,
const SpfftScalingType* scalingTypes);

/**
* Execute multiple independent backward transforms at once by internal pipelining.
Expand All @@ -61,8 +79,23 @@ SPFFT_EXPORT void multi_transform_forward(int numTransforms, TransformFloat* tra
* @throw std::exception Error from standard library calls. Can be a derived type.
*/
SPFFT_EXPORT void multi_transform_backward(int numTransforms, TransformFloat* transforms,
float** inputPointers,
SpfftProcessingUnitType* outputLocations);
const float* const* inputPointers,
const SpfftProcessingUnitType* outputLocations);

/**
* Execute multiple independent backward transforms at once by internal pipelining.
*
* @param[in] numTransforms Number of transforms to execute.
* @param[in] transforms Transforms to execute.
* @param[in] inputPointers Input pointers for each transform.
* @param[in] outputPointers Output pointers for each transform.
* @throw GenericError SpFFT error. Can be a derived type.
* @throw std::exception Error from standard library calls. Can be a derived type.
*/
SPFFT_EXPORT void multi_transform_backward(int numTransforms, TransformFloat* transforms,
const float* const* inputPointers,
float* const* outputPointers);

#endif

} // namespace spfft
Expand Down
76 changes: 74 additions & 2 deletions include/spfft/spfft.f90
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,14 @@ integer(c_int) function spfft_transform_backward(transform, input, &
integer(c_int), value :: outputLocation
end function

integer(c_int) function spfft_transform_backward_ptr(transform, input, &
output) bind(C)
use iso_c_binding
type(c_ptr), value :: transform
complex(c_double), dimension(*), intent(in) :: input
c_double, dimension(*), intent(out) :: output
end function

integer(c_int) function spfft_transform_forward(transform, inputLocation, &
output, scaling) bind(C)
use iso_c_binding
Expand All @@ -340,6 +348,15 @@ integer(c_int) function spfft_transform_forward(transform, inputLocation, &
integer(c_int), value :: scaling
end function

integer(c_int) function spfft_transform_forward_ptr(transform, input, &
output, scaling) bind(C)
use iso_c_binding
type(c_ptr), value :: transform
c_double, dimension(*), intent(in) :: input
complex(c_double), dimension(*), intent(out) :: output
integer(c_int), value :: scaling
end function

integer(c_int) function spfft_transform_get_space_domain(transform, &
dataLocation, dataPtr) bind(C)
use iso_c_binding
Expand Down Expand Up @@ -431,6 +448,16 @@ integer(c_int) function spfft_multi_transform_forward(numTransforms, transforms,
type(c_ptr), value :: scalingTypes
end function

integer(c_int) function spfft_multi_transform_forward_ptr(numTransforms, transforms,&
inputPointers, outputPointers, scalingTypes) bind(C)
use iso_c_binding
integer(c_int), value :: numTransforms
type(c_ptr), value :: transforms
type(c_ptr), value :: inputPointers
type(c_ptr), value :: outputPointers
type(c_ptr), value :: scalingTypes
end function

integer(c_int) function spfft_multi_transform_backward(numTransforms, transforms,&
inputPointers, outputLocations) bind(C)
use iso_c_binding
Expand All @@ -440,6 +467,15 @@ integer(c_int) function spfft_multi_transform_backward(numTransforms, transforms
type(c_ptr), value :: outputLocations
end function

integer(c_int) function spfft_multi_transform_backward_ptr(numTransforms, transforms,&
inputPointers, outputPointers) bind(C)
use iso_c_binding
integer(c_int), value :: numTransforms
type(c_ptr), value :: transforms
type(c_ptr), value :: inputPointers
type(c_ptr), value :: outputPointers
end function

!--------------------------
! Transform Float
!--------------------------
Expand Down Expand Up @@ -510,16 +546,33 @@ integer(c_int) function spfft_float_transform_backward(transform, input, &
outputLocation) bind(C)
use iso_c_binding
type(c_ptr), value :: transform
complex(c_double), dimension(*), intent(in) :: input
complex(c_float), dimension(*), intent(in) :: input
integer(c_int), value :: outputLocation
end function

integer(c_int) function spfft_float_transform_backward_ptr(transform, input, &
output) bind(C)
use iso_c_binding
type(c_ptr), value :: transform
complex(c_float), dimension(*), intent(in) :: input
c_float, dimension(*), intent(out) :: output
end function

integer(c_int) function spfft_float_transform_forward(transform, inputLocation, &
output, scaling) bind(C)
use iso_c_binding
type(c_ptr), value :: transform
integer(c_int), value :: inputLocation
complex(c_double), dimension(*), intent(out) :: output
complex(c_float), dimension(*), intent(out) :: output
integer(c_int), value :: scaling
end function

integer(c_int) function spfft_float_transform_forward_ptr(transform, input, &
output, scaling) bind(C)
use iso_c_binding
type(c_ptr), value :: transform
c_float, dimension(*), intent(in) :: input
complex(c_float), dimension(*), intent(out) :: output
integer(c_int), value :: scaling
end function

Expand Down Expand Up @@ -614,6 +667,16 @@ integer(c_int) function spfft_float_multi_transform_forward(numTransforms, trans
type(c_ptr), value :: scalingTypes
end function

integer(c_int) function spfft_float_multi_transform_forward_ptr(numTransforms, transforms,&
inputPointers, outputPointers, scalingTypes) bind(C)
use iso_c_binding
integer(c_int), value :: numTransforms
type(c_ptr), value :: transforms
type(c_ptr), value :: inputPointers
type(c_ptr), value :: outputPointers
type(c_ptr), value :: scalingTypes
end function

integer(c_int) function spfft_float_multi_transform_backward(numTransforms, transforms,&
inputPointers, outputLocations) bind(C)
use iso_c_binding
Expand All @@ -623,6 +686,15 @@ integer(c_int) function spfft_float_multi_transform_backward(numTransforms, tran
type(c_ptr), value :: outputLocations
end function

integer(c_int) function spfft_float_multi_transform_backward_ptr(numTransforms, transforms,&
inputPointers, outputPointers) bind(C)
use iso_c_binding
integer(c_int), value :: numTransforms
type(c_ptr), value :: transforms
type(c_ptr), value :: inputPointers
type(c_ptr), value :: outputLocations
end function

end interface

end
Loading

0 comments on commit 2e67b90

Please sign in to comment.