问题标签 [cublas]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asynchronous - 异步 cuBLAS 调用
我想异步调用 cuBLAS 例程。是否可以?如果是,我该如何实现?
cuda - 相当于 cuBLAS 的 cudaGetErrorString?
CUDA 运行时有一个方便的函数cudaGetErrorString(cudaError_t error)
,可以将错误枚举转换为可读字符串。cudaGetErrorString
用于CUDA_SAFE_CALL(someCudaFunction())
许多人用于 CUDA 错误处理的宏中。
我现在正在熟悉 cuBLAS,我想创建一个类似于CUDA_SAFE_CALL
cuBLAS 的宏。为了使我的宏的打印输出有用,我想有一些类似于cudaGetErrorString
cuBLAS 的东西。
cudaGetErrorString()
在 cuBLAS 中是否有等价物?或者,有没有任何 cuBLAS 用户编写过这样的函数?
performance - cuBLAS 性能
我使用 CUDA 5.0,我想比较 C 和 cuBLAS 中的矩阵乘法。我已经编写了一个程序,其中 C 和 cuBLAS 中的矩阵乘法都给出了正确的答案。
现在我想比较他们的表现。对于在 C 中的实现,我使用了clock()
.c,但我发现 cutil 在 CUDA 5.0 中不存在,所以我使用了cudaEvent
. 两种实现都使用相同的矩阵,在 C 中,我只是测量了 C 进行矩阵乘法的时间,而在 cuBLAS 中,我从 until 开始createhandle
测量destroyhandle
。
我得到了这个结果:
当C只用了0.08ms,cuBLAS用了59ms,然后我用clock()
cuBLAS测时间,cuBLAS变得比C快。不知道我用的测时间的方法是否正确。为什么要cudaevent
给出clock()
不同的答案?
我只是按照 Nvidia 的文档使用 cuBLAS、cudaevent。我真的很困惑如何正确测量时间。
cuda - 为什么 cublasGetVector 得到这个结果?
很难理解数组(维度)是如何在 cublas 中组织的。做了以下测试,但输出无法解释。谢谢你的帮助!
输出:
你好世界!之前:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 之后:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
cuda - cusparse csrsvanalysis 有时有效,有时失败
我正在尝试使用预条件共轭梯度来解决 Ax=b。因此,我以 cuda-sdk 给出的示例为例。有时,当我调用该函数时cusparseScsrsv_analysis
,它会返回错误 6,即“执行失败”。有时,它有效。
矩阵 A 是对称正定矩阵。
此外,共轭梯度在相同的数据上也能正常工作。
这是我的代码:
N 是列数和行数,nnz 是非零元素的数量。我的矩阵是 csr 格式。
编辑:我没有看到任何特殊要求。我不认为这是由于内存造成的,我有超过 2GB 的空间,而且我没有使用大矩阵(48MB)。
我尝试了使用 jacobi precondionner 的预处理共轭梯度,它也可以正常工作,但是如果我尝试使用 cusparse 进行分析,它会失败一半。
我想要的是使用 cusparse 和 cublas 使用Maxim Noumov 的算法( http://developer.download.nvidia.com/compute/DevZone/docs/html/CUDALibraries/doc/Precondition_Iterative_Methods_White_Paper.pdf )。
编辑2:
我需要一些关于 curspace 的解释。如果我在描述符中放入这一行:cusparseSetMatType(descr,CUSPARSE_MATRIX_TYPE_SYMMETRIC);
分析有效,但奇怪的是我不仅存储了整个矩阵的上部或下部。如果我把cusparseSetMatType(descr,CUSPARSE_MATRIX_TYPE_GENERAL);
,它不起作用。此外,我不明白为什么我必须存储在dev_row_ptr
m+1 元素中,其中 m 是行数。我在最后一个元素中放了什么?
其他问题:该函数cusparseScsric0
将整个矩阵作为输入的矩阵值(文档中的 csrValM)作为输入/输出,仅将不完整的 CHolesky 上三角或下三角作为输出。它是如何工作的 ?
cuda - cublas 可以进行固定内存分配吗?
我知道“cudaHostAlloc”分配的固定内存可以比“malloc”内存更有效地传输到设备。但是,我认为“cudaHostAlloc”只能由 cuda 编译器编译。我的场景是在没有 cuda 编译器的情况下使用 cublas API,而且似乎 cublas 没有提供手册中用于固定内存分配的功能,或者我错过了一些东西......
cuda - 在 cublas-4.1.28 中,函数参数是否有约定更改?
我想使用 cublas 进行以下矩阵-矩阵乘法:
我将 cA 指定为 K 作为前导索引,并将 cB 指定为 N 作为前导索引。根据 cublas-4.0 手册,我应该这样做:
但它没有用。相反,以下代码通过字面转换 cA 和 cB 来产生预期的结果:
我使用的 cublas 版本是 4.1.28。函数参数是否有约定更改?谢谢!
parallel-processing - CUDA 内核可以调用 cublas 函数吗?
我知道这听起来很奇怪,但这是我的场景:
我需要进行矩阵-矩阵乘法 (A(n*k)*B(k*n)),但我只需要为输出矩阵评估对角线元素。我搜索了 cublas 库,没有找到任何可以做到这一点的 2 级或 3 级函数。因此,我决定将 A 的每一行和 B 的每一列分配到 CUDA 线程中。对于每个线程(idx),我需要计算点积“A[idx,:]*B[:,idx]”并将其保存为对应的对角线输出。现在因为这个点积也需要一些时间,我想知道我是否可以在这里调用 cublas 函数(比如 cublasSdot)来实现它。
如果我错过了一些可以直接实现我的目标的 cublas 函数(仅计算矩阵-矩阵乘法的对角线元素),则可以丢弃这个问题。
cublas - cublas 内核函数会自动与主机同步吗?
只是关于cublas的一般问题。对于单线程,如果没有从 GPU 到 CPU 的内存传输(例如 cublasGetVector),那么 cublas 内核函数(例如 cublasDgemm)会自动与主机同步吗?
此外,在两个相邻的内核调用之间呢?
并且,不涉及先前内核中使用的全局内存的同步传输呢?
cuda - cuBLAS argmin -- 如果输出到设备内存,会出现段错误?
在 cuBLAS 中,cublasIsamin()
给出单精度数组的 argmin。
这是完整的函数声明:cublasStatus_t cublasIsamin(cublasHandle_t handle, int n,
const float *x, int incx, int *result)
cuBLAS 程序员指南提供了有关cublasIsamin()
参数的信息:
如果我将主机(CPU)内存用于result
,则cublasIsamin
可以正常工作。这是一个例子:
但是,如果我将设备(GPU) 内存用于result
,则会cublasIsamin
出现段错误。这是一个段错误的示例:
Nvidia 指南说 `cublasIsamin()` 可以输出到设备内存。我究竟做错了什么?
动机:我想在多个流中同时计算多个向量的 argmin()。输出到主机内存需要 CPU-GPU 同步,并且似乎会杀死多内核并发。所以,我想将 argmin 输出到设备内存。