debug OpenBLAS library 和 应用示例

news2024/11/19 15:32:28

1. 构建openblas lib

git clone git@github.com:OpenMathLib/OpenBLAS.git

cd OpenBLAS/
如果要安装在自定义文件夹中,可以修改 PREFIX 的定义:

PREFIX = /opt/OpenBLAS
修改成
PREFIX = ../local/

然后构建:
make -j
make install

如果要构建 debug 版本的openblas,则可以在  Makefile.rule中,修改如下 大约在244行:


# Build Debug version
# DEBUG = 1
修改为
# Build Debug version
DEBUG = 1

然后在执行构建指令:
make -j
make install

2. 调试openblas 示例


2.1 示例1,LU分解

//hello_LAPACK_sgetrf.c

//#include <lapack.h>
#include <f77blas.h>
#include <stdio.h>

int main() {
    int n = 3; // Dimension of the matrix
    float A[] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0}; // Input matrix
    int lda = n; // Leading dimension of A
    int ipiv[n]; // Array to store pivot indices
    int info; // Output variable for error info

    // Call the LAPACK sgetrf function for LU decomposition
    sgetrf_(&n, &n, A, &lda, ipiv, &info);

    if (info == 0) {
        printf("LU decomposition successful!\n");
        // Print the decomposed matrix A
        printf("Decomposed matrix A:\n");
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                printf("%f ", A[i + j*n]);
            }
            printf("\n");
        }
        printf("ipiv=\n");
        for(int i=0; i<n; i++)
                printf("%d  ", ipiv[i]);
        printf("\n");

    } else {
        printf("LU decomposition failed!\n");
    }

    return 0;
}

运行效果及matlab验证:

2.2 示例2 QR分解

hello_qrf.c
#include <stdio.h>
#include <lapack.h>

int min(int m, int n){  return m<n? m:n;}

int main() {
    int m = 3; // Number of rows in the matrix
    int n = 2; // Number of columns in the matrix
    double A[] = {1.0, 4.0, 2.0, 5.0, 3.0, 6.0}; // Input matrix
    int lda = m; // Leading dimension of A
    double tau[min(m,n)]; // Array to store elementary reflectors
    int info; // Output variable for error info

    int lwork = -1;
    double* work = (double*)malloc(8);
    // Call the LAPACK dgeqrf function for QR decomposition
    dgeqrf_(&m, &n, A, &lda, tau, work, &lwork, &info);

    lwork = (int)work[0];
    printf("lwork=%d\n", lwork);
    work = (double*)malloc(lwork*sizeof(double)); // Workspace array

    // Call the LAPACK dgeqrf function again with correct workspace
    dgeqrf_(&m, &n, A, &lda, tau, work, &lwork, &info);

    if (info == 0) {
        printf("QR decomposition successful!\n");
        // Print the decomposed matrix A
        printf("Decomposed matrix A:\n");
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                printf("%f ", A[i + j*m]);
            }
            printf("\n");
        }
    } else {
        printf("QR decomposition failed!\n");
    }

    return 0;
}

运行效果及 matlab 验证:

Makefile:

INC =  -I ../local/include
#LD_FLAGS = -L../local/lib -lopenblas
#LD_FLAGS = /home/hipper/ex_openblas/tmp_/local/lib/libopenblas_skylakexp-r0.3.26.dev.so
EXE := hello_LAPACK_sgetrf hello_qrf

all: $(EXE)

hello_qrf: hello_qrf.o
hello_LAPACK_sgetrf: hello_LAPACK_sgetrf.o

%.o: %.c
        gcc -g $< -c -o $@ $(INC)

%: %.o /home/hipper/ex_openblas/tmp_/local/lib/libopenblas_skylakexp-r0.3.26.dev.a
        gcc -g $^    -o $@ $(LD_FLAGS) -lm -lgfortran

#$(LD_FLAGS)

.PHONY: clean
clean:
        -rm -rf $(EXE) *.o

调试效果:


这里使用的是静态库
也可以使用动态库

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

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

相关文章

【解决】Unity Project 面板资源显示丢失的异常问题处理

开发平台&#xff1a;Unity 2021.3.7f1c1   一、问题描述 在开发过程中&#xff0c;遭遇 Project 面板资源显示丢失、不全的问题。但 Unity Console 并未发出错误提示。   二、解决方案&#xff1a;删除 Library 目录 前往 “工程目录/Library” 删除内部所有文件并重打开该…

007-可调脉冲数触发之FPGA实现(Zynq也可驱动,带启动停止及完成中断输出)

文章目录 前言一、设计思路二、代码及仿真1.资源消耗2.具体代码3.仿真波形 总结 前言 此代码是在做显微镜高速聚焦系统中自己写的步进电机电机驱动源码&#xff0c;为了达到最快的驱动速度&#xff0c;因此选用脉冲触发方式进行驱动。在电机驱动的过程中往往需要对脉冲进行使能…

React Native 桥接原生实现 JS 调用原生方法

一、为什么需要桥接原生 为了满足在React 层无法实现的需求 复杂高性能的组件&#xff1a;复杂表格、视频播放原生层开发能力&#xff1a;传感器编程、widget平台属性&#xff1a;系统信息、设备信息对接第三方应用&#xff1a;相机、相册、地图 真实的开发过程中是不可能完…

OpenGL学习笔记-Blending

混合方程中&#xff0c;Csource是片段着色器输出的颜色向量&#xff08;the color output of the fragment shader&#xff09;&#xff0c;其权重为Fsource。Cdestination是当前存储在color buffer中的颜色向量&#xff08;the color vector that is currently stored in the …

欢乐的周末 - 华为OD统一考试

OD统一考试 题解&#xff1a; Java / Python / C 题目描述 小华和小为是很要好的朋友&#xff0c;他们约定周末一起吃饭。 通过手机交流&#xff0c;他们在地图上选择了多个聚餐地点(由于自然地形等原因&#xff0c;部分聚餐地点不可达)。求小华和小为都能到达的聚餐地点有多…

私域爆款活动实操指南,让你轻松成为营销高手!

私域运营活动是公司运营中非常重要的一环&#xff0c;它能够提高用户参与度、增加用户忠诚度&#xff0c;并为公司带来更多的商业机会。然而&#xff0c;策划和执行一场成功的私域运营活动并不容易&#xff0c;需要思维缜密、部门合作以及落地能力等方面的综合素养。今天来跟大…

Orchestrator源码解读2-故障失败发现

目录 前言 核心流程函数调用路径 GetReplicationAnalysis 故障类型和对应的处理函数 ​编辑 拓扑结构警告类型 核心流程总结 与MHA相比 前言 Orchestrator另外一个重要的功能是监控集群&#xff0c;发现故障。根据从复制拓扑本身获得的信息&#xff0c;它可以识别各种故…

JDK21和 Flowable 7.0.0

JDK21和 Flowable 7.0.0 一.Flowable二.项目搭建1.依赖包2.数据库3.资源文件1.YML配置文件2.Drools kbase3.Drools rule4.DMN 决策表5.BPMN 流文件 4.BPMN 流程图绘制插件5.测试代码1.启动类2.Flowable 配置3.Camel 配置1.Camel 配置2.Camel Router 定义 4.扩展类监听1.外部工作…

【MySQL】视图,15道常见面试题---含考核思路详细讲解

目录 一 视图 1.1视图是什么 1.2 创建视图 1.3 查看视图(两种) 1.4 修改视图(两种) 1.5 删除视图 二 外连接&内连接&子查询介绍 2.1 外连接 2.2 内连接 2.3 子查询 三 外连接&内连接&子查询案例 3.1 了解表结构与数据 3.2 15道常见面试题 四 思…

Java中内存模型

参数传递图解与结论 通过上面的两段程序可以得出如下结论&#xff1a;根据内存去解释&#xff0c;局部变量随方法栈的弹出而消失&#xff1b; 当调用方法时&#xff0c;如果传入的数值为基本数据类型&#xff08;包含String类型&#xff09;&#xff0c;形式参数的改变对实际…

虚拟机Ubuntu网络配置

电脑有两个系统&#xff0c;windows系统和ubuntu系统&#xff0c;那网卡到底给哪一个用呢&#xff0c;所以要选择桥接模式&#xff0c;就可以共用网卡 但是我们电脑网卡&#xff0c;有线网卡&#xff0c;无线网卡&#xff0c;到底使用哪个网卡&#xff0c;所以选择桥接到自动或…

IP地址的网络安全防护和预防

网络安全对于保护个人和组织的信息资产至关重要&#xff0c;而IP地址是网络通信的基础。在这篇文章中&#xff0c;IP数据云将探讨IP地址的网络安全防护和预防措施&#xff0c;以确保网络的安全性和可靠性。 IP地址是互联网上每个设备在网络中的唯一标识符。有IPv4和IPv6两种类…

苹果手机怎么设置提醒事项?详细方法在这,记得收藏!

无论是学生党还是上班族&#xff0c;大家每天都需要处理许多任务和事项。为了更好地管理这些事项&#xff0c;苹果手机为用户提供了提醒功能。 通过设置提醒事项&#xff0c;我们可以减少忘记重要任务的可能性。那么&#xff0c;苹果手机怎么设置提醒事项呢&#xff1f;在本文…

阳光宝宝的视界:新生儿补充叶黄素的小心指南

引言&#xff1a; 叶黄素&#xff0c;作为视觉健康的重要组成部分&#xff0c;对新生儿的眼睛发育和视觉保护具有重要意义。本文将深入探讨叶黄素的功能、补充时机&#xff0c;以及在给新生儿补充叶黄素时应该注意的事项&#xff0c;为小天使们提供最贴心的呵护。 第一部分&am…

【SQL】对表中的记录通过时间维度分组,统计出每组的记录条数

场景&#xff1a;一般用作数据统计&#xff0c;比如统计一个淘宝用户在年、月、日的维度上的订单数。 业务&#xff1a;一个集合&#xff0c;以时间维度来进行分组求和。 准备一张订单表order&#xff0c;有一些常规属性&#xff0c;比如创建时间&#xff0c;订单号。 DDL语句如…

Vue面试之虚拟DOM

Vue面试之虚拟DOM 什么是虚拟dom&#xff1f;虚拟dom是如何产生的&#xff1f;编写模板template模板编译Complie挂载Mounting 如何进行新旧Dom对比&#xff1f; 最近在整理一些前端面试中经常被问到的问题&#xff0c;分为vue相关、react相关、js相关、react相关等等专题&#…

【C语言】指针——从底层原理到应用

C语言指针-从底层原理到花式技巧&#xff0c;用图文和代码帮你讲解透彻 目录 一、前言二、变量与指针的本质 1. 内存地址2. 32位与64位系统3. 变量4. 指针变量5. 操作指针变量 5.1 指针变量自身的值5.2 获取指针变量所指向的数据5.3 以什么样的数据类型来使用/解释指针变量所指…

【研究僧毕业总结】第1024个创作日

目录 前言1. 机缘2. 收获3. 憧憬 前言 收到这封来信&#xff0c;代表从创作至今刚好满足1024天 1024&#xff0c;程序员的记忆 1. 机缘 从学生到社会&#xff0c;都在需求一个记录笔记的软件&#xff0c;而作为程序员&#xff0c;CSDN可云同步又可直接在云平台上看到 选择了…

【算法分析与设计】三数之和

题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例…

ERD助力研发资产沉淀研发提效

一、从痛点中思考答案 痛点一&#xff1a;复杂系统的设计和逻辑碎片化散落&#xff0c;缺少沉淀导致系统后期维护、迭代以及架构升级都非常困难。 痛点二&#xff1a;由于新需求或新项目导致的系统的老旧逻辑梳理往往耗费大量人力&#xff0c;甚至造成人才的流失。 痛点三&a…