测试 cusolver 是否必须设置 stream

首先,在cublas的官方文档中有强调,如果不设置流,那么cublas将使用默认流,即 NULL 流; 但是cusolver的文档中没有强调这个事儿,但是,其实cusolver底层是cublas和cusparse,而且cusolver会把自己的流同时设置给cublas,所以,既然cublas在这种情况下使用了NULL流,那么可以期待cusolver也使用了 NULL 流。

但还是稍微测试一下为好。

cusolverDnCreate之后,如果不调用 cusolverSetStream,那么,cusolver的这个handle是否可以被正常使用来调用cusolver的Math API 呢?

1,不设置时会Get到 NULL stream

测试源码

#include <cuda_runtime.h>
#include <cublas_v2.h>
#include <cusolverDn.h>

int main()
{
        cusolverDnHandle_t handle;
        cublasHandle_t cublasHandle;
        cudaStream_t stream;

        cusolverDnCreate(&handle);
        cublasCreate(&cublasHandle);
        //cudaStreamCreate(&stream);

        //LL::cusolverDnSetStream(handle, stream);
        //LL::cublasSetStream(cublasHandle, stream);
        cudaStream_t blas_stream;
        cublasGetStream(cublasHandle, &blas_stream);
        printf("blas_stream = %p\n", blas_stream);
        cudaStream_t solver_stream;
        cusolverDnGetStream(handle, &solver_stream);
        printf("solver_stream = %p\n", solver_stream);

        return 0;
}

编译命令:

$ g++ hello.cpp -I /usr/local/cuda/include -L /usr/local/cuda/lib64 -lcudart -lcublas -l cusolver

运行效果:

结论:

Get到的stream都是NULL指针,即,cublas和cusolver都会使用默认stream;

2,cusolver在不设置stream时能正常工作

测试源代码:

https://github.com/NVIDIA/cuda-samples/blob/v11.4/Samples/cuSolverDn_LinearSolver/cuSolverDn_LinearSolver.cpp

将上述示例中的SetStream的两行注释掉,依然可以正常工作:

没有注释掉Set效果图:

没注释掉Set的运行结果:

注释掉了Set效果图:

注释掉Set的效果图:

不注释时,stream指针非0,

注释掉时,stream指针为0;

但计算结果和运行时间结果完全一致;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值