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;
    }
    
  • 相关阅读:
    我参与过的开源项目
    chineking / WeiboCrawler / wiki / Home — Bitbucket
    PIL应用之生成验证码图片
    hurl
    Hadoop笔记之安装及伪分布式模式配置
    httpbin(1): HTTP Client Testing Service
    动态规划求编辑距离 残阳似血的博客
    cppreference.com
    sscanf
    在python中定义二维数组
  • 原文地址:https://www.cnblogs.com/gpus/p/2478161.html
Copyright © 2011-2022 走看看