c++ CUDA求解线性方程组Ax=b

输入是三个eigen矩阵, 其中 F = K x F = Kx F=Kx, 已知 F F F k k k, 待求解的变量是 x x x

bool linearSolverQR(Eigen::MatrixXd& m_Keig, Eigen::MatrixXd& m_xeig, Eigen::MatrixXd& m_feig)
{cusolverStatus_t status;// 获取矩阵数据的指针double* k_ptr = m_Keig.data();double* f_ptr = m_feig.data();double* cuda_k, * cuda_f;double* tau_device;double* cuda_Rx;double* workspace_device;int* devInfo;// 在CUDA中分配设备内存cudaMalloc((void**)&cuda_k, m_Keig.rows() * m_Keig.cols() * sizeof(double));cudaMalloc((void**)&cuda_f, m_feig.rows() * m_feig.cols() * sizeof(double));cudaMalloc((void**)&tau_device, m_Keig.cols() * sizeof(double));cudaMalloc((void**)&cuda_Rx, m_Keig.rows() * m_xeig.cols() * sizeof(double)); //// 将数据从主机内存复制到设备内存cudaMemcpy(cuda_k, k_ptr, m_Keig.rows() * m_Keig.cols() * sizeof(double), cudaMemcpyHostToDevice);cudaMemcpy(cuda_f, f_ptr, m_feig.rows() * m_feig.cols() * sizeof(double), cudaMemcpyHostToDevice);cudaMalloc((void**)&devInfo, sizeof(int));// 获取cusolverDnDgeqrf函数所需的工作空间大小int workspace_size;status = cusolverDnDgeqrf_bufferSize(cusolverHandle, m_Keig.rows(), m_Keig.cols(), cuda_k, m_Keig.rows(), &workspace_size);//checkCudaErrors(if (status != CUSOLVER_STATUS_SUCCESS) {std::cerr << "cusolverDnDgeqrf_bufferSize failed with error code: " << status << std::endl;}// 在设备上为 workspace_device 分配内存cudaMalloc(&workspace_device, workspace_size * sizeof(double));status = cusolverDnDgeqrf(cusolverHandle, m_Keig.rows(), m_Keig.cols(), cuda_k, m_Keig.rows(), tau_device, workspace_device, workspace_size, devInfo);if (status != CUSOLVER_STATUS_SUCCESS) {int h_info;cudaMemcpy(&h_info, devInfo, sizeof(int), cudaMemcpyDeviceToHost);std::cerr << "cusolverDnDgeqrf failed with error code: " << status << std::endl;}// 计算R*x=Q^T*F, C是R*xstatus = cusolverDnDormqr(cusolverHandle, CUBLAS_SIDE_LEFT, CUBLAS_OP_T, m_feig.rows(),m_feig.cols(), m_Keig.cols(), cuda_k, m_Keig.rows(), tau_device,cuda_f, m_feig.rows(), workspace_device, workspace_size, devInfo);if (status != CUSOLVER_STATUS_SUCCESS) {std::cerr << "cusolverDnDormqr failed with error code: " << status << std::endl;}// 解上三角方程 R * x = Q^T * bdouble alpha = 1.0;cublasStatus_t status_cublas = cublasDtrsm(cublasH, CUBLAS_SIDE_LEFT, CUBLAS_FILL_MODE_UPPER,CUBLAS_OP_N, CUBLAS_DIAG_NON_UNIT, m_xeig.rows(), m_xeig.cols(),&alpha, cuda_k, m_Keig.rows(), cuda_f, m_Keig.rows());if (status_cublas != CUBLAS_STATUS_SUCCESS) {fprintf(stderr, "cublasDtrsm failed with error code: %d\n", status_cublas);}Eigen::MatrixXd tmp(m_feig.rows(), m_feig.cols());cudaMemcpy(tmp.data(), cuda_f, sizeof(double) * m_feig.rows() * m_feig.cols(), cudaMemcpyDeviceToHost);m_xeig = tmp.block(0, 0, m_xeig.rows(), m_xeig.cols());//cout << "m_xeig" << endl;//cout << m_xeig << endl;// 释放设备内存cudaFree(cuda_k);cudaFree(cuda_f);cudaFree(cuda_Rx);cudaFree(tau_device);cudaFree(workspace_device);cudaFree(devInfo);return true;
}

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

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

相关文章

spring高级篇(一)

1、ApplicationContext与BeanFactory BeanFactory是ApplicationContext的父级接口&#xff1a;&#xff08;citlaltu查看类关系图&#xff09; 在springboot的启动类中&#xff0c;我们通过SpringApplication.run方法拿到的是继承了ApplicationContext的ConfigurableApplicatio…

代码随想录-算法训练营day13【栈与队列03:滑动窗口最大值、前K个高频元素、简化路径、总结】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第五章 栈与队列part03今日内容&#xff1a; ● 239. 滑动窗口最大值 ● 347.前 K 个高频元素 ● 总结详细布置 239. 滑动窗口最大值 &#xff08;一刷至少需要理解思路&#xff09;之前讲的都是栈的应用&#xff0c;这…

Qt使用miniblink第三方浏览器模块

文章目录 一、前言二、miniblink简介三、miniblink使用四、运行效果五、工程结构 一、前言 本文取自刘典武大师&#xff1a;Qt编写地图综合应用58-兼容多浏览器内核 用Qt做项目过程中&#xff0c;遇到需要用到浏览器控件的项目&#xff0c;可能都会绕不开一个问题&#xff0c;那…

【Web】VS Code 插件

专栏文章索引&#xff1a;Web 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、安装步骤 二、插件 1.Chinese (Simplified) (简体中文) 2.open in browser 3.vscode-icons 4.Live Server 5.Live Server Preview 6.翻译(英汉词典) 一、安装步骤 点击 “扩…

创纪录的里程碑!光镊阵列捕获逾6,000中性原子,量子计算再达新高

论文链接&#xff1a; https://arxiv.org/abs/2403.12021 2024年3月18日&#xff0c;研究人员成功开发出一种大规模光镊阵列&#xff0c;能够在12,000个位点上捕获超过6,100个中性原子&#xff0c;同时在几个关键性能指标上达到新的高度&#xff1a; 1&#xff09;相干时间达到…

javascript设计模式----访问者模式

访问者模式:针对于对象结构中的元素,定义在不改变改对象的前提下访问结构中元素的新方法。 解决事件回调函数中对改元素的访问问题。 实现的核心,调用call或者apply 场景:用dom2级事件为页面中的元素绑定事件 var bindEvent = function(dom,type,fn){if(dom.addEventListe…

新零售门店、商品、会员管理指标体系总览

新零售&#xff0c;旨在打破传统零售业的边界&#xff0c;引入先进科技和数字化手段&#xff0c;通过整合线上线下渠道&#xff0c;全面提升用户体验&#xff0c;并实现更智能、高效、个性化的零售运营模式。这一模式不仅仅关注销售产品&#xff0c;更注重构建全方位的购物生态…

《中医临床诊疗术语》数据库

最新版的《中医临床诊疗术语》于2023年3月17日由国家中医药管理局提出的&#xff0c;由国家市场监督管理总局和国家标准化管理委员会共同发布。新版的修订是为落实相关政策文件要求&#xff0c;推进中医医疗服务规范化、标准化管理&#xff0c;提高中医医疗服务标准化水平和管理…

asyncio异步编程

参考视频&#xff1a;02 协程_哔哩哔哩_bilibili 1.协程&#xff1a;&#xff08;不是计算机中真实存在的&#xff0c;人为创造出的概念&#xff09;&#xff0c;也可称为微线程。 本质是用一个线程在一段代码中来会切换游走的线程&#xff0c;是一种用户态内的上下文切换技术…

中科驭数:DPU是构建高效智算中心基础设施的必选项

4 月 15 日&#xff0c;在江苏省未来网络创新研究院、网络通信与安全紫金山实验室举办的“2024智算网络技术与应用创新峰会”上&#xff0c;中科驭数作为DPU算力基础设施领军企业&#xff0c;受邀出席本次峰会。中科驭数产品运营部副总经理曹辉先生在《基于DPU的高效智算中心算…

OpenCV与AI深度学习 | 2024年AI初学者需要掌握的热门技能有哪些?

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;2024年AI初学者需要掌握的热门技能有哪些&#xff1f; 0 导 读 本文主要介绍2024年AI初学者需要掌握的热门技能。 1 前 言 人工智能无疑是技…

数据分析业务——二八定律

二八定律 转载&#xff1a;百度百科 二八定律也叫巴莱多定律&#xff0c;是19世纪末20世纪初意大利经济学家巴莱多发明的。他认为&#xff0c;在任何一组东西中&#xff0c;最重要的只占其中一小部分&#xff0c;约20%&#xff0c;其余80%的尽管是多数&#xff0c;却是次要的&…

基于java+springboot+vue实现的智慧党建系统(文末源码+Lw+ppt)23-58

摘 要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统智慧党建管理采取了人工的管理方法&#xff0c;但这种管…

openGauss学习笔记-264 openGauss性能调优-TPCC性能调优测试指导-BIOS配置

文章目录 openGauss学习笔记-264 openGauss性能调优-TPCC性能调优测试指导-BIOS配置264.1 恢复BIOS出厂设置264.2 修改相关BIOS设置264.3 重启操作系统 openGauss学习笔记-264 openGauss性能调优-TPCC性能调优测试指导-BIOS配置 本章节主要介绍openGauss数据库内核基于鲲鹏服务…

repo 管理多个git仓库

当repo init时&#xff0c;执行的repo是环境变量里面默认的repo&#xff0c;这个repo只是单纯一个几百行的Python脚本 而不是完整的repo-project&#xff0c;所以要先去网络远端sync完整的repo-project&#xff0c; 因为repo也是开源项目&#xff0c;设计者出于维护和使用体验&…

BTI功能验证与异常解析

BTI分支目标识别精讲与实践系列 思考 1、什么是代码重用攻击&#xff1f;什么是ROP攻击&#xff1f;区别与联系&#xff1f; 2、什么是JOP攻击&#xff1f;间接分支跳转指令&#xff1f; 3、JOP攻击的缓解技术&#xff1f;控制流完整性保护&#xff1f; 4、BTI下的JOP如何…

【MATLAB源码-第53期】m代码基于粒子群算法(PSO)的三维路径规划,显示最优路径和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;简称PSO&#xff09;是一种模拟鸟群觅食行为的启发式优化方法。以下是其详细描述&#xff1a; 基本思想&#xff1a; 鸟群在寻找食物时&#xff0c;每只鸟都…

机器学习实验------随机森林

第1关&#xff1a;Bagging 任务描述 本关任务&#xff1a;补充 python 代码&#xff0c;完成 BaggingClassifier 类中的 fit 和 predict 函数。请不要修改 Begin-End 段之外的代码。 import numpy as np from collections import Counter from sklearn.tree import DecisionT…

【开发篇】十三、JVM基础参数设置与垃圾回收器的选择

文章目录 1、-Xmx 和 –Xms2、-XX:MaxMetaspaceSize 和 –XX:MetaspaceSize3、-Xss4、不建议改的参数5、其他参数6、选择GC回收器的调试思路7、CMS的并发模式失败现象的解决8、调优案例 GC问题解决方式&#xff1a; 优化JVM基础参数&#xff0c;避免频繁Full GC减少对象的产生…

ADB的基本语法及常用命令

学习网址 ADB命令的基本语法如下&#xff1a; adb [-d|-e|-s <serialNumber>] <command> 如果有多个设备/模拟器连接&#xff0c;则需要为命令指定目标设备。 参数及含义如下&#xff1a; 常用命令如下&#xff1a; 1. 启动ADB服务 adb start-server 2. 停止…