zoukankan      html  css  js  c++  java
  • 常用CULA实例

      CULA 安装包里包含了几个例子,用来显示如何使用CULA.这些例子放在‘examples’ 目录里.
    这里列出几个常用的,使用CULA函数的例子.  
    Initialization and Shutdown

    #include <cula.h>
    
    culaStatus s;
    
    s = culaInitialize();
    if(s != culaNoError)
    {
        printf("%s\n", culaGetErrorString(s));
        /* ... Error Handling ... */
    }
    
    /* ... Your code ... */
    
    culaShutdown();
    

     Argument Errors 

    #include <cula.h>
    
    culaStatus s;
    
    s = culaSgeqrf(-1, -1, NULL, -1, NULL); /* obviously wrong */
    if(s != culaNoError)
    {
        if(s == culaArgumentError)
            printf("Argument %d has an illegal value\n", culaGetErrorInfo());
        else
            printf("%s\n", culaGetErrorString(s));
    }
    

     Data Errors

    #include <cula.h>
    
    float* A = malloc(20*20*sizeof(float));
    memset(A, 0, 20*20*sizeof(float)); /* singular matrix, illegal for LU (getrf) */
    int ipiv[20];
    s = culaSgetrf(20, 20, A, 20, ipiv);
    if( s != culaNoError )
    {
        if( s == culaDataError )
            printf("Data error with code %d, please see LAPACK documentation\n",
                culaGetErrorInfo());
        else
            printf("%s\n", culaGetErrorString(s));
    }
    

     Printing Errors to the Console

    #include <cula.h>
    
    culaStatus s;
    int info;
    char buf[256];
    
    s = <cula function>;
    
    if( s != culaNoError )
    {
        info = culaGetErrorInfo();
        culaGetErrorInfoString(s, info, buf, sizeof(buf));
    
        printf("%s", buf);
    }
    

     使用 C++ 接口

    #include <cula.hpp>
    
    template<class T>
    void GenericLU(T* A, int N) // type of T will be determined by the compiler
    {
        std::vector<int> piv(N);
    
        // no need for type specifier - determined automatically on overloads
        culaStatus s = culaGetrf(N, N, A, N, &ipiv[0]);
    
        // check errors
    }
    

     检查有没有正确连接到库 

    #include <cula.h>
    
    int MeetsMinimumCulaRequirements()
    {
        int cudaMinimumVersion = culaGetCudaMinimumVersion();
        int cudaRuntimeVersion = culaGetCudaRuntimeVersion();
        int cudaDriverVersion = culaGetCudaDriverVersion();
        int cublasMinimumVersion = culaGetCublasMinimumVersion();
        int cublasRuntimeVersion = culaGetCublasRuntimeVersion();
    
        if(cudaRuntimeVersion < cudaMinimumVersion)
        {
            printf("CUDA runtime version is insufficient; "
                   "version %d or greater is required\n", cudaMinimumVersion);
            return 0;
        }
    
        if(cudaDriverVersion < cudaMinimumVersion)
        {
            printf("CUDA driver version is insufficient; "
                   "version %d or greater is required\n", cudaMinimumVersion);
            return 0;
        }
    
        if(cublasRuntimeVersion < cublasMinimumVersion)
        {
            printf("CUBLAS runtime version is insufficient; "
                   "version %d or greater is required\n", cublasMinimumVersion);
            return 0;
        }
    
        return 1;
    }
    
  • 相关阅读:
    Ceph14.2.5 RBD块存储的实战配置和详细介绍,不看后悔! -- <3>
    常见SQL命令总结学习 -- <1>
    全网最详细的新手入门Mysql命令和基础,小白必看!
    全网最详细的Linux命令系列-nl命令
    全网最详细的Linux命令系列-cat命令
    全网最详细的Linux命令系列-touch命令
    全网最详细的Ceph14.2.5集群部署及配置文件详解,快来看看吧! -- <2>
    什么是Ceph存储?什么是分布式存储?简单明了带你学Ceph -- <1>
    一款专注于阅读的博客园主题-(cnblogs-theme-silence)
    Prometheus 配置文件中 metric_relabel_configs 配置--转载
  • 原文地址:https://www.cnblogs.com/gpus/p/2478161.html
Copyright © 2011-2022 走看看