cuSOLVERMp C API#
库管理#
cusolverMpCreate
#
cusolverStatus_t cusolverMpCreate(
cusolverMpHandle_t *handle,
int device,
cudaStream_t stream)
device
提供的 CUDA 设备和 CUDA 流 stream
。stream
不能是默认 (NULL
或 0
) 流。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输出 |
cuSOLVERMp 库句柄 |
device |
主机 |
输入 |
将分配给句柄的设备。 |
stream |
主机 |
输入 |
将分配给句柄的流。 |
cusolverMpDestroy
#
cusolverStatus_t cusolverMpDestroy(
cusolverMpHandle_t handle)
device
提供的 CUDA 设备。每个进程和每个 GPU 仅支持一个句柄。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入/输出 |
cuSOLVERMp 库句柄 |
cusolverMpGetStream
#
cusolverStatus_t cusolverMpGetStream(
cusolverMpHandle_t handle,
cudaStream_t *stream)
stream
。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄 |
stream |
主机 |
输出 |
与句柄关联的流。 |
cusolverMpGetVersion
#
cusolverStatus_t cusolverMpGetVersion(
cusolverMpHandle_t handle,
int *version)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄 |
version |
主机 |
输出 |
cuSOLVERMp 库版本。值为 |
网格管理#
cusolverMpCreateDeviceGrid
#
cusolverStatus_t cusolverMpCreateDeviceGrid(
cusolverMpHandle_t handle,
cusolverMpGrid_t *grid,
cal_comm_t comm,
int32_t numRowDevices,
int32_t numColDevices,
cusolverMpGridMapping_t mapping)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄 |
grid |
主机 |
输出 |
要初始化的网格对象。 |
comm |
主机 |
输入 |
将与网格关联的通信器。 |
numRowDevices |
主机 |
输入 |
网格将包含多少进程行。 |
numColDevices |
主机 |
输入 |
网格将包含多少进程列。 |
mapping |
主机 |
输入 |
如何将进程映射到网格。有关更多详细信息,请参阅 cusolverMpGrid_t 的描述。目前,仅支持 |
cusolverMpDestroyGrid
#
cusolverStatus_t cusolverMpDestroyGrid(
cusolverMpGrid_t grid)
grid
对象。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
grid |
主机 |
输入/输出 |
要销毁的网格对象。 |
矩阵管理#
cusolverMpCreateMatrixDesc
#
cusolverStatus_t cusolverMpCreateMatrixDesc(
cusolverMpMatrixDescriptor_t *descr,
cusolverMpGrid_t grid,
cudaDataType dataType,
int64_t M_A,
int64_t N_A,
int64_t MB_A,
int64_t NB_A,
uint32_t RSRC_A,
uint32_t CSRC_A,
int64_t LLD_A)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
descr |
主机 |
输出 |
由此函数初始化的矩阵描述符对象。 |
dataType |
主机 |
输入 |
矩阵 A 的数据类型。 |
M_A |
主机 |
输入 |
全局数组 A 中的行数。 |
N_A |
主机 |
输入 |
全局矩阵 A 中的列数。 |
MB_A |
主机 |
输入 |
用于分布全局矩阵 A 的行的块因子。 |
NB_A |
主机 |
输入 |
用于分布全局矩阵 A 的列的块因子。 |
RSRC_A |
主机 |
输入 |
矩阵 A 的第一行分布在其上的进程行。目前仅支持值 |
CSRC_A |
主机 |
输入 |
矩阵 A 的第一行分布在其上的进程列。目前仅支持值 |
LLD_A |
主机 |
输入 |
本地矩阵的引导维度。 |
dataType
参数的受支持值。A 的数据类型 |
描述 |
---|---|
CUDA_R_32I |
32 位整数值。 |
CUDA_R_64I |
64 位整数值。 |
CUDA_R_32F |
单精度实数值。 |
CUDA_R_64F |
双精度实数值。 |
CUDA_C_32F |
单精度复数值。 |
CUDA_C_64F |
双精度复数值。 |
cusolverMpDestroyMatrixDesc
#
cusolverStatus_t cusolverMpDestroyMatrixDesc(
cusolverMpMatrixDescriptor_t descr )
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
descr |
主机 |
输入/输出 |
由此函数销毁的矩阵描述符对象。 |
实用工具#
cusolverMpNUMROC
#
int64_t cusolverMpNUMROC(
int64_t n,
int64_t nb,
uint32_t iproc,
uint32_t isrcproc,
uint32_t nprocs)
iproc
参数指示的进程拥有的分布式矩阵的行数或列数。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
n |
主机 |
输入 |
全局分布式矩阵中的行数或列数。 |
nb |
主机 |
输入 |
全局矩阵的行或列块大小。 |
iproc |
主机 |
输入 |
要确定其本地数组行或列的进程的坐标。 |
isrcproc |
主机 |
输入 |
拥有分布式矩阵的第一行或第一列的进程的坐标。 |
nprocs |
主机 |
输入 |
矩阵分布在其上的行或列进程的总数。 |
iproc
参数指示的进程拥有的分布式矩阵的行数或列数。cusolverMpMatrixGatherD2H
#
cusolverStatus_t cusolverMpMatrixGatherD2H(
cusolverMpHandle_t handle,
int64_t M,
int64_t N,
void *d_A,
int64_t IA,
int64_t JA,
cusolverMpMatrixDescriptor_t descrA,
int root,
void *h_dst,
int64_t h_lddst)
root
上提供的缓冲区中收集全局分布式矩阵 A
。输入矩阵 A
最初使用 2D 块循环格式分布,在输出时 h_dst
包含列主序格式的矩阵。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
M |
主机 |
输入 |
全局分布式矩阵 A 的行数。 |
M |
主机 |
输入 |
全局分布式矩阵 A 的列数。 |
d_A |
设备 |
输入 |
全局分布式矩阵 A 的列数。 |
d_A |
设备 |
输入 |
指向本地内存的指针,指向维度为 |
IA |
主机 |
输入 |
全局矩阵 A 中的行索引,指示 sub(A) 的第一行。此函数不对 |
JA |
主机 |
输入 |
全局矩阵 A 中的列索引,指示 sub(A) 的第一列。此函数不对 |
descrA |
主机 |
输入 |
全局矩阵 A 的矩阵描述符。 |
root |
主机 |
输入 |
将在其上收集矩阵 A 的进程 ID。 |
h_dst |
主机 |
输出 |
进程 |
h_lddst |
主机 |
输入 |
进程 |
警告
此函数旨在作为实用工具函数来验证数据布局的正确性,并不旨在在大输入上实现高性能。
cusolverMpMatrixScatterH2D
#
cusolverStatus_t cusolverMpMatrixScatterH2D(
cusolverMpHandle_t handle,
int64_t M,
int64_t N,
void *d_A,
int64_t IA,
int64_t JA,
cusolverMpMatrixDescriptor_t descrA,
int root,
void *h_src,
int64_t h_ldsrc)
root
进程的本地缓冲区 h_src
中的矩阵分散到分布式全局矩阵 A
。h_src
以列主序格式存储。在输出时,d_A
包含以 2D 块循环格式分布的全局矩阵 A
的本地部分。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
M |
主机 |
输入 |
全局分布式矩阵 A 的行数。 |
M |
主机 |
输入 |
全局分布式矩阵 A 的列数。 |
d_A |
设备 |
输出 |
指向本地内存的指针,指向维度为 |
IA |
主机 |
输入 |
全局矩阵 A 中的行索引,指示 sub(A) 的第一行。此函数不对 |
JA |
主机 |
输入 |
全局矩阵 A 中的列索引,指示 sub(A) 的第一列。此函数不对 |
descrA |
主机 |
输入 |
全局矩阵 A 的矩阵描述符。 |
root |
主机 |
输入 |
用于分布全局矩阵 A 的列的块因子。 |
h_src |
主机 |
输入 |
进程 |
h_ldsrc |
主机 |
输入 |
进程 |
警告
此函数旨在作为实用工具函数来验证数据布局的正确性,并不旨在在大输入上实现高性能。
日志记录#
cusolverMpLoggerSetCallback
#
cusolverStatus_t cusolverMpLoggerSetCallback(
cusolverMpLoggerCallback_t callback)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
callback |
主机 |
输入 |
指向回调函数的指针。请参阅 |
警告
这是一个实验性功能。
cusolverMpLoggerSetFile
#
cusolverStatus_t cusolverMpLoggerSetFile(
FILE *file)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
file |
主机 |
输入 |
指向打开文件的指针。文件应具有写入权限 |
警告
这是一个实验性功能。
cusolverMpLoggerOpenFile
#
cusolverStatus_t cusolverMpLoggerOpenFile(
const char* logFile)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
logFile |
主机 |
输入 |
日志记录输出文件的路径。 |
警告
这是一个实验性功能。
cusolverMpLoggerSetLevel
#
cusolverStatus_t cusolverMpLoggerSetLevel(
int level)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
level |
主机 |
输入 |
日志记录级别的数值。请参阅 |
警告
这是一个实验性功能。
cusolverMpLoggerSetMask
#
cusolverStatus_t cusolverMpLoggerSetMask(
int mask)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
mask |
主机 |
输入 |
日志记录掩码的值。请参阅 |
警告
这是一个实验性功能。
cusolverMpLoggerForceDisable
#
cusolverStatus_t cusolverMpLoggerForceDisable(
int level)
警告
这是一个实验性功能。
稠密线性代数 API#
cusolverMpGetrf
#
cusolverStatus_t cusolverMpGetrf(
cusolverMpHandle_t handle,
int64_t M,
int64_t N,
void *d_A,
int64_t IA,
int64_t JA,
cusolverMpMatrixDescriptor_t descrA,
int64_t *d_ipiv,
cudaDataType_t computeType,
void *d_work,
size_t workspaceInBytesOnDevice,
void *h_work,
size_t workspaceInBytesOnHost,
int *info)
d_ipiv=NULL
来禁用主元法。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
M |
主机 |
输入 |
sub(A) 的行数。 |
N |
主机 |
输入 |
sub(A) 的列数。 |
d_A |
设备 |
输入/输出 |
指向全局矩阵 A 的本地部分的第一项的指针。在输出时,sub(A) 将被 L 和 U 因子覆盖。 |
IA |
主机 |
输入 |
sub(A) 的第一行的行索引。此函数不对 |
JA |
主机 |
输入 |
sub(A) 的第一列的列索引。此函数不对 |
descrA |
主机 |
输入 |
与全局矩阵 A 关联的矩阵描述符 |
d_ipiv |
设备 |
输出 |
维度为 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
d_work |
主机 |
输出 |
设备工作区,大小为 |
workspaceInBytesOnDevice |
主机 |
输入 |
例程所需的本地设备工作区的大小(以字节为单位),由 cusolverMpGetrf_bufferSize() 提供。 |
h_work |
主机 |
输出 |
主机工作区,大小为 |
workspaceInBytesOnHost |
主机 |
输入 |
例程所需的本地主机工作区的大小(以字节为单位),由 cusolverMpGetrf_bufferSize() 提供。 |
info |
设备 |
输出 |
|
A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpGetrf_bufferSize
#
cusolverStatus_t cusolverMpGetrf_bufferSize(
cusolverMpHandle_t handle,
int64_t M,
int64_t N,
void *d_A,
int64_t IA,
int64_t JA,
cusolverMpMatrixDescriptor_t descrA,
int64_t *d_ipiv,
cudaDataType_t computeType,
size_t *workspaceInBytesOnDevice,
size_t *workspaceInBytesOnHost)
d_ipiv=NULL
,以便 cusolverMpGetrf() 将计算输入矩阵 A 的 LU 分解,而无需主元法。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
M |
主机 |
输入 |
sub(A) 的行数。 |
N |
主机 |
输入 |
sub(A) 的列数。 |
d_A |
设备 |
输入 |
指向全局矩阵 A 的本地部分的第一项的指针。 |
IA |
主机 |
输入 |
sub(A) 的第一行的行索引。此函数不对 |
JA |
主机 |
输入 |
sub(A) 的第一列的列索引。此函数不对 |
descrA |
主机 |
输入 |
与全局矩阵 A 关联的矩阵描述符 |
d_ipiv |
设备 |
输入 |
指示指向分布式整数数组的指针。当它不是 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
workspaceInBytesOnDevice |
主机 |
输出 |
在输出时,包含 cusolverMpGetrf() 所需的本地设备工作区的大小(以字节为单位)。 |
workspaceInBytesOnHost |
主机 |
输出 |
在输出时,包含 cusolverMpGetrf() 所需的本地主机工作区的大小(以字节为单位)。 |
A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpGetrs
#
cusolverStatus_t cusolverMpGetrs(
cusolverMpHandle_t handle,
cublasOperation_t trans,
int64_t N,
int64_t NRHS,
const void *d_A,
int64_t IA,
int64_t JA,
cusolverMpMatrixDescriptor_t descrA,
const int64_t *d_ipiv,
void *d_B,
int64_t IB,
int64_t JB,
cusolverMpMatrixDescriptor_t descrB,
cudaDataType_t computeType,
void *d_work,
size_t workspaceInBytesOnDevice,
void *h_work,
size_t workspaceInBytesOnHost,
int *d_info)
trans
定义,它允许求解以下形式的线性系统trans |
线性系统的形式 |
---|---|
CUBLAS_OP_N |
\(sub(A) \cdot X = sub(B)\) |
CUBLAS_OP_T |
\(sub(A)^T \cdot X = sub(B)\) |
CUBLAS_OP_C |
\(sub(A)^H \cdot X = sub(B)\) |
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
trans |
主机 |
输入 |
指定线性系统的形式。目前仅支持 |
N |
主机 |
输入 |
sub(A) 的行数。 |
NRHS |
主机 |
输入 |
sub(B) 的列数。目前,此例程仅支持 |
d_A |
设备 |
输入 |
指向本地内存的指针,指向维度为 |
IA |
主机 |
输入 |
sub(A) 的第一行的行索引。此函数不对 |
JA |
主机 |
输入 |
sub(A) 的第一列的列索引。此函数不对 |
descrA |
主机 |
输入 |
与全局矩阵 A 关联的矩阵描述符 |
d_ipiv |
设备 |
输入 |
维度为 |
d_B |
设备 |
输入/输出 |
指向本地内存的指针,指向维度为 |
IB |
主机 |
输入 |
sub(B) 的第一行的行索引。此函数不对 |
JB |
主机 |
输入 |
sub(B) 的第一列的列索引。此函数不对 |
descrB |
主机 |
输入 |
与全局矩阵 B 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
d_work |
设备 |
输出 |
主机工作区,大小为 |
workspaceInBytesOnDevice |
主机 |
输入 |
例程所需的本地设备工作区的大小(以字节为单位),由 cusolverMpGetrs_bufferSize() 提供。 |
h_work |
主机 |
输出 |
主机工作区,大小为 |
workspaceInBytesOnHost |
主机 |
输入 |
例程所需的本地主机工作区的大小(以字节为单位),由 cusolverMpGetrs_bufferSize() 提供。 |
info |
设备 |
输出 |
|
A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpGetrs_bufferSize
#
cusolverStatus_t cusolverMpGetrs_bufferSize(
cusolverMpHandle_t handle,
cublasOperation_t trans,
int64_t N,
int64_t NRHS,
const void *d_A,
int64_t IA,
int64_t JA,
cusolverMpMatrixDescriptor_t descrA,
const int64_t *d_ipiv,
void *d_B,
int64_t IB,
int64_t JB,
cusolverMpMatrixDescriptor_t descrB,
cudaDataType_t computeType,
size_t *workspaceInBytesOnDevice,
size_t *workspaceInBytesOnHost)
d_ipiv=NULL
。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
trans |
主机 |
输入 |
指定线性系统的形式。目前仅支持 |
N |
主机 |
输入 |
sub(A) 的行数。 |
NRHS |
主机 |
输入 |
sub(B) 的列数。目前,此例程仅支持 |
d_A |
设备 |
输入 |
指向本地内存的指针,指向维度为 |
IA |
主机 |
输入 |
sub(A) 的第一行的行索引。此函数不对 |
JA |
主机 |
输入 |
sub(A) 的第一列的列索引。此函数不对 |
descrA |
主机 |
输入 |
与全局矩阵 A 关联的矩阵描述符 |
d_ipiv |
设备 |
输入 |
维度为 |
d_B |
设备 |
输入 |
指向全局矩阵 B 的本地部分的第一项的指针。在输出时,B 将被线性方程组的解覆盖。 |
IB |
主机 |
输入 |
sub(B) 的第一行的行索引。此函数不对 |
JB |
主机 |
输入 |
sub(B) 的第一列的列索引。此函数不对 |
descrB |
主机 |
输入 |
与全局矩阵 B 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
workspaceInBytesOnDevice |
主机 |
输出 |
在输出时,包含 cusolverMpGetrs() 所需的本地设备工作区的大小(以字节为单位)。 |
workspaceInBytesOnHost |
主机 |
输出 |
在输出时,包含 cusolverMpGetrs() 所需的本地主机工作区的大小(以字节为单位)。 |
A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpPotrf
#
cusolverStatus_t cusolverMpPotrf(
cusolverMpHandle_t handle,
cublasFillMode_t uplo,
int64_t N,
void *d_A,
int64_t IA,
int64_t JA,
cusolverMpMatrixDescriptor_t descrA,
cudaDataType_t computeType,
void *d_work,
size_t workspaceInBytesOnDevice,
void *h_work,
size_t workspaceInBytesOnHost,
int *info)
A(IA:IA+N-1, JA:JA+N-1)
)的 Cholesky 分解。uplo=CUBLAS_FILL_MODE_UPPER
,则分解形式为uplo
设置为 CUBLAS_FILL_MODE_LOWER
,则分解形式为参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
uplo |
主机 |
输入 |
指定 A 是上三角矩阵 ( |
N |
主机 |
输入 |
N |
d_A |
设备 |
输入 |
sub(A) 的行数和列数。 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
IA |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
d_work |
设备 |
输出 |
设备工作区,大小为 |
workspaceInBytesOnDevice |
主机 |
输入 |
JA |
h_work |
主机 |
输出 |
主机工作区,大小为 |
workspaceInBytesOnHost |
主机 |
输入 |
sub(A) 的第一列的列索引。 |
info |
设备 |
输出 |
|
A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
与全局矩阵 A 关联的矩阵描述符。
cusolverStatus_t cusolverMpPotrf_bufferSize(
cusolverMpHandle_t handle,
cublasFillMode_t uplo,
int64_t N,
const void *d_A,
int64_t IA,
int64_t JA,
cusolverMpMatrixDescriptor_t descrA,
cudaDataType_t computeType,
size_t* workspaceInBytesOnDevice,
size_t* workspaceInBytesOnHost)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
uplo |
主机 |
输入 |
指定 A 是上三角矩阵 ( |
N |
主机 |
输入 |
N |
d_A |
设备 |
输入 |
sub(A) 的行数和列数。 |
IA |
主机 |
输入 |
sub(A) 的第一行的行索引。此函数不对 |
JA |
主机 |
输入 |
sub(A) 的第一列的列索引。此函数不对 |
descrA |
主机 |
输入 |
与全局矩阵 A 关联的矩阵描述符 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
workspaceInBytesOnDevice |
主机 |
输出 |
例程所需的本地主机工作区的大小(以字节为单位),由 cusolverMpPotrf_bufferSize() 提供。 |
workspaceInBytesOnHost |
主机 |
输出 |
此函数需要正方形块大小 |
A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpPotrf_bufferSize
#
cusolverStatus_t cusolverMpPotrs(
cusolverMpHandle_t handle,
cublasFillMode_t uplo,
int64_t N,
int64_t NRHS,
const void *d_A,
int64_t IA,
int64_t JA,
cusolverMpMatrixDescriptor_t descrA,
void *d_B,
int64_t IB,
int64_t JB,
cusolverMpMatrixDescriptor_t descB,
cudaDataType_t computeType,
void *d_work,
size_t workspaceInBytesOnDevice,
void *h_work,
size_t workspaceInBytesOnHost,
int *info)
\[sub(A) = U^H \cdot U\]
cusolverMpPotrs
#参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
uplo |
主机 |
输入 |
指定 A 是上三角矩阵 ( |
N |
主机 |
输入 |
N |
NRHS |
主机 |
输入 |
sub(B) 的列数。目前,此例程仅支持 |
d_A |
设备 |
输入 |
其中 sub(A) 表示 |
IA |
主机 |
输入 |
或 |
JA |
主机 |
输入 |
\[sub(B) = L \cdot L^H\] |
descrA |
主机 |
输入 |
与全局矩阵 A 关联的矩阵描述符 |
d_B |
设备 |
输入/输出 |
指向本地内存的指针,指向维度为 |
IB |
主机 |
输入 |
sub(B) 的第一行的行索引。此函数不对 |
JB |
主机 |
输入 |
sub(B) 的第一列的列索引。此函数不对 |
descrB |
主机 |
输入 |
与全局矩阵 B 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
d_work |
设备 |
输出 |
设备工作区,大小为 |
workspaceInBytesOnDevice |
主机 |
输入 |
由 cusolverMpPotrf() 计算,sub(B) 表示分布式矩阵 |
h_work |
主机 |
输出 |
主机工作区,大小为 |
workspaceInBytesOnHost |
主机 |
输入 |
d_A |
info |
设备 |
输出 |
|
(LLD_A, LOCc(JA+N-1))
的数组。包含 N×N 分布式 L 或 U 因子 sub(A) 的本地部分,如 cusolverMpPotrf() 计算的那样。A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
IA
sub(A) 的第一行的行索引。IA
必须是行块维度 NB_A
的倍数。
cusolverStatus_t cusolverMpPotrs_bufferSize(
cusolverMpHandle_t handle,
cublasFillMode_t uplo,
int64_t n,
int64_t nrhs,
const void *a,
int64_t ia,
int64_t ja,
cusolverMpMatrixDescriptor_t descrA,
const void *b,
int64_t ib,
int64_t jb,
cusolverMpMatrixDescriptor_t descB,
cudaDataType_t computeType,
size_t* workspaceInBytesOnDevice,
size_t* workspaceInBytesOnHost)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
uplo |
主机 |
输入 |
指定 A 是上三角矩阵 ( |
N |
主机 |
输入 |
N |
NRHS |
主机 |
输入 |
sub(B) 的列数。目前,此例程仅支持 |
d_A |
设备 |
输入 |
其中 sub(A) 表示 |
IA |
主机 |
输入 |
或 |
JA |
主机 |
输入 |
\[sub(B) = L \cdot L^H\] |
descrA |
主机 |
输入 |
与全局矩阵 A 关联的矩阵描述符 |
d_B |
设备 |
输入 |
指向本地内存的指针,指向维度为 |
IB |
主机 |
输入 |
sub(B) 的第一行的行索引。此函数不对 |
JB |
主机 |
输入 |
sub(B) 的第一列的列索引。此函数不对 |
descrB |
主机 |
输入 |
与全局矩阵 B 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
workspaceInBytesOnDevice |
主机 |
输出 |
sub(A) 的第一列的列索引。 |
workspaceInBytesOnHost |
主机 |
输出 |
例程所需的本地设备工作区的大小(以字节为单位),由 cusolverMpPotrs_bufferSize() 提供。 |
(LLD_A, LOCc(JA+N-1))
的数组。包含 N×N 分布式 L 或 U 因子 sub(A) 的本地部分,如 cusolverMpPotrf() 计算的那样。A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
IA
cusolverMpGeqrf
#
cusolverStatus_t cusolverMpGeqrf(
cusolverMpHandle_t handle,
int64_t M,
int64_t N,
void *d_A,
int64_t IA,
int64_t JA,
cusolverMpMatrixDescriptor_t descrA,
void *d_tau,
cudaDataType_t computeType,
void *d_work,
size_t workspaceInBytesOnDevice,
void *h_work,
size_t workspaceInBytesOnHost,
int *info)
A(IA:IA+M-1, JA:JA+N-1)
)的 QR 分解。tau
数组,R 是上三角矩阵。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
M |
主机 |
输入 |
sub(A) 的行数。 |
N |
主机 |
输入 |
sub(A) 的列数。 |
d_A |
设备 |
输入/输出 |
指向维度为 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
sub(A) 的第一列的列索引。 |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
d_tau |
设备 |
输出 |
指向维度为 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
d_work |
设备 |
输出 |
设备工作区,大小为 |
workspaceInBytesOnDevice |
主机 |
输入 |
例程所需的本地设备工作空间的大小(以字节为单位),由 cusolverMpGeqrf_bufferSize() 提供。 |
h_work |
主机 |
输出 |
主机工作区,大小为 |
workspaceInBytesOnHost |
主机 |
输入 |
例程所需的本地主机工作空间的大小(以字节为单位),由 cusolverMpGeqrf_bufferSize() 提供。 |
info |
设备 |
输出 |
|
A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpGeqrf_bufferSize
#
cusolverStatus_t cusolverMpGeqrf_bufferSize(
cusolverMpHandle_t handle,
int64_t M,
int64_t N,
const void *d_A,
int64_t IA,
int64_t JA,
cusolverMpMatrixDescriptor_t descrA,
cudaDataType_t computeType,
size_t* workspaceInBytesOnDevice,
size_t* workspaceInBytesOnHost)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
M |
主机 |
输入 |
sub(A) 的行数。 |
N |
主机 |
输入 |
sub(A) 的列数。 |
d_A |
设备 |
输入 |
指向维度为 |
IA |
主机 |
输入 |
全局矩阵 A 中的行索引,指示 sub(A) 的第一行。此函数不对 |
JA |
主机 |
输入 |
全局矩阵 A 中的列索引,指示 sub(A) 的第一列。此函数不对 |
descrA |
主机 |
输入 |
与全局矩阵 A 关联的矩阵描述符 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
workspaceInBytesOnDevice |
主机 |
输出 |
在输出时,包含 cusolverMpGeqrf() 所需的本地设备工作空间的大小(以字节为单位)。 |
workspaceInBytesOnHost |
主机 |
输出 |
在输出时,包含 cusolverMpGeqrf() 所需的本地主机工作空间的大小(以字节为单位)。 |
A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
IA
cusolverMpOrmqr
#
cusolverStatus_t cusolverMpOrmqr(
cusolverMpHandle_t handle,
cublasSideMode_t side,
cublasOperation_t trans,
int64_t M,
int64_t N,
int64_t K,
const void *d_A,
int64_t IA,
int64_t JA,
const cusolverMpMatrixDescriptor_t descrA,
const void *d_tau,
void *d_C,
int64_t IC,
int64_t JC,
const cusolverMpMatrixDescriptor_t descC,
cudaDataType_t computeType,
void *d_work,
size_t workspaceInBytesOnDevice,
void *h_work,
size_t workspaceInBytesOnHost,
int *info)
C(IC:IC+M-1, JC:JC+N-1)
)乘以可以从 cusolverMpGeqrf() 给出的正交矩阵 Q。side
为 CUBLAS_SIDE_LEFT
和 CUBLAS_SIDE_RIGHT
的情况。请注意,当前实现仅支持 CUBLAS_SIDE_LEFT
。CUBLAS_SIDE_LEFT
和 CUBLAS_SIDE_RIGHT
分别为 K <= M
和 K <= N
的约束。op
可以根据 trans
参数 CUBLAS_OP_N
、CUBLAS_OP_T
和 CUBLAS_OP_H
转换为 \(Q\)、\(Q^T\)、\(Q^H\)。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
side |
主机 |
输入 |
指示 Q 从左侧还是右侧应用。 |
trans |
主机 |
输入 |
指示 Q 应用时是否不转置或(共轭)转置。 |
M |
主机 |
输入 |
sub(C) 的行数。 |
N |
主机 |
输入 |
sub(C) 的列数。 |
K |
主机 |
输入 |
定义 Q 的 Householder 反射器的数量。 |
d_A |
设备 |
输入 |
指向维度为 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
IA |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
d_tau |
设备 |
输入 |
指向维度为 |
d_C |
设备 |
输入/输出 |
指向维度为 |
IC |
主机 |
输入 |
sub(C) 的第一行的行索引。 |
JC |
主机 |
输入 |
sub(C) 的第一列的列索引。 |
descrC |
主机 |
输入 |
与全局矩阵 C 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
d_work |
设备 |
输出 |
设备工作区,大小为 |
workspaceInBytesOnDevice |
主机 |
输入 |
例程所需的本地设备工作空间的大小(以字节为单位),由 cusolverMpOrmqr_bufferSize() 提供。 |
h_work |
主机 |
输出 |
主机工作区,大小为 |
workspaceInBytesOnHost |
主机 |
输入 |
例程所需的本地主机工作空间的大小(以字节为单位),由 cusolverMpOrmqr_bufferSize() 提供。 |
info |
设备 |
输出 |
|
(MB_A == NB_A)
以及 sub(A) 和 sub(C) 矩阵的对齐,即 (MB_A == MB_C)
和 (IA == IC)
。A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpOrmqr_bufferSize
#
cusolverStatus_t cusolverMpOrmqr_bufferSize(
cusolverMpHandle_t handle,
cublasSideMode_t side,
cublasOperation_t trans,
int64_t M,
int64_t N,
int64_t K,
const void *d_A,
int64_t IA,
int64_t JA,
const cusolverMpMatrixDescriptor_t descrA,
const void *d_tau,
void *d_C,
int64_t IC,
int64_t JC,
const cusolverMpMatrixDescriptor_t descrC,
cudaDataType_t computeType,
size_t* workspaceInBytesOnDevice,
size_t* workspaceInBytesOnHost)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
side |
主机 |
输入 |
指示 Q 从左侧还是右侧应用。 |
trans |
主机 |
输入 |
指示 Q 应用时是否不转置或(共轭)转置。 |
M |
主机 |
输入 |
sub(C) 的行数。 |
N |
主机 |
输入 |
sub(C) 的列数。 |
K |
主机 |
输入 |
定义 Q 的 Householder 反射器的数量。 |
d_A |
设备 |
输入 |
指向维度为 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
IA |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
d_tau |
设备 |
输入 |
指向维度为 |
d_C |
设备 |
输入 |
指向维度为 |
IC |
主机 |
输入 |
sub(C) 的第一行的行索引。 |
JC |
主机 |
输入 |
sub(C) 的第一列的列索引。 |
descrC |
主机 |
输入 |
与全局矩阵 C 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
workspaceInBytesOnDevice |
主机 |
输出 |
cusolverMpOrmqr() 所需的本地设备工作空间的大小(以字节为单位)。 |
workspaceInBytesOnHost |
主机 |
输出 |
cusolverMpOrmqr() 所需的本地主机工作空间的大小(以字节为单位)。 |
A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpGels
#
cusolverStatus_t cusolverMpGels(
cusolverMpHandle_t handle,
cublasOperation_t trans,
int64_t M,
int64_t N,
int64_t NRHS,
void *d_A,
int64_t IA,
int64_t JA,
const cusolverMpMatrixDescriptor_t descrA,
void *d_B,
int64_t IB,
int64_t JB,
const cusolverMpMatrixDescriptor_t descrB,
cudaDataType_t computeType,
void *d_work,
size_t workspaceInBytesOnDevice,
void *h_work,
size_t workspaceInBytesOnHost,
int *info)
A(IA:IA+M-1, JA:JA+N-1)
)或其转置的超定或欠定线性系统。M >= N
) 的解,仅支持通过 QR 分解 cusolverMpGeqrf()。B(IB:IB+M-1, JB:JB+NRHS-1)
,解多向量 X
被覆盖到 sub(B) 上。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
trans |
主机 |
输入 |
指示 sub(A) 的线性系统是否涉及不转置或(共轭)转置。 |
M |
主机 |
输入 |
sub(A) 的行数。 |
N |
主机 |
输入 |
sub(A) 的列数。 |
NRHS |
主机 |
输入 |
右手边向量的数量,即 sub(B) 和 X 的列数。 |
d_A |
设备 |
输入 |
指向维度为 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
sub(A) 的第一列的列索引。 |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
d_B |
设备 |
输入/输出 |
指向维度为 |
IB |
主机 |
输入 |
sub(B) 的第一行的行索引。 |
JB |
主机 |
输入 |
sub(B) 的第一列的列索引。 |
descrB |
主机 |
输入 |
与全局矩阵 B 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
d_work |
设备 |
输出 |
设备工作区,大小为 |
workspaceInBytesOnDevice |
主机 |
输入 |
例程所需的本地设备工作空间的大小(以字节为单位),由 cusolverMpGels_bufferSize() 提供。 |
h_work |
主机 |
输出 |
主机工作区,大小为 |
workspaceInBytesOnHost |
主机 |
输入 |
例程所需的本地主机工作空间的大小(以字节为单位),由 cusolverMpGels_bufferSize() 提供。 |
info |
设备 |
输出 |
|
(LLD_A, LOCc(JA+N-1))
的数组。包含 N×N 分布式 L 或 U 因子 sub(A) 的本地部分,如 cusolverMpPotrf() 计算的那样。A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpGels_bufferSize
#
cusolverStatus_t cusolverMpGels_bufferSize(
cusolverMpHandle_t handle,
cublasOperation_t trans,
int64_t M,
int64_t N,
int64_t NRHS,
void *d_A,
int64_t IA,
int64_t JA,
const cusolverMpMatrixDescriptor_t descrA,
void *d_B,
int64_t IB,
int64_t JB,
const cusolverMpMatrixDescriptor_t descrB,
cudaDataType_t computeType,
size_t* workspaceInBytesOnDevice,
size_t* workspaceInBytesOnHost)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
trans |
主机 |
输入 |
指示 sub(A) 的线性系统是否涉及不转置或(共轭)转置。 |
M |
主机 |
输入 |
sub(A) 的行数。 |
N |
主机 |
输入 |
sub(A) 的列数。 |
NRHS |
主机 |
输入 |
右手边向量的数量,即 sub(B) 和 X 的列数。 |
d_A |
设备 |
输入 |
指向维度为 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
sub(A) 的第一列的列索引。 |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
d_B |
设备 |
输入 |
指向维度为 |
IB |
主机 |
输入 |
sub(B) 的第一行的行索引。 |
JB |
主机 |
输入 |
sub(B) 的第一列的列索引。 |
descrB |
主机 |
输入 |
与全局矩阵 B 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
workspaceInBytesOnDevice |
主机 |
输出 |
cusolverMpGels() 所需的本地设备工作空间的大小(以字节为单位)。 |
workspaceInBytesOnHost |
主机 |
输出 |
cusolverMpGels() 所需的本地主机工作空间的大小(以字节为单位)。 |
A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpSytrd
#
cusolverStatus_t cusolverMpSytrd(
cusolverMpHandle_t handle,
cublasFillMode_t uplo,
int64_t N,
void *d_A,
int64_t IA,
int64_t JA,
const cusolverMpMatrixDescriptor_t descrA,
void *d_d,
void *d_e,
void *d_tau,
cudaDataType_t computeType,
void *d_work,
size_t workspaceInBytesOnDevice,
void *h_work,
size_t workspaceInBytesOnHost,
int *info)
A(IA:IA+N-1, JA:JA+N-1)
)约化为三对角形式。CUBLAS_FILL_MODE_LOWER
实现。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
uplo |
主机 |
输入 |
指示函数使用 sub(A) 的上三角部分或下三角部分。 |
N |
主机 |
输入 |
方阵 sub(A) 的行数/列数。 |
d_A |
设备 |
输入/输出 |
指向维度为 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
sub(A) 的第一列的列索引。 |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
d_d |
设备 |
输出 |
指向维度为 |
d_e |
设备 |
输出 |
指向维度为 |
d_tau |
设备 |
输出 |
指向维度为 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
d_work |
设备 |
输出 |
设备工作区,大小为 |
workspaceInBytesOnDevice |
主机 |
输入 |
例程所需的本地设备工作空间的大小(以字节为单位),由 cusolverMpSytrd_bufferSize() 提供。 |
h_work |
主机 |
输出 |
主机工作区,大小为 |
workspaceInBytesOnHost |
主机 |
输入 |
例程所需的本地主机工作空间的大小(以字节为单位),由 cusolverMpSytrd_bufferSize() 提供。 |
info |
设备 |
输出 |
|
(MB_A == NB_A)
。A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpSytrd_bufferSize
#
cusolverStatus_t cusolverMpSytrd_bufferSize(
cusolverMpHandle_t handle,
cublasFillMode_t uplo,
int64_t N,
void *d_A,
int64_t IA,
int64_t JA,
const cusolverMpMatrixDescriptor_t descrA,
void *d_d,
void *d_e,
void *d_tau,
cudaDataType_t computeType,
size_t *workspaceInBytesOnDevice,
size_t *workspaceInBytesOnHost)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
uplo |
主机 |
输入 |
指示函数使用 sub(A) 的上三角部分或下三角部分。 |
N |
主机 |
输入 |
方阵 sub(A) 的行数/列数。 |
d_A |
设备 |
输入 |
指向维度为 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
sub(A) 的第一列的列索引。 |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
d_d |
设备 |
输入 |
指向维度为 |
d_e |
设备 |
输入 |
指向维度为 |
d_tau |
设备 |
输入 |
指向维度为 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
workspaceInBytesOnDevice |
主机 |
输出 |
cusolverMpSytrd() 所需的本地设备工作空间的大小(以字节为单位)。 |
workspaceInBytesOnHost |
主机 |
输出 |
cusolverMpSytrd() 所需的本地主机工作空间的大小(以字节为单位)。 |
A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpStedc
#
cusolverStatus_t cusolverMpStedc(
cusolverMpHandle_t handle,
char *compz,
int64_t N,
void *d_d,
void *d_e,
void *d_Q,
int64_t IQ,
int64_t JQ,
const cusolverMpMatrixDescriptor_t descrQ,
cudaDataType_t computeType,
void *d_work,
size_t workspaceInBytesOnDevice,
void *h_work,
size_t workspaceInBytesOnHost,
int *info)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
compz |
主机 |
输入 |
仅计算特征值 ( |
N |
主机 |
输入 |
方阵 sub(A) 的行数/列数。 |
d_d |
设备 |
输入/输出 |
指向维度为 |
d_e |
设备 |
输入/输出 |
指向维度为 |
d_Q |
设备 |
输出 |
指向维度为 |
IQ |
主机 |
输入 |
sub(Q) 的第一行的行索引。 |
JQ |
主机 |
输入 |
sub(A) 的第一列的列索引。 |
descrQ |
主机 |
输入 |
与全局矩阵 Q 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
d_work |
设备 |
输出 |
设备工作区,大小为 |
workspaceInBytesOnDevice |
主机 |
输入 |
例程所需的本地设备工作空间的大小(以字节为单位),由 cusolverMpStedc_bufferSize() 提供。 |
h_work |
主机 |
输出 |
主机工作区,大小为 |
workspaceInBytesOnHost |
主机 |
输入 |
例程所需的本地主机工作空间的大小(以字节为单位),由 cusolverMpStedc_bufferSize() 提供。 |
info |
设备 |
输出 |
|
(MB_Q == NB_Q)
。三对角矩阵的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpStedc_bufferSize
#
cusolverStatus_t cusolverMpStedc_bufferSize(
cusolverMpHandle_t handle,
char *compz,
int64_t N,
void *d_d,
void *d_e,
void *d_Q,
int64_t IQ,
int64_t JQ,
const cusolverMpMatrixDescriptor_t descrQ,
cudaDataType_t computeType,
size_t *workspaceInBytesOnDevice,
size_t *workspaceInBytesOnHost,
int *iwork)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
compz |
主机 |
输入 |
仅计算特征值 ( |
N |
主机 |
输入 |
方阵 sub(A) 的行数/列数。 |
d_d |
设备 |
输入 |
指向维度为 |
d_e |
设备 |
输入 |
指向维度为 |
d_Q |
设备 |
输入 |
指向维度为 |
IQ |
主机 |
输入 |
sub(Q) 的第一行的行索引。 |
JQ |
主机 |
输入 |
sub(A) 的第一列的列索引。 |
descrQ |
主机 |
输入 |
与全局矩阵 Q 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
workspaceInBytesOnDevice |
主机 |
输出 |
例程 cusolverMpStedc() 所需的本地设备工作空间的大小(以字节为单位)。 |
workspaceInBytesOnHost |
主机 |
输出 |
cusolverMpStedc() 所需的本地主机工作空间的大小(以字节为单位)。 |
info |
设备 |
输出 |
|
三对角矩阵的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpOrmtr
#
cusolverStatus_t cusolverMpOrmtr(
cusolverMpHandle_t handle,
cublasSideMode_t side,
cublasFillMode_t uplo,
cublasOperation_t trans,
int64_t M,
int64_t N,
const void *d_A,
int64_t IA,
int64_t JA,
const cusolverMpMatrixDescriptor_t descrA,
const void *d_tau,
void *d_C,
int64_t IC,
int64_t JC,
const cusolverMpMatrixDescriptor_t descrC,
cudaDataType_t computeType,
void *d_work,
size_t workspaceInBytesOnDevice,
void *h_work,
size_t workspaceInBytesOnHost,
int *info)
C(IC:IC+M-1, JC:JC+N-1)
)乘以可以从 cusolverMpSytrd() 给出的正交矩阵 Q。CUBLAS_SIDE_LEFT
和 CUBLAS_SIDE_RIGHT
。op
可以根据 trans
参数 CUBLAS_OP_N
、CUBLAS_OP_T
和 CUBLAS_OP_H
转换为 \(Q\)、\(Q^T\)、\(Q^H\)。CUBLAS_FILL_MODE_UPPER
和 CUBLAS_FILL_MODE_LOWER
,如下所示:nq
根据 CUBLAS_SIDE_LEFT
或 CUBLAS_SIDE_RIGHT
的 side 参数,为 m
或 n
。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
side |
主机 |
输入 |
指示 Q 从左侧还是右侧应用。 |
uplo |
主机 |
输入 |
指示 sub(A) 的上三角或下三角部分包含 Householder 反射器。 |
trans |
主机 |
输入 |
指示 Q 应用时是否不转置或(共轭)转置。 |
M |
主机 |
输入 |
sub(C) 的行数。 |
N |
主机 |
输入 |
sub(C) 的列数。 |
d_A |
设备 |
输入 |
指向维度为 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
IA |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
d_tau |
设备 |
输入 |
指向维度为 |
d_C |
设备 |
输入/输出 |
指向维度为 |
IC |
主机 |
输入 |
sub(C) 的第一行的行索引。 |
JC |
主机 |
输入 |
sub(C) 的第一列的列索引。 |
descrC |
主机 |
输入 |
与全局矩阵 C 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
d_work |
设备 |
输出 |
设备工作区,大小为 |
workspaceInBytesOnDevice |
主机 |
输入 |
例程所需的本地设备工作空间的大小(以字节为单位),由 cusolverMpOrmtr_bufferSize() 提供。 |
h_work |
主机 |
输出 |
主机工作区,大小为 |
workspaceInBytesOnHost |
主机 |
输入 |
例程所需的本地主机工作空间的大小(以字节为单位),由 cusolverMpOrmtr_bufferSize() 提供。 |
info |
设备 |
输出 |
|
(MB_A == NB_A)
以及 sub(A) 和 sub(B) 矩阵的对齐,即 (MB_A == MB_C)
和 (IA == IC)
。A 和 C 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpOrmtr_bufferSize
#
cusolverStatus_t cusolverMpOrmtr_bufferSize(
cusolverMpHandle_t handle,
cublasSideMode_t side,
cublasFillMode_t uplo,
cublasOperation_t trans,
int64_t M,
int64_t N,
const void *d_A,
int64_t IA,
int64_t JA,
const cusolverMpMatrixDescriptor_t descrA,
const void *d_tau,
void *d_C,
int64_t IC,
int64_t JC,
const cusolverMpMatrixDescriptor_t descrC,
cudaDataType_t computeType,
size_t* workspaceInBytesOnDevice,
size_t* workspaceInBytesOnHost)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
side |
主机 |
输入 |
指示 Q 从左侧还是右侧应用。 |
uplo |
主机 |
输入 |
指示 sub(A) 的上三角或下三角部分包含 Householder 反射器。 |
trans |
主机 |
输入 |
指示 Q 应用时是否不转置或(共轭)转置。 |
M |
主机 |
输入 |
sub(C) 的行数。 |
N |
主机 |
输入 |
sub(C) 的列数。 |
d_A |
设备 |
输入 |
指向维度为 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
IA |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
d_tau |
设备 |
输入 |
指向维度为 |
d_C |
设备 |
输入 |
指向维度为 |
IC |
主机 |
输入 |
sub(C) 的第一行的行索引。 |
JC |
主机 |
输入 |
sub(C) 的第一列的列索引。`JC` 必须是列分块维度 |
descrC |
主机 |
输入 |
与全局矩阵 C 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
workspaceInBytesOnDevice |
主机 |
输出 |
cusolverMpOrmtr() 所需的本地设备工作空间的大小(以字节为单位)。 |
workspaceInBytesOnHost |
主机 |
输出 |
cusolverMpOrmtr() 所需的本地主机工作空间的大小(以字节为单位)。 |
A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpSyevd
#
cusolverStatus_t cusolverMpSyevd(
cusolverMpHandle_t handle,
char *jobz,
cublasFillMode_t uplo,
int64_t N,
void *d_A,
int64_t IA,
int64_t JA,
const cusolverMpMatrixDescriptor_t descrA,
void *d_d,
void *d_Z,
int64_t IZ,
int64_t JZ,
const cusolverMpMatrixDescriptor_t descrZ,
cudaDataType_t computeType,
void *d_work,
size_t workspaceInBytesOnDevice,
void *h_work,
size_t workspaceInBytesOnHost,
int *info)
A(IA:IA+N-1, JA:JA+N-1)
的所有特征值和可选的特征向量。请注意,当块大小不是 2 的幂时,当前 cusolverMpStedc 的实现可能会失败。参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
jobz |
主机 |
输入 |
如果 |
uplo |
主机 |
输入 |
指示 sub(A) 的上三角或下三角部分用于计算特征解。 |
N |
主机 |
输入 |
N |
d_A |
设备 |
输入 |
指向维度为 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
IA |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
d_d |
设备 |
输出 |
指向维度为全局大小 |
d_Z |
设备 |
输出 |
指向维度为 |
IZ |
主机 |
输入 |
sub(Z) 的第一行的行索引。 |
JZ |
主机 |
输入 |
sub(Z) 的第一列的列索引。 |
descrZ |
主机 |
输入 |
与全局矩阵 Z 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
d_work |
设备 |
输出 |
设备工作区,大小为 |
workspaceInBytesOnDevice |
主机 |
输入 |
例程所需的本地设备工作空间的大小(以字节为单位),由 cusolverMpSyevd_bufferSize() 提供。 |
h_work |
主机 |
输出 |
主机工作区,大小为 |
workspaceInBytesOnHost |
主机 |
输入 |
例程所需的本地主机工作空间的大小(以字节为单位),由 cusolverMpSyevd_bufferSize() 提供。 |
info |
设备 |
输出 |
|
(MB_A == NB_A)
以及 sub(A) 和 sub(B) 矩阵的对齐,即 (MB_A == MB_Z)
和 (IZ == IZ)
。A 和 C 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpSyevd_bufferSize
#
cusolverStatus_t cusolverMpSyevd_bufferSize(
cusolverMpHandle_t handle,
char *jobz,
cublasFillMode_t uplo,
int64_t N,
void *d_A,
int64_t IA,
int64_t JA,
const cusolverMpMatrixDescriptor_t descrA,
void *d_d,
void *d_Z,
int64_t IZ,
int64_t JZ,
const cusolverMpMatrixDescriptor_t descrZ,
cudaDataType_t computeType,
size_t *workspaceInBytesOnDevice,
size_t *workspaceInBytesOnHost)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
jobz |
主机 |
输入 |
如果 |
uplo |
主机 |
输入 |
指示 sub(A) 的上三角或下三角部分用于计算特征解。 |
N |
主机 |
输入 |
N |
d_A |
设备 |
输入 |
指向维度为 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
IA |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
d_d |
设备 |
输入 |
指向维度为全局大小 |
d_Z |
设备 |
输入 |
指向维度为 |
IZ |
主机 |
输入 |
sub(Z) 的第一行的行索引。 |
JZ |
主机 |
输入 |
sub(Z) 的第一列的列索引。 |
descrZ |
主机 |
输入 |
与全局矩阵 Z 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
workspaceInBytesOnDevice |
主机 |
输出 |
cusolverMpSyevd() 所需的本地设备工作空间的大小(以字节为单位)。 |
workspaceInBytesOnHost |
主机 |
输出 |
cusolverMpSyevd() 所需的本地主机工作空间的大小(以字节为单位)。 |
A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpSygst
#
cusolverStatus_t cusolverMpSygst(
cusolverMpHandle_t handle,
cusolverEigType_t ibtype,
cublasFillMode_t uplo,
int64_t N,
void *d_A,
int64_t IA,
int64_t JA,
cusolverMpMatrixDescriptor_t descrA,
const void *d_B,
int64_t IB,
int64_t JB,
cusolverMpMatrixDescriptor_t descrB,
cudaDataType_t computeType,
void *d_work,
size_t workspaceInBytesOnDevice,
void *h_work,
size_t workspaceInBytesOnHost,
int *info)
ibtype = CUSOLVER_EIG_TYPE_1
:问题是 sub(A)*x = lambda*sub(B)*x,sub(A) 被 inv(L)*sub(A)*inv(L^H) 或 inv(U^H)*sub(A)*inv(U) 覆盖。
ibtype = CUSOLVER_EIG_TYPE_2 or 3
:问题是 sub(A)*sub(B)*x = lambda*x 或 sub(B)*sub(A)*x = lambda*x,sub(A) 被 L^H*sub(A)*L 或 U*sub(A)*U^H 覆盖。
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
ibtype |
主机 |
输入 |
指示特征值问题类型 sub(A)*x=(lambda)*sub(B)*x、sub(A)*sub(B)x=(lambda)*x 或 sub(B)*sub(A)*x=(lambda)*x。 |
uplo |
主机 |
输入 |
指示 sub(A) 和 sub(B) 的下三角 |
N |
主机 |
输入 |
sub(A) 和 sub(B) 的行数和列数。 |
d_A |
设备 |
输入/输出 |
指向维度为 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
sub(A) 的第一列的列索引。 |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
d_B |
设备 |
输入 |
指向维度为 |
IB |
主机 |
输入 |
sub(B) 的第一行的行索引。 |
JB |
主机 |
输入 |
sub(B) 的第一列的列索引。 |
descrB |
主机 |
输入 |
与全局矩阵 B 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
d_work |
设备 |
输出 |
设备工作区,大小为 |
workspaceInBytesOnDevice |
主机 |
输入 |
cusolverMpSygst() 所需的本地设备工作空间的大小(以字节为单位)。 |
h_work |
主机 |
输出 |
主机工作区,大小为 |
workspaceInBytesOnHost |
主机 |
输入 |
cusolverMpSygst() 所需的本地主机工作空间的大小(以字节为单位)。 |
info |
设备 |
输出 |
|
矩阵 A 和 B 使用相同的正方形块大小
(MB == NB)
。A 和 B 的起始行和列彼此对齐,即
(IA == IB)
和(JA == JB
。
ibtype = CUSOLVER_EIG_TYPE_1
、uplo = CUBLAS_FILL_MODE_LOWER
的输入。A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpSygst_bufferSize
#
cusolverStatus_t cusolverMpSygst_bufferSize(
cusolverMpHandle_t handle,
cusolverEigType_t ibtype,
cublasFillMode_t uplo,
int64_t N,
int64_t IA,
int64_t JA,
cusolverMpMatrixDescriptor_t descrA,
int64_t IB,
int64_t JB,
cusolverMpMatrixDescriptor_t descrB,
cudaDataType_t computeType,
size_t *workspaceInBytesOnDevice,
size_t *workspaceInBytesOnHost)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
ibtype |
主机 |
输入 |
指示特征值问题类型 sub(A)*x=(lambda)*sub(B)*x、sub(A)*sub(B)x=(lambda)*x 或 sub(B)*sub(A)*x=(lambda)*x。 |
uplo |
主机 |
输入 |
指示 sub(A) 和 sub(B) 的下三角 |
N |
主机 |
输入 |
sub(A) 和 sub(B) 的行数和列数。 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
sub(A) 的第一列的列索引。 |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
IB |
主机 |
输入 |
sub(B) 的第一行的行索引。 |
JB |
主机 |
输入 |
sub(B) 的第一列的列索引。 |
descrB |
主机 |
输入 |
与全局矩阵 B 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
workspaceInBytesOnDevice |
主机 |
输出 |
cusolverMpSygst() 所需的本地设备工作空间的大小(以字节为单位)。 |
workspaceInBytesOnHost |
主机 |
输出 |
cusolverMpSygst() 所需的本地主机工作空间的大小(以字节为单位)。 |
矩阵 A 和 B 使用相同的正方形块大小
(MB == NB)
。A 和 B 的起始行和列彼此对齐,即
(IA == IB)
和(JA == JB
。
ibtype = CUSOLVER_EIG_TYPE_1
、uplo = CUBLAS_FILL_MODE_LOWER
的输入。A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpSygvd
#
cusolverStatus_t cusolverMpSygvd(
cusolverMpHandle_t handle,
cusolverEigType_t ibtype,
cusolverEigMode_t jobz,
cublasFillMode_t uplo,
int64_t N,
void *d_A,
int64_t IA,
int64_t JA,
cusolverMpMatrixDescriptor_t descrA,
void *d_B,
int64_t IB,
int64_t JB,
cusolverMpMatrixDescriptor_t descrB,
void *d_d,
void *d_Z,
int64_t IZ,
int64_t JZ,
cusolverMpMatrixDescriptor_t descrZ,
cudaDataType_t computeType,
void *d_work,
size_t workspaceInBytesOnDevice,
void *h_work,
size_t workspaceInBytesOnHost,
int *info)
ibtype = CUSOLVER_EIG_TYPE_1
:问题是 sub(A)*x = lambda*sub(B)*x。
ibtype = CUSOLVER_EIG_TYPE_2
:问题是 sub(A)*sub(B)*x = lambda*x。
ibtype = CUSOLVER_EIG_TYPE_3
:问题是 sub(B)*sub(A)*x = lambda*x。
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
ibtype |
主机 |
输入 |
指示特征值问题类型 sub(A)*x=(lambda)*sub(B)*x、sub(A)*sub(B)x=(lambda)*x 或 sub(B)*sub(A)*x=(lambda)*x。 |
jobz |
主机 |
输入 |
指示例程是仅计算特征值 |
uplo |
主机 |
输入 |
指示 sub(A) 和 sub(B) 的下三角 |
N |
主机 |
输入 |
sub(A) 和 sub(B) 的行数和列数。 |
d_A |
设备 |
输入/输出 |
指向本地内存的指针,该内存指向维度为 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
sub(A) 的第一列的列索引。 |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
d_B |
设备 |
输入/输出 |
指向本地内存的指针,该内存指向维度为 |
IB |
主机 |
输入 |
sub(B) 的第一行的行索引。 |
JB |
主机 |
输入 |
sub(B) 的第一列的列索引。 |
descrB |
主机 |
输入 |
与全局矩阵 B 关联的矩阵描述符。 |
d_d |
设备 |
输出 |
指向维度为全局大小 |
d_Z |
设备 |
输出 |
指向维度为 |
IZ |
主机 |
输入 |
sub(Z) 的第一行的行索引。 |
JZ |
主机 |
输入 |
sub(Z) 的第一列的列索引。 |
descrZ |
主机 |
输入 |
与全局矩阵 Z 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
d_work |
设备 |
输出 |
设备工作区,大小为 |
workspaceInBytesOnDevice |
主机 |
输出 |
cusolverMpSygvd() 所需的本地设备工作空间的大小(以字节为单位)。 |
h_work |
主机 |
输出 |
主机工作区,大小为 |
workspaceInBytesOnHost |
主机 |
输出 |
cusolverMpSygvd() 所需的本地主机工作空间的大小(以字节为单位)。 |
info |
设备 |
输出 |
|
矩阵 A、B 和 Z 使用相同的正方形分块大小
(MB == NB)
。A、B 和 Z 的起始行和列彼此对齐,即
(IA == IB == IZ)
和(JA == JB == JZ
。
ibtype = CUSOLVER_EIG_TYPE_1
、jobz = CUSOLVER_EIG_MODE_VECTOR
、uplo = CUBLAS_FILL_MODE_LOWER
的输入。A 和 C 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |
cusolverMpSygvd_bufferSize
#
cusolverStatus_t cusolverMpSygvd_bufferSize(
cusolverMpHandle_t handle,
cusolverEigType_t ibtype,
cusolverEigMode_t jobz,
cublasFillMode_t uplo,
int64_t N,
int64_t IA,
int64_t JA,
cusolverMpMatrixDescriptor_t descrA,
int64_t IB,
int64_t JB,
cusolverMpMatrixDescriptor_t descrB,
int64_t IZ,
int64_t JZ,
cusolverMpMatrixDescriptor_t descrZ,
cudaDataType_t computeType,
size_t *workspaceInBytesOnDevice,
size_t *workspaceInBytesOnHost)
参数 |
内存 |
输入/输出 |
描述 |
---|---|---|---|
handle |
主机 |
输入 |
cuSOLVERMp 库句柄。 |
ibtype |
主机 |
输入 |
指示特征值问题类型 sub(A)*x=(lambda)*sub(B)*x、sub(A)*sub(B)x=(lambda)*x 或 sub(B)*sub(A)*x=(lambda)*x。 |
jobz |
主机 |
输入 |
指示例程是仅计算特征值 |
uplo |
主机 |
输入 |
指示 sub(A) 和 sub(B) 的下三角 |
N |
主机 |
输入 |
sub(A) 和 sub(B) 的行数和列数。 |
IA |
主机 |
输入 |
指向本地内存的指针,指向维度为 |
JA |
主机 |
输入 |
sub(A) 的第一列的列索引。 |
descrA |
主机 |
输入 |
sub(A) 的第一行的行索引。 |
IB |
主机 |
输入 |
sub(B) 的第一行的行索引。 |
JB |
主机 |
输入 |
sub(B) 的第一列的列索引。 |
descrB |
主机 |
输入 |
与全局矩阵 B 关联的矩阵描述符。 |
IZ |
主机 |
输入 |
sub(Z) 的第一行的行索引。 |
JZ |
主机 |
输入 |
sub(Z) 的第一列的列索引。 |
descrZ |
主机 |
输入 |
与全局矩阵 Z 关联的矩阵描述符。 |
computeType |
主机 |
输入 |
用于计算的数据类型。有关支持的组合,请参见下表。 |
workspaceInBytesOnDevice |
主机 |
输出 |
cusolverMpSygvd() 所需的本地设备工作空间的大小(以字节为单位)。 |
workspaceInBytesOnHost |
主机 |
输出 |
cusolverMpSygvd() 所需的本地主机工作空间的大小(以字节为单位)。 |
矩阵 A、B 和 Z 使用相同的正方形分块大小
(MB == NB)
。A、B 和 Z 的起始行和列彼此对齐,即
(IA == IB == IZ)
和(JA == JB == JZ
。
ibtype = CUSOLVER_EIG_TYPE_1
、jobz = CUSOLVER_EIG_MODE_VECTOR
、uplo = CUBLAS_FILL_MODE_LOWER
的输入。A 的数据类型 |
computeType |
输出数据类型 |
---|---|---|
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_32F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_R_64F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_32F |
CUDA_C_64F |
CUDA_C_64F |
CUDA_C_64F |