muFFT API 参考
1 引言
muFFT 库是 Moore Threads® MUSA® 工具包的快速傅里叶变换(FFT)产品。
FFT 是一种分治算法,可以高效地计算复数或实数值数据集的离散傅里叶变换。
muFFT 库提供了一个简单的接口来执行 FFT,并支持在 MT GPU 上高效地处理各种 FFT 输入和选项,使用户能够快速利用 GPU 的并行性和浮点能力。
2 模块索引
2.1 模块
以下是所有模块的列表:
数据类型
muFFT 库函数
3 模块文档
3.1 数据类型
宏
- #define MUFFT_FORWARD - 执行前向快速傅里叶变换(FFT)。
- #define MUFFT_INVERSE 1 执行后向/逆向 FFT。
类型定义
- typedef enum mufftResult_t mufftResult 返回状态码。
- typedef enum mufftType_t mufftType 变换类型。
- typedef enum mufftLibraryPropertyType_t mufftLibraryPropertyType 属性类型。
- typedef struct mufftHandle_t∗ mufftHandle 用于存储和访问 muFFT 计划的句柄类型。用户在创建 muFFT 计划后会收到一个句柄,并使用此句柄来执行计划。
- typedef float mufftReal 单精度浮点实数数据类型。
- typedef double mufftDoubleReal 双精度浮点实数数据类型。
- typedef muComplex mufftComplex 由交错的实部和虚部组成的单精度浮点复数数据类型。
- typedef muDoubleComplex mufftDoubleComplex 由交错的实部和虚部组成的双精度浮点复数数据类型。
枚举
- enum mufftResult_t {
**MUFFT_SUCCESS** = 0 ,
**MUFFT_INVALID_PLAN** = 1 ,
**MUFFT_ALLOC_FAILED** = 2 ,
**MUFFT_INVALID_TYPE** = 3 ,
**MUFFT_INVALID_VALUE** = 4 ,
**MUFFT_INTERNAL_ERROR** = 5 ,
**MUFFT_EXEC_FAILED** = 6 ,
**MUFFT_SETUP_FAILED** = 7 ,
**MUFFT_INVALID_SIZE** = 8 ,
**MUFFT_UNALIGNED_DATA** = 9 ,
**MUFFT_INCOMPLETE_PARAMETER_LIST** = 0xA ,
**MUFFT_INVALID_DEVICE** ,
**MUFFT_PARSE_ERROR** = 0xC ,
**MUFFT_NO_WORKSPACE** ,
**MUFFT_NOT_IMPLEMENTED** ,
**MUFFT_LICENSE_ERROR** ,
**MUFFT_NOT_SUPPORTED** }
返回状态码。
- enum mufftType_t {
**MUFFT_R2C** = 0x2a ,
**MUFFT_C2R** = 0x2c ,
**MUFFT_C2C** = 0x29 ,
**MUFFT_D2Z** = 0x6a ,
**MUFFT_Z2D** = 0x6c ,
**MUFFT_Z2Z** = 0x69 }
变换类型。
- enum mufftLibraryPropertyType_t {
**MUFFT_MAJOR_VERSION** ,
**MUFFT_MINOR_VERSION** ,
**MUFFT_PATCH_LEVEL** }
属性类型。
3.1.1 详细描述
本节涵盖了 muFFT API 使用的数据类型。
3.1.2 类型定义文档
3.1.2.1 mufftLibraryPropertyType
typedef enum mufftLibraryPropertyType_t mufftLibraryPropertyType
属性类型。
libraryPropertyType 数据类型是库属性类型的枚举。
3.1.2.2 mufftResult
typedef enum mufftResult_t mufftResult
返回状态码。
除了 MUFFT_SUCCESS 之外,muFFT 库的所有返回值都表示当前 API 调用失败,用户应重新配置以纠正问题。
3.1.2.3 mufftType
typedef enum mufftType_t mufftType
变换类型。
此类型用于声明将执行的傅里叶变换类型。最左边的数字决定实数或复数,左边的第二和第三位数字决定实数的正向或逆向,最右边的数字(第7位)决定单精度或双精度。
3.1.3 枚举类型文档
3.1.3.1 mufftLibraryPropertyType_t
enum mufftLibraryPropertyType_t
属性类型。
libraryPropertyType 数据类型是库属性类型的枚举。
3.1.3.2 mufftResult_t
enum mufftResult_t
返回状态码。
除了MUFFT_SUCCESS之外,muFFT 库的所有返回值都表示当前API调用失败,用户应重新配置以纠正问题。
3.1.3.3 mufftType_t
enum mufftType_t
变换类型。
此类型用于声明将执行的傅里叶变换类型。最左边的数字决定实数或复数,左边的第二和第三位数字决定实数的正向或逆向,最右边的数字(第7位)决定单精度或双精度。
3.2 muFFT 库函数
函数
-
mufftResult mufftPlan1d (mufftHandle∗plan, int nx, mufftType type, int batch) 创建一个新的一维 FFT 计划。
-
mufftResult mufftPlan2d (mufftHandle∗plan, int nx, int ny, mufftType type) 创建一个新的二维 FFT 计划。
-
mufftResult mufftPlan3d (mufftHandle∗plan, int nx, int ny, int nz, mufftType type) 创建一个新的三维 FFT 计划。
-
mufftResult mufftPlanMany (mufftHandle∗plan, int rank, int∗n, int∗inembed, int istride, int idist, int ∗onembed, int ostride, int odist, mufftType type, int batch) 创建一个新的批量秩维 FFT 计划。
-
mufftResult mufftCreate (mufftHandle∗plan) 分配一个新的计划。
-
mufftResult mufftMakePlan1d (mufftHandle plan, int nx, mufftType type, int batch, size_t∗workSize) 初始化一个新的一维 FFT 计划。
-
mufftResult mufftMakePlan2d (mufftHandle plan, int nx, int ny, mufftType type, size_t∗workSize) 初始化一个新的二维 FFT 计划。
-
mufftResult mufftMakePlan3d (mufftHandle plan, int nx, int ny, int nz, mufftType type, size_t∗workSize) 初始化一个新的三维 FFT 计划。
-
mufftResult mufftMakePlanMany (mufftHandle plan, int rank, int∗n, int∗inembed, int istride, int idist, int ∗onembed, int ostride, int odist, mufftType type, int batch, size_t∗workSize) 初始化一个新的批量秩维 FFT 计划。
-
mufftResult mufftEstimate1d (int nx, mufftType type, int batch, size_t∗workSize) 返回一个 1D 计划所需的工作区大小的估计。
-
mufftResult mufftEstimate2d (int nx, int ny, mufftType type, size_t∗workSize) 返回一个 2D 计划所需的工作区大小的估计。
-
mufftResult mufftEstimate3d (int nx, int ny, int nz, mufftType type, size_t∗workSize) 返回一个 3D 计划所需的工作区大小的估计。
-
mufftResult mufftEstimateMany (int rank, int∗n, int∗inembed, int istride, int idist, int∗onembed, int ostride, int odist, mufftType type, int batch, size_t∗workSize) 返回一个秩维计划所需的工作区大小的估计。
-
mufftResult mufftGetSize1d (mufftHandle plan, int nx, mufftType type, int batch, size_t∗workSize) 返回一个 1D 计划所需的工作区大小。
-
mufftResult mufftGetSize2d (mufftHandle plan, int nx, int ny, mufftType type, size_t∗workSize) 返回一个 2D 计划所需的工作区大小。
-
mufftResult mufftGetSize3d (mufftHandle plan, int nx, int ny, int nz, mufftType type, size_t∗workSize) 返回一个 3D 计划所需的工作区大小。
-
mufftResult mufftGetSizeMany (mufftHandle plan, int rank, int∗n, int∗inembed, int istride, int idist, int ∗onembed, int ostride, int odist, mufftType type, int batch, size_t∗workSize) 返回一个秩维计划所需的工作区大小。
-
mufftResult mufftGetSize (mufftHandle plan, size_t∗workSize) 返回一个秩维计划所需的工作区大小。
-
mufftResult mufftSetAutoAllocation (mufftHandle plan, int autoAllocate) 设置计划的自动分配标志。计划将分配自己的工作区。
-
mufftResult mufftSetWorkArea (mufftHandle plan, void∗workArea) 设置计划的工作区。
-
mufftResult mufftDestroy (mufftHandle plan) 销毁并释放一个现有的计划。
-
mufftResult mufftExecC2C (mufftHandle plan, mufftComplex∗idata, mufftComplex∗odata, int direction) 执行一个(浮点)复数到复数 FFT。
-
mufftResult mufftExecR2C (mufftHandle plan, mufftReal∗idata, mufftComplex∗odata) 执行一个(浮点)实数到复数 FFT。
-
mufftResult mufftExecC2R (mufftHandle plan, mufftComplex∗idata, mufftReal∗odata) 执行一个(浮点)复数到实数 FFT。
-
mufftResult mufftExecZ2Z (mufftHandle plan, mufftDoubleComplex∗idata, mufftDoubleComplex∗odata, int direction) 执行一个(双精度)复数到复数 FFT。
-
mufftResult mufftExecD2Z (mufftHandle plan, mufftDoubleReal∗idata, mufftDoubleComplex∗odata) 执行一个(双精度)实数到复数 FFT。
-
mufftResult mufftExecZ2D (mufftHandle plan, mufftDoubleComplex∗idata, mufftDoubleReal∗odata) 执行一个(双精度)复数到实数 FFT。
-
mufftResult mufftSetStream (mufftHandle plan, musaStream_t stream) 设置 MUSA 流以执行计划。
-
mufftResult mufftGetVersion (int∗version) 获取 mtFFT/muFFT 版本。
-
mufftResult mufftGetProperty (mufftLibraryPropertyType type, int∗value) 获取库属性。
3.2.1 详细描述
本节描述了如何使用 muFFT 库 API。
3.2.2 函数文档
3.2.2.1 mufftCreate()
mufftResult mufftCreate ( mufftHandle∗plan)
分配一个新的计划。
仅创建一个句柄,并在主机上分配小型数据结构。mufftMakePlan∗() 调用实际上执行计划生成。
参数
out plan 指向 mufftHandle 对象的指针。
返回值
MUFFT_SUCCESS muFFT 成功创建了 FFT 计划。
MUFFT_ALLOC_FAILED 计划资源分配失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
3.2.2.2 mufftDestroy()
mufftResult mufftDestroy ( mufftHandleplan)
销毁并释放一个现有的计划。
参数
plan 要销毁的计划的 mufftHandle 对象。
返回值
MUFFT_SUCCESS muFFT 成功销毁了 FFT 计划。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
3.2.2.3 mufftEstimate1d()
mufftResult mufftEstimate1d ( intnx, mufftTypetype, intbatch, size_t∗workSize)
返回一维计划所需的工作区大小估计。
参数
in nx x 方向的元素数量。
in type FFT 类型。
in batch 要计算的批处理变换数量。
out workSize 指向工作区大小(返回值)的指针。
返回值
MUFFT_SUCCESS muFFT 成功创建了 FFT 计划。
MUFFT_ALLOC_FAILED 计划的 GPU 资源分配失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
MUFFT_INVALID_SIZE nx 或 batch 参数不受支持。
3.2.2.4 mufftEstimate2d()
mufftResult mufftEstimate2d ( intnx, intny, mufftTypetype, size_t∗workSize)
返回二维计划所需的工作区大小估计。
参数
in nx x方向的元素数量。
in ny y方向的元素数量。
in type FFT类型。
out workSize 指向工作区大小(返回值)的指针。
返回值
MUFFT_SUCCESS muFFT 成功创建了 FFT 计划。
MUFFT_ALLOC_FAILED 计划的 GPU 资源分配失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
MUFFT_INVALID_SIZE nx 或 ny 参数不受支持。
3.2.2.5 mufftEstimate3d()
mufftResult mufftEstimate3d ( intnx, intny, intnz, mufftTypetype, size_t∗workSize)
返回三维计划所需的工作区大小估计。
参数
in nx x 方向的元素数量。
in ny y 方向的元素数量。
in nz z 方向的元素数量。
in type FFT类型。
out workSize 指向工作区大小(返回值)的指针。
返回值
MUFFT_SUCCESS muFFT 成功创建了 FFT 计划。
MUFFT_ALLOC_FAILED 计划的 GPU 资源分配失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
返回值
MUFFT_INVALID_SIZE nx, ny, 或 nz 参数之一不受支持。
3.2.2.6 mufftEstimateMany()
mufftResult mufftEstimateMany ( intrank, int∗n, int∗inembed, intistride, intidist, int∗onembed, intostride, intodist, mufftTypetype, intbatch, size_t∗workSize)
返回多维计划所需的工作区大小估计。
参数
in rank FFT变换的维度(1, 2, 或 3)。
in n x/y/z方向的元素数量。
in inembed 指向 rank 大小的指针,指示内存中输入数据的存储维度。如果设置为 NULL,则忽略所有其他高级数据布局参数。
in istride 表示最不重要的(即,最内层)维度中两个连续输入元素之间的距离。
in idist 输入批次之间的距离。
in onembed 指向 rank 大小的指针,指示内存中输出数据的存储维度。如果设置为 NULL,则忽略所有其他高级数据布局参数。
in ostride 表示输出数组中最不重要的(即,最内层)维度中两个连续输出元素之间的距离。
in odist 输出批次之间的距离。
in type FFT 类型。
in batch 要执行的批处理变换数量。
out workSize 指向工作区大小(返回值)的指针。
返回值
MUFFT_SUCCESS muFFT 成功创建了 FFT 计划。
MUFFT_ALLOC_FAILED 计划的 GPU 资源分配失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
MUFFT_INVALID_SIZE 一个或多个参数不受支持。
3.2.2.7 mufftExecC2C()
mufftResult mufftExecC2C ( mufftHandleplan, mufftComplex ∗idata, mufftComplex ∗odata, intdirection)
执行(浮点)复数到复数 FFT。
如果输入和输出缓冲区相等,则执行原地变换。
参数
in plan FFT计划。
in idata 输入数据(在设备上)。
out odata 输出数据(在设备上)。
in direction 要么是 MUFFT_FORWARD 要么是 MUFFT_INVERSE。
返回值
MUFFT_SUCCESS muFFT 成功执行了 FFT 计划。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
MUFFT_EXEC_FAILED muFFT 在 GPU 上执行变换失败。
3.2.2.8 mufftExecC2R()
mufftResult mufftExecC2R ( mufftHandleplan, mufftComplex ∗idata, mufftReal∗odata)
执行(浮点)复数到实数 FFT。
如果输入和输出缓冲区相等,则执行原地变换。
参数
in plan FFT 计划。
in idata 输入数据(在设备上)。
out odata 输出数据(在设备上)。
返回值
MUFFT_SUCCESS muFFT 成功执行了 FFT 计划。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
MUFFT_EXEC_FAILED muFFT 在 GPU 上执行变换失败。
3.2.2.9 mufftExecD2Z()
mufftResult mufftExecD2Z ( mufftHandleplan, mufftDoubleReal∗idata, mufftDoubleComplex∗odata)
执行(双精度)实数到复数 FFT。
如果输入和输出缓冲区相等,则执行原地变换。
参数
in plan FFT计划。
in idata 输入数据(在设备上)。
out odata 输出数据(在设备上)。
返回值
MUFFT_SUCCESS muFFT 成功执行了 FFT 计划。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
MUFFT_EXEC_FAILED muFFT 在 GPU 上执行变换失败。
3.2.2.10 mufftExecR2C()
mufftResult mufftExecR2C ( mufftHandleplan, mufftReal∗idata, mufftComplex ∗odata)
执行(浮点)实数到复数 FFT。
如果输入和输出缓冲区相等,则执行原地变换。
参数
in plan FFT计划。
in idata 输入数据(在设备上)。
out odata 输出数据(在设备上)。
返回值
MUFFT_SUCCESS muFFT 成功执行了 FFT 计划。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
MUFFT_EXEC_FAILED muFFT 在 GPU 上执行变换失败。
3.2.2.11 mufftExecZ2D()
mufftResult mufftExecZ2D ( mufftHandleplan, mufftDoubleComplex∗idata, mufftDoubleReal∗odata)
执行(双精度)复数到实数 FFT。
如果输入和输出缓冲区相等,则执行原地变换。
参数
in plan FFT 计划。
in idata 输入数据(在设备上)。
out odata 输出数据(在设备上)。
返回值
MUFFT_SUCCESS muFFT 成功执行了 FFT 计划。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
MUFFT_EXEC_FAILED muFFT 在 GPU 上执行变换失败。
3.2.2.12 mufftExecZ2Z()
mufftResult mufftExecZ2Z ( mufftHandleplan, mufftDoubleComplex∗idata, mufftDoubleComplex∗odata, intdirection)
执行(双精度)复数到复数 FFT。
如果输入和输出缓冲区相等,则执行原地变换。
参数
in plan FFT计划。
in idata 输入数据(在设备上)。
out odata 输出数据(在设备上)。
in direction 要么是 MUFFT_FORWARD 要么是 MUFFT_INVERSE。
返回值
MUFFT_SUCCESS muFFT 成功执行了 FFT 计划。
返回值
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
MUFFT_EXEC_FAILED muFFT 在 GPU 上执行变换失败。
3.2.2.13 mufftGetProperty()
mufftResult mufftGetProperty ( mufftLibraryPropertyTypetype, int∗value)
获取库属性。
参数
in type 属性类型。
out value 返回值。
返回值
MUFFT_SUCCESS 成功返回属性值。
MUFFT_INVALID_TYPE 属性类型不受认可。
3.2.2.14 mufftGetSize()
mufftResult mufftGetSize ( mufftHandleplan, size_t∗workSize)
返回多维计划所需的工作区大小。
参数
in plan 指向 FFT 计划的指针。
out workSize 指向工作区大小(以字节为单位)的指针。
返回值
MUFFT_SUCCESS muFFT 成功返回了工作空间的大小。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
3.2.2.15 mufftGetSize1d()
mufftResult mufftGetSize1d ( mufftHandleplan, intnx, mufftTypetype, intbatch, size_t∗workSize)
返回一维计划所需的工作区大小。
参数
in plan 指向 FFT 计划的指针。
in nx x 方向的元素数量。
in type FFT 类型。
in batch 要计算的批处理变换数量。
out workSize 指向工作区大小(返回值)的指针。
返回值
MUFFT_SUCCESS muFFT 成功创建了 FFT 计划。
MUFFT_ALLOC_FAILED 计划的 GPU 资源分配失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
MUFFT_INVALID_SIZE nx 或 batch 参数不受支持。
3.2.2.16 mufftGetSize2d()
mufftResult mufftGetSize2d ( mufftHandleplan, intnx, intny, mufftTypetype, size_t∗workSize)
返回二维计划所需的工作区大小。
参数
in plan 指向 FFT 计划的指针。
in nx x 方向的元素数量。
in ny y 方向的元素数量。
in type FFT 类型。
out workSize 指向工作区大小(返回值)的指针。
返回值
MUFFT_SUCCESS muFFT 成功创建了 FFT 计划。
返回值
MUFFT_ALLOC_FAILED 计划的 GPU 资源分配失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
MUFFT_INVALID_SIZE nx 或 ny 参数不受支持。
3.2.2.17 mufftGetSize3d()
mufftResult mufftGetSize3d ( mufftHandleplan, intnx, intny, intnz, mufftTypetype, size_t∗workSize)
返回三维计划所需的工作区大小。
参数
in plan 指向 FFT 计划的指针。
in nx x 方向的元素数量。
in ny y 方向的元素数量。
in nz z 方向的元素数量。
in type FFT 类型。
out workSize 指向工作区大小(返回值 )的指针。
返回值
MUFFT_SUCCESS muFFT 成功创建了 FFT 计划。
MUFFT_ALLOC_FAILED 计划的 GPU 资源分配失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
MUFFT_INVALID_SIZE nx, ny, 或 nz 参数之一不受支持。
3.2.2.18 mufftGetSizeMany()
mufftResult mufftGetSizeMany ( mufftHandleplan, intrank, int∗n, int∗inembed, intistride, intidist, int∗onembed, intostride,
intodist,
mufftTypetype,
intbatch,
size_t∗workSize)
返回多维计划所需的工作区大小。
参数
in plan 指向 FFT 计划的指针。
in rank FFT变换的维度(1, 2, 或 3)。
in n x/y/z方向的元素数量。
in inembed 指向rank大小的指针,指示内存中输入数据的存储维度。如果设置为 NULL,则忽略所有其他高级数据布局参数。
in istride 表示最不重要的(即,最内层)维度中两个连续输入元素之间的距离。
in idist 输入批次之间的距离。
in onembed 指向 rank 大小的指针,指示内存中输出数据的存储维度。如果设置为NULL,则忽略所有其他高级数据布局参数。
in ostride 表示输出数组中最不重要的(即,最内层)维度中两个连续输出元素之间的距离。
in odist 输出批次之间的距离。
in type FFT类型。
in batch 要执行的批处理变换数量。
out workSize 指向工作区大小(返回值)的指针。
返回值
MUFFT_SUCCESS muFFT 成功创建了 FFT 计划。
MUFFT_ALLOC_FAILED 计划的 GPU 资源分配失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
MUFFT_INVALID_SIZE 一个或多个参数不受支持。
3.2.2.19 mufftGetVersion()
mufftResult mufftGetVersion ( int∗version )
获取 mtFFT/muFFT 版本。
参数
out version muFFT/mtFFT 版本(返回值)。
返回值
MUFFT_SUCCESS 成功返回版本号。
3.2.2.20 mufftMakePlan1d()
mufftResult mufftMakePlan1d ( mufftHandleplan, intnx, mufftTypetype, intbatch, size_t∗workSize)
初始化一个新的一维 FFT 计划。
假设计划已经创建,并且修改与计划句柄关联的计划。
参数
in plan FFT 计划的句柄。
in nx FFT 长度。
in type FFT 类型。
in batch 要计算的批处理变换数量。
out workSize 指向工作区大小(返回值)的指针。
返回值
MUFFT_SUCCESS muFFT 成功创建了 FFT 计划。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
MUFFT_ALLOC_FAILED 计划的 GPU 资源分配失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
MUFFT_INVALID_SIZE nx 或 batch 参数不受支持。
3.2.2.21 mufftMakePlan2d()
mufftResult mufftMakePlan2d ( mufftHandleplan, intnx, intny, mufftTypetype, size_t∗workSize)
初始化一个新的二维 FFT 计划。
假设计划已经创建,并且修改与计划句柄关联的计划。二维数据应存储在 C 顺序(行主格式)中 ,以便 y 方向(j 索引)的索引变化最快。
参数
in plan FFT 计划的句柄。
参数
in nx x 方向的元素数量(慢索引)。
in ny y 方向的元素数量(快索引)。
in type FFT 类型。
out workSize 指向工作区大小(返回值)的指针。
返回值
MUFFT_SUCCESS muFFT 成功创建了 FFT 计划。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
MUFFT_ALLOC_FAILED 计划的 GPU 资源分配失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
MUFFT_INVALID_SIZE nx 或 ny 参数不受支持。
3.2.2.22 mufftMakePlan3d()
mufftResult mufftMakePlan3d ( mufftHandleplan, intnx, intny, intnz, mufftTypetype, size_t∗workSize)
初始化一个新的三维 FFT 计划。
假设计划已经创建,并且修改与计划句柄关联的计划。三维数据应存储在 C 顺序(行主格式)中,以便 z 方向(k 索引)的索引变化最快。
参数
in plan FFT 计划的句柄。
in nx x 方向的元素数量(最慢索引)。
in ny y 方向的元素数量。
in nz z 方向的元素数量(最快 索引)。
in type FFT 类型。
out workSize 指向工作区大小(返回值)的指针。
返回值
MUFFT_SUCCESS muFFT 成功创建了 FFT 计划。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
MUFFT_ALLOC_FAILED 计划的 GPU 资源分配失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
MUFFT_INVALID_SIZE nx, ny, 或 nz 参数之一不受支持。
3.2.2.23 mufftMakePlanMany()
mufftResult mufftMakePlanMany ( mufftHandleplan, intrank, int∗n, int∗inembed, intistride, intidist, int∗onembed, intostride, intodist, mufftTypetype, intbatch, size_t∗workSize)
初始化一个新的批处理多维 FFT 计划。
假设计划已经创建,并且 修改与计划句柄关联的计划。batch 参数告诉 muFFT 要执行多少变换。用于复杂的用例,如灵活的输入和输出布局。
参数
out plan 指向 FFT 计划句柄的指针。
in rank FFT变换的维度(1, 2, 或 3)。
in n x/y/z方向的元素数量。
in inembed 指向rank大小的指针,指示内存中输入数据的存储维度。如果设置为NULL,则忽略所有其他高级数据布局参数。
in istride 表示最不重要的(即,最内层)维度中两个连续输入元素之间的距离。
in idist 输入批次之间的距离。
in onembed 指向rank大小的指针,指示内存中输出数据的存储维度。如果设置为NULL,则忽略所有其他高级数据布局参数。
in ostride 表示输出数组中最不重要的(即,最内层)维度中两个连续输出元素之间的距离。
in odist 输出批次之间的距离。
in type FFT类型(例如,MUFFT_R2C 表示单精度实数到复数)。
in batch 要执行的批处理变换数量。
out workSize 指向工作区大小(返回值)的指针。
返回值
MUFFT_SUCCESS muFFT 成功创建了 FFT 计划。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
MUFFT_ALLOC_FAILED 计划的 GPU 资源分配失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
MUFFT_INVALID_SIZE 一个或多个参数不受支持。
3.2.2.24 mufftPlan1d()
mufftResult mufftPlan1d ( mufftHandle∗plan, intnx, mufftTypetype, intbatch)
创建一个新的一维 FFT 计划。
分配并初始化一个新的一维 FFT 计划。
参数
out plan 指向 FFT 计划句柄的指针。
in nx FFT长度。
in type FFT类型。
in batch 要计算的批处理变换数量。
返回值
MUFFT_SUCCESS muFFT 成功创建了 FFT 计划。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
MUFFT_ALLOC_FAILED 计划的 GPU 资源分配失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
MUFFT_INVALID_SIZE nx 或 batch 参数不受支持。
3.2.2.25 mufftPlan2d()
mufftResult mufftPlan2d ( mufftHandle∗plan, intnx, intny, mufftTypetype)
创建一个新的二维 FFT 计划。
分配并初始化一个新的二维 FFT 计划。二维数据应存储在 C 顺序(行主格式)中,以便 y 方向(j 索引)的索引变化最快。
参数
out plan 指向 FFT 计划句柄的指针。
in nx x 方向的元素数量(慢索引)。
in ny y 方向的元素数量(快索引)。
in type FFT 类型。
返回值
MUFFT_SUCCESS muFFT 成功创建了 FFT 计划。
MUFFT_INVALID_PLAN 计划参数不是有效的 句柄。
MUFFT_ALLOC_FAILED 计划的 GPU 资源分配失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
MUFFT_INVALID_SIZE nx 或 ny 参数不受支持。
3.2.2.26 mufftPlan3d()
mufftResult mufftPlan3d ( mufftHandle∗plan, intnx, intny, intnz, mufftTypetype)
创建一个新的三维FFT计划。
分配并初始化一个新的三维FFT计划。三维数据应以C顺序存储 (行主格式),以便z方向(k索引)的索引变化最快。
参数
out plan 指向 FFT 计划句柄的指针。
in nx x 方向上的元素数量(最慢索引)。
in ny y 方向上的元素数量。
in nz z 方向上的元素数量(最快索引)。
in type FFT 类型 。
返回值
MUFFT_SUCCESS muFFT成功创建了FFT计划。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
MUFFT_ALLOC_FAILED 为计划分配 GPU 资源失败。
MUFFT_INVALID_VALUE 传递给API的一个或多个参数无效。
MUFFT_INVALID_SIZE nx, ny, 或 nz 参数中的一个或多个不受支持。
3.2.2.27 mufftPlanMany()
mufftResult mufftPlanMany ( mufftHandle∗plan, intrank, int∗n,
int∗inembed,
intistride,
intidist,
int∗onembed,
intostride,
intodist,
mufftTypetype,
intbatch)
创建一个新的批量秩维FFT计划。
分配并初始化一个新的批量秩维FFT。批量参数告诉 muFFT 要执行多少次变换。 用于复杂的用例,如灵活的输入和输出布局。
参数
out plan 指向FFT计划句柄的指针。
in rank FFT 变换的维度(1, 2, 或 3)。
in n x/y/z 方向上的元素数量。
in inembed 指向 rank 大小的指针,指示内存中输入数据的存储维度。如果
设置为 NULL,则忽略所有其他高级数据布局参数。
in istride 表示最不显著(即,
最内层)维度中两个连续输入元素之间的距离。
in idist 输入批次之间的距离。
in onembed 指向 rank 大小的指针,指示内存中输出数据的存储维度。如果
设置为NULL,则忽略所有其他高级数据布局参数。
in ostride 表示输出数组中最不显著(即,最内层)维度中两个连续输出元素之间的距离。
in odist 输出批次之间的距离。
in type FFT 类型(例如,MUFFT_R2C 用于单精度实数到复数)。
in batch 要执行的批量变换数量。
返回值
MUFFT_SUCCESS muFFT成功创建了 FFT 计划。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
MUFFT_ALLOC_FAILED 为计划分配 GPU 资源失败。
MUFFT_INVALID_VALUE 传递给 API 的一个或多个参数无效。
MUFFT_INVALID_SIZE 参数中的一个或多个不受支持。
3.2.2.28 mufftSetAutoAllocation()
mufftResult mufftSetAutoAllocation ( mufftHandleplan, intautoAllocate )
设置计划的自动分配标志。计划将分配自己的工作区。
参数
in plan 指向 FFT 计划的指针。
in autoAllocate 0 禁用自动分配,非零启用。
返回值
MUFFT_SUCCESS muFFT 成功允许用户管理工作区。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
3.2.2.29 mufftSetStream()
mufftResult mufftSetStream ( mufftHandleplan, musaStream_t stream)
设置要在计划上执行的 MUSA 流。
将 MUSA 流与 muFFT 计划关联。此计划启动的所有内核都与提供的 流关联。
参数
plan FFT 计划。
stream MUSA 流。
返回值
MUFFT_SUCCESS 流与计划关联。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
3.2.2.30 mufftSetWorkArea()
mufftResult mufftSetWorkArea ( mufftHandleplan, void∗workArea)
设置计划的工作区。
参数
in plan 指向 FFT 计划的指针。
in workArea 指向工作区的指针(在设备上)。
返回值
MUFFT_SUCCESS muFFT 成功允许用户覆盖 workArea 指针。
MUFFT_INVALID_PLAN 计划参数不是有效的句柄。
MUFFT_ALLOC_FAILED 释放计划的原始 GPU 资源失败。
MUFFT_INVALID_VALUE 传递给计划的一个或多个参数无效。

