从源代码安装 rocSOLVER 并 调试 rocSOLVER 在 Ubuntu 22.04 平台

news2025/1/19 14:21:03

0, 下载并编译 rocBLAS 的调试版本

sudo apt install python3.10-venv
sudo apt install libmsgpack-dev
sudo pip install joblib

git clone --recursive  https://github.com/ROCm/rocBLAS.git
$ cd rocBLAS/
$ ./install.sh -i -g

构建时间也不短

        

1,下载并编译 rocSolver 的调试版本

git clone --recursive git@github.com:ROCm/rocSOLVER.git
cd rocSOLVER/
~/ex_rocm/rocSOLVER$ ./install.sh -i -g   --install_dir ../local/  --rocblas_dir /opt/rocm/lib

这个编译时间真的长,3个小时的样子,主要是99%后花了两个小时多,跟计算机性能关系不大。

2,编译app源代码

ex_rocsolver_dgeqrf.cpp

/
// example.cpp source code //
/
 
#include <algorithm> // for std::min
#include <stddef.h>  // for size_t
#include <stdio.h>
#include <vector>
#include <hip/hip_runtime_api.h> // for hip functions
#include <rocsolver/rocsolver.h> // for all the rocsolver C interfaces and type declarations
 
void init_vector(double* A, int n)
{
  for(int i=0; i<n; i++)
    A[i] = (rand()%2000)/1000.0;
}
 
void print_matrix(double* A, int M, int N, int lda)
{
  for(int i=0; i<M; i++)
  {
    for(int j=0; j<N; j++)
    {
      printf("%7.4f, ", A[i + j*lda]);
    }
    printf("\n");
  }
 
}
 
int main() {
  rocblas_int M = 7;
  rocblas_int N = 7;
  rocblas_int lda = M;
 
  // here is where you would initialize M, N and lda with desired values
 
  rocblas_handle handle;
  rocblas_create_handle(&handle);
 
  size_t size_A = size_t(lda) * N;          // the size of the array for the matrix
  size_t size_piv = size_t(std::min(M, N)); // the size of array for the Householder scalars
 
  std::vector<double> hA(size_A);      // creates array for matrix in CPU
  std::vector<double> hIpiv(size_piv); // creates array for householder scalars in CPU
 
  init_vector(hA.data(), size_A);
  memset(hIpiv.data(), 0, size_piv*sizeof(double));
 
  print_matrix(hA.data(), M, N, lda);
 
  double *dA, *dIpiv;
  hipMalloc(&dA, sizeof(double)*size_A);      // allocates memory for matrix in GPU
  hipMalloc(&dIpiv, sizeof(double)*size_piv); // allocates memory for scalars in GPU
 
  // here is where you would initialize matrix A (array hA) with input data
  // note: matrices must be stored in column major format,
  //       i.e. entry (i,j) should be accessed by hA[i + j*lda]
 
  // copy data to GPU
  hipMemcpy(dA, hA.data(), sizeof(double)*size_A, hipMemcpyHostToDevice);
  // compute the QR factorization on the GPU
  rocsolver_dgeqrf(handle, M, N, dA, lda, dIpiv);
  // copy the results back to CPU
  hipMemcpy(hA.data(), dA, sizeof(double)*size_A, hipMemcpyDeviceToHost);
  hipMemcpy(hIpiv.data(), dIpiv, sizeof(double)*size_piv, hipMemcpyDeviceToHost);
 
  printf("\nR =\n");
  print_matrix(hA.data(), M, N, lda);
  printf("\ntau=\n");
  print_matrix(hIpiv.data(), 1, N, 1);
 
  // the results are now in hA and hIpiv, so you can use them here
 
  hipFree(dA);                        // de-allocate GPU memory
  hipFree(dIpiv);
  rocblas_destroy_handle(handle);     // destroy handle
}

Makefile

EXE := ex_rocsolver_dgeqrf
 
all: $(EXE)
 
INC :=  -I /home/hipper/ex_rocm/rocSOLVER/build/debug/rocsolver-install/include/rocsolver  -D__HIP_PLATFORM_AMD__
LD_FLAGS := -L /home/hipper/ex_rocm/rocSOLVER/build/debug/rocsolver-install/lib -lamdhip64 -lrocblas -lrocsolver
 
ex_rocsolver_dgeqrf.o: ex_rocsolver_dgeqrf.cpp
        g++ -g $< $(INC) -c -o $@
 
ex_rocsolver_dgeqrf: ex_rocsolver_dgeqrf.o
        g++ -g $< $(LD_FLAGS) -o $@
 
 
.PHONY: clean
clean:
        ${RM} *.o $(EXE)

3,运行调试

export LD_LIBRARY_PATH=/home/hipper/ex_rocm/rocSOLVER/build/debug/rocsolver-install/lib

$ gdb ./ex_rocsolver_dgeqrf

37            ROCSOLVER_LAUNCH_KERNEL(set_diag<T>, dim3(batch_count, 1, 1), dim3(1, 1, 1), 0, stream,
(gdb)
137            ROCSOLVER_LAUNCH_KERNEL(set_diag<T>, dim3(batch_count, 1, 1), dim3(1, 1, 1), 0, stream,
(gdb)
145            if(j < n - 1)
(gdb)
147                rocsolver_larf_template(handle, rocblas_side_left, m - j, n - j - 1, A,
(gdb)
154            ROCSOLVER_LAUNCH_KERNEL(restore_diag<T>, dim3(batch_count, 1, 1), dim3(1, 1, 1), 0, stream,
(gdb)
154            ROCSOLVER_LAUNCH_KERNEL(restore_diag<T>, dim3(batch_count, 1, 1), dim3(1, 1, 1), 0, stream,
(gdb)
129        for(rocblas_int j = 0; j < dim; ++j)
(gdb)
132            rocsolver_larfg_template(handle, m - j, A, shiftA + idx2D(j, j, lda), A,
(gdb)
137            ROCSOLVER_LAUNCH_KERNEL(set_diag<T>, dim3(batch_count, 1, 1), dim3(1, 1, 1), 0, stream,
(gdb)
137            ROCSOLVER_LAUNCH_KERNEL(set_diag<T>, dim3(batch_count, 1, 1), dim3(1, 1, 1), 0, stream,
(gdb)
145            if(j < n - 1)
(gdb)
154            ROCSOLVER_LAUNCH_KERNEL(restore_diag<T>, dim3(batch_count, 1, 1), dim3(1, 1, 1), 0, stream,
(gdb)
154            ROCSOLVER_LAUNCH_KERNEL(restore_diag<T>, dim3(batch_count, 1, 1), dim3(1, 1, 1), 0, stream,
(gdb)
129        for(rocblas_int j = 0; j < dim; ++j)
(gdb)
163    }
(gdb)
rocsolver_geqrf_template<false, false, double, double*> (handle=0x55555565ecd0, m=<optimized out>, n=<optimized out>, A=0x7fff09000000, shiftA=0, lda=7, strideA=<optimized out>, ipiv=<optimized out>, strideP=<optimized out>, batch_count=<optimized out>, scalars=<optimized out>, work_workArr=<optimized out>, Abyx_norms_trfact=<optimized out>, diag_tmptr=<optimized out>, workArr=<optimized out>) at /home/hipper/ex_rocm/rocSOLVER/library/src/lapack/roclapack_geqrf.hpp:174
174    }
(gdb)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1455405.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

17.Qt 单选框相关操作

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 1. 布置界面 2.管理 3.槽函数 参考&#xff1a; 前言&#xff1a; 组合选择只能选择一个的单选框实现&#xff0c;以及管理组合单选框 技能&#xff1a; <QRadioButton> <QButtonGroup> 内容&…

openGauss学习笔记-223 openGauss性能调优-系统调优-数据库系统参数调优-数据库内存参数调优

文章目录 openGauss学习笔记-223 openGauss性能调优-系统调优-数据库系统参数调优-数据库内存参数调优223.1 逻辑内存管理参数223.2 执行算子是否下盘的参数 openGauss学习笔记-223 openGauss性能调优-系统调优-数据库系统参数调优-数据库内存参数调优 数据库的复杂查询语句性…

RIP协议详解

​RIP是最早的动态路由协议&#xff0c;虽然已经过时并且很少使用&#xff0c;但是可以通过学习RIP并且和ospf等现在正在使用的路由协议对比&#xff0c;了解其工作原理和过时原因&#xff0c;具有很强的学习性。 一、RIP协议简介 RIP&#xff08;Routing Information Protoc…

【数据仓库】主题域和数据域

数据域与主题域区别 https://www.cnblogs.com/datadance/p/16898254.html 数据域是自下而上&#xff0c;以业务数据视角来划分数据&#xff0c;一般进行完业务系统数据调研之后就可以进行数据域的划分。针对公共明细层&#xff08;DWD&#xff09;进行主题划分。主题域则自上而…

spark sql官网优化指南

两句话概括 缓存数据调整参数 缓存数据 把数据缓存到内存,spark sql能够只扫描需要列并且会自动压缩数据,占用最小的内存和减小GC压力。这无需多言,内存远远要快于磁盘,spark效率比hive高这个就是一个主要原因。 缓存数据代码spark.catalog.cacheTable("tableName&qu…

【ArcGIS微课1000例】0103:导出点、线、面要素的折点坐标值

点要素对应的是一个或者若干个坐标,线要素对应的是对个坐标值对应的点连起来,面要素是多个坐标值对应的点连起来构成的封闭多边形。本文讲述导出点的坐标值。 文章目录 一、点要素坐标导出1. 计算点坐标2. 导出点坐标二、线要素坐标导出1. 生成线要素折点2. 计算折点坐标3. 导…

腾讯云4核8G12M服务器支持多少人在线?

4核8G服务器支持多少人同时在线访问&#xff1f;阿腾云的4核8G服务器可以支持20个访客同时访问&#xff0c;关于4核8G服务器承载量并发数qps计算测评&#xff0c;云服务器上运行程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&…

Github:分享一款开源的跨平台多功能远程控制和监控工具Spark

目录 1、设备列表及操作列表 2、登录机器 Shell 执行命令 3、桌面远程访问 4、远程设备的进程管理 5、远程设备文件管理 今天要给大家推荐一个开源的跨平台多功能远程控制和监控工具&#xff1a;Spark。 目前该项目处于不维护状态&#xff0c;大家可以自己根据需要进行扩…

Eclipse - Code Templates

Eclipse - Code Templates References Window -> Preferences -> C/C -> Code Style -> Code Templates 配置默认代码模板&#xff0c;可以点击 Export 将自己配置好的 Code Templates 导出去&#xff0c;以便备份和共享。 References [1] Yongqiang Cheng, https…

【软考高级信息系统项目管理师--第十一章:项目成本管理】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;软考高级–信息系统项目管理师 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 第十一章&#xff1a;项目成本管理 成本管理的过程规划成本管理估算成本制定预算控…

【JavaEE】_HTTP请求首行

目录 1. URL 2. 方法 2.1 GET方法 2.2 POST方法 2.3 GET与POST的区别 2.4 低频使用方法 1. URL 在mysql JDBC中已经提到过URL的相关概念&#xff1a; 如需查看有关JDBC更多内容&#xff0c;原文链接如下&#xff1a; 【MySQL】_JDBC编程-CSDN博客 URL用于描述某个资源…

代码检测规范和git提交规范

摘要&#xff1a;之前开发的项目&#xff0c;代码检测和提交规范都是已经配置好的&#xff0c;最近自己新建的项目就记录下相关配置过程。 1. ESlint配置 2013年6月创建开源项目&#xff0c;提供一个插件化的JavaScript代码检测工具&#xff0c;创建项目是生成的eslintrc.js文…

Spring Boot 笔记 023 注册页面

1.1 request.js请求工具 //定制请求的实例//导入axios npm install axios import axios from axios; //定义一个变量,记录公共的前缀 , baseURL const baseURL /api; const instance axios.create({baseURL})//添加响应拦截器 instance.interceptors.response.use(result…

Shiro-11-web 介绍

配置 将Shiro集成到任何web应用程序的最简单方法是在web.xml中配置一个Servlet ContextListener和过滤器&#xff0c;该Servlet了解如何读取Shiro的INI配置。 INI配置格式本身的大部分是在配置页面的INI部分中定义的&#xff0c;但是我们将在这里介绍一些额外的特定于web的部…

CogCopyRegionTool

关于visionpro工具操作原理文章甚少&#xff0c;以下是本人自己查阅visionpro官方文档完成的&#xff1a; “复制区域”工具允许您对单个图像或两个独立的图像执行多个复制操作&#xff1a; 将输入图像的一部分复制到新的输出图像。 1、 将输入图像的一部分复制到现有的目标…

2024 前端面试题(GPT回答 + 示例代码 + 解释)No.114 - No.121

本文题目来源于全网收集&#xff0c;答案来源于 ChatGPT 和 博主&#xff08;的小部分……&#xff09; 格式&#xff1a;题目 h3 回答 text 参考大佬博客补充 text 示例代码 code 解释 quote 补充 quote 上一篇链接&#xff1a;2024 前端面试题&#xff08;GPT回答 示例…

pytorch中dataloader的prefetch_factor出错

今天跑huggingface的示例的时候&#xff0c;遇到了最让我头疼的问题&#xff0c;国内网上还没有对应的解释&#xff0c;我可能是第一人&#xff08;汗&#xff09;先看看报错&#xff1a; Traceback (most recent call last):File "F:\transformer\transformers\examples…

代码随想录算法训练营第15天—二叉树04 | ● *110.平衡二叉树 ● *257. 二叉树的所有路径 ● 404.左叶子之和

*110.平衡二叉树 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html 考点 后序遍历二叉树高度计算 我的思路 错误地将平衡二叉树的定义等价为判断整体二叉树的最大深度和最小深度之差是否大于1 视…

VBA技术资料MF120:打印固定标题行列

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

MySQL跨服务器关联查询

1. 首先确认服务器的Federated引擎是否开启 show engines;修改数据库的配制文件my.ini,(我的my.ini的路径为&#xff1a;D:\ProgramData\MySQL\MySQL Server 5.7/my.ini),将federated添加到my.ini文件中 到MySQL的my.cnf配置文件中修改 在 [mysqld] 下方加入 federated 然后重…