问题标签 [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.

0 投票
1 回答
482 浏览

cuda - 错误:不支持外部调用(发现对 cublasGetVersion_v2 的非内联调用)

我正在尝试使用调用 cublasIdamax() 但我遇到了类似标题的错误。所以我写了一个简单的代码来验证cublas的版本,以避免函数签名中的版本错误。但即使是这个简单的代码也会导致编译错误。

这是我的代码:

我在第 3 行出现以下错误:不支持外部调用(发现对 cublasGetVersion_v2 的非内联调用)

我做错了什么?

PS.:我看了这个主题 https://devtalk.nvidia.com/default/topic/500814/external-calls-are-not-supported-found-non-inlined-call-to-meminit-/ 但我仍然有问题。

0 投票
1 回答
1506 浏览

cuda - 使用 cudaMemCpy 代替 cublasSetMatrix 和 cublasSetVector

我编写了一个应用程序,它使用 cudaMalloc/cudaMemcpy 在设备上分配一个矩阵和一个向量。矩阵被定义为列优先。我现在想使用 cublas 库 (cublasSgemv) 中的一个函数将它们相乘。看来我必须使用 cudaMalloc 分配矩阵和向量的副本,并使用 cublasSetMatrix/cublasSetVector 从主机初始化它们才能使用 cublas API 函数。显然,复制所有这些内存将是昂贵的。

据我了解,cublasSetMatrix/cublasSetVector 函数只是 cudaMemCpy 的轻包装。我想知道是否可以将指向用 cudaMemCpy 初始化的数组的指针传递给 cublas API 函数?或者,是否有可能以 API 能够识别的方式轻轻包装数组,这样我就可以避免所有的内存重复?

0 投票
1 回答
1055 浏览

c - cublasStrsmBatched - execution failed

I can't run cublasStrsmBatched (line 113) without CUBLAS_STATUS_EXECUTION_FAILED (13) output. To simplify, all matrix values and alpha are 1.0, all matrices are square and lda, ldb, m and n are equal. I am able to run cublasSgemmBatched and cublasStrsm in the same way, with no error. cublasStrsmBatched should be the same, but it is not, not for me. Please tell me if you have any idea about what am I doing wrong in this code:

Using Linux, CUDA 5.5, T10 and Windows, CUDA 5.5, GTX285

Thanks!

0 投票
1 回答
291 浏览

c++ - cublas 设备 api 输出奇怪的结果

大家:最近尝试利用cuda 5.5最新的特性来编程,即动态并行。但我有一些非常令人困惑的问题。我的代码在这里:



如果我将配置参数设置为 <<<1, 1>>>,一切正常。输出是这样的:

位置 1 中 d_A 的前 10 个元素是:

0.840188 0.394383 0.783099 0.798440 0.911647 0.197551 0.335223 0.768230 0.277775 0.553970

位置 2 中 d_A 的前 10 个元素是:

0.840188 0.394383 0.783099 0.798440 0.911647 0.197551 0.335223 0.768230 0.277775 0.553970

但是,如果我将配置参数设置为 <<<32768, 128>>>,则输出很奇怪。输出是这样的:

位置 1 中 d_A 的前 10 个元素是:

-0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000

位置 2 中 d_A 的前 10 个元素是:

0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000

我真的不知道为什么!我的代码只是来自“样本”,稍作改动。


然后我把最后一个代码“cublasDestroy(cnpHandle);”删掉,就正常了。输出是:

位置 1 中 d_A 的前 10 个元素是:

0.840188 0.394383 0.783099 0.798440 0.911647 0.197551 0.335223 0.768230 0.277775 0.553970

位置 2 中 d_A 的前 10 个元素是:

0.840188 0.394383 0.783099 0.798440 0.911647 0.197551 0.335223 0.768230 0.277775 0.553970


有人有同样的问题吗?

谢谢!

0 投票
1 回答
144 浏览

matrix - Cublas_Dgemm() 没有给我我所期望的

我在一个小矩阵上尝试了库函数 Cublas_Dgemm(),但它并没有给我我所期望的。

所以我通过以下方式声明和初始化矩阵:

只是为了记录,我也试过

在哪里

这给了我:

萨:

1.00 2.00 3.00
3.00 2.00 3.00

某人:

1.00 2.00
3.00 2.00
3.00 4.00

然后我在 GPU 上分配内存如下:

但是,当我打印矩阵 Sc 时,我得到了

sc:

16.00 18.00
23.00 26.00

当它应该是(根据matlab):

16.00 18.00
18.00 22.00

我不确定为什么我会得到这个错误的答案,有人会发现我可能犯的错误吗?谢谢吨!

0 投票
1 回答
534 浏览

cuda - cuda 运行时 api 和动态内核定义

使用驱动程序 api 会阻止在同一应用程序中使用运行时 api ([1])。不幸的是,cublas、cufft 等都是基于运行时 api。如果想要同时在 cuModuleLoad 和 cublas 中定义动态内核,有哪些选择?我有这些,但也许还有更多:

A. 等待传闻支持驱动程序和运行时 API 在同一应用程序中和平共存的计算能力 3.5。

B. 将内核编译为 .so 文件并 dlopen。他们会在 dlcose 上卸载吗?

C. 尝试使用驱动程序 api 中的 cuModuleLoad,但其他一切都来自运行时 api。不知道这是否有任何希望。

我没有屏住呼吸,因为 jcuda 或 pycuda 几乎处于相同的状态,他们可能已经知道了。

[1] CUDA 驱动程序 API 与 CUDA 运行时

0 投票
1 回答
1282 浏览

cuda - CUDA 动态并行化;来自设备的流同步

我基本上是在寻找一种从设备内部同步流的方法。我想避免使用 cudaDeviceSynchronize(),因为它会序列化我想要使用流同时执行的内核的执行;

更详细的描述:我写了一个内核,它是一个稳定的双共轭梯度求解器。我想使用流同时在不同的数据上午餐这个内核。

该内核使用 cublas 函数。它们是从内核中调用的。

求解器所需的操作之一是计算两个向量的点积。这可以通过 cublasdot() 来完成。但是由于这个调用是同步的,内核在不同流中的执行会被序列化。我没有调用点积函数,而是使用异步调用的 cublasspmv() 计算点积。问题是这个函数在计算结果之前返回。因此,我想从设备同步流 - 我正在寻找一个等效的 cudaStreamSynchronize() 但可从设备调用。

我可以做些什么来确保在函数返回之前计算结果?当然插入 cudaDeviceSynchronize() 是可行的,但正如我所提到的,它会跨流序列化我的内核的执行。

0 投票
2 回答
2286 浏览

cuda - 我们应该在不同的调用中重用 cublasHandle_t 吗?

我正在使用最新版本的 CUDA 5.5,而新的 CUBLAS 有一个有状态的品味,其中每个功能都需要一个cublasHandle_t例如

像某种 a 一样尽可能多地重用这个句柄实例是一种好习惯吗,Session或者性能影响会很小,以至于通过拥有短暂的句柄实例来降低代码复杂性更有意义,因此可以连续创建/销毁它?

0 投票
3 回答
1612 浏览

cuda - 是否有 cuda 函数可以从主要列的矩阵中复制一行?

我在列主要排序中有一个尺寸为 MxN 的设备矩阵 U。现在我想将第 K 行提取到向量 u 中。有没有实现这个功能的功能?请注意,副本需要考虑 K 的偏移量和 M 的步幅。

我正在查看函数cudaMemcpy2D但它没有响铃,来自更 LAPACK 风格的 API 我不明白这些音高参数是什么,为什么不将它们简单地称为行和列或 M 和 N?

0 投票
1 回答
800 浏览

matrix - cublas cublasDgetrfBatched() 批量 LU 分解不适用于大于 32x32 的矩阵

我为 Matlab 编写了一个 cuda 函数,以使用 cublasDgetrfBatched() 对一批矩阵进行 LU 分解。这个函数的工具包文档在这里

它适用于最大为 32x32 的矩阵。但是对于更大的矩阵,它会以状态码 CUBLAS_STATUS_INVALID_VALUE 失败。下面是我的源代码(gpuBatchedLU.cu):

我编译如下:

我从 MATLAB 打电话:

我将 Matlab R2013b 与并行工具箱、Cuda 5.5 和 NVS 5200M 图形芯片一起使用。

任何人都可以复制这个问题吗?我将不胜感激有关如何解决此问题的任何建议。