debug OpenBLAS library 和 应用示例

这篇具有很好参考价值的文章主要介绍了debug OpenBLAS library 和 应用示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

debug OpenBLAS library 和 应用示例,并行计算,hpc

然后在执行构建指令:
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验证:

debug OpenBLAS library 和 应用示例,并行计算,hpc

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 验证:

debug OpenBLAS library 和 应用示例,并行计算,hpc

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

调试效果:

debug OpenBLAS library 和 应用示例,并行计算,hpc


这里使用的是静态库
也可以使用动态库文章来源地址https://www.toymoban.com/news/detail-815929.html

到了这里,关于debug OpenBLAS library 和 应用示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机组成原理--基于Logisim的4位并行加法器实验的应用(超详细/设计/实验/作业/练习)

    掌握快速加法器中先行进位的原理,能利用相关知识设计4位先行进位电路,并利用设计的4位先行进位电路构造4位快速加法器,能分析对应电路的时间延迟。 1.软件:Logisim软件、JAVA环境 2.硬件:计算机Windows 10 利用已设计好的四位先行进位电路构造四位快速加法器,其引脚定

    2024年02月02日
    浏览(250)
  • 国际版阿里云/腾讯云:弹性高性能计算E-HPC入门概述

    入门概述 本文介绍E-HPC的运用流程,帮助您快速上手运用弹性高性能核算。 下文以创立集群,在集群中安装GROMACS软件并运转水分子算例进行高性能核算为例,介绍弹性高性能核算的运用流程,帮助您快速上手运用弹性高性能核算。运用流程如下图所示。 操作流程 创立集群

    2024年02月10日
    浏览(64)
  • 高性能计算HPC照亮AIGC未来:PC集群+Stable Diffusion 打造极致游戏体验

    角色设计 | PC集群 | 增强现实 游戏设计 | PC农场 | PC Farm 随着科技的不断进步,虚拟现实、增强现实等技术已经逐渐成为了游戏设计中不可或缺的一部分。而在这些技术的背后,角色设计、PC集群、GAMEAI等方面的不断发展也为游戏的体验提供了更加丰富的可能性。而在这其中

    2024年02月09日
    浏览(55)
  • Rust 并行库 crossbeam 的 Channel 示例

    一个不完整的示例: 该例子中,rx 可以被多个线程使用,是线程安全的。这就是所谓的 MPMC 模式。设想 channel 中有 10 个数据,MPMC 模式允许10个线程同时利用 rx 从 channel 中读取数据。 Rust 自带的 channel 是 MPSC 模式的,一次仅允许一个线程从 channel 读取数据。显然 crossbeam 效率

    2024年03月15日
    浏览(38)
  • C# 任务并行类库Parallel调用示例

    Task Parallel Library 是微软.NET框架基础类库(BCL)中的一个,主要目的是为了简化并行编程,可以实现在不同的处理器上并行处理不同任务,以提升运行效率。Parallel常用的方法有For/ForEach/Invoke三个静态方法。

    2024年02月04日
    浏览(33)
  • python实战应用讲解-【numpy科学计算】line_profiler模块(附python示例代码)

    目录   Numpy 安装line_profiler 准备工作 具体步骤 Numpy 用line_profiler分析代码 具体步骤 攻略小结

    2023年04月08日
    浏览(56)
  • 并行计算(一)——并行计算机系统及结构模型

    SMP、COW、PVP、MPP计算机相关_神.秘.人的博客-CSDN博客_并行向量处理机 在下面的讲解之前,我们先看一下并行计算的量纲。 1.1.1 并行计算和计算机科学 随着计算机和计算机学科的发展,所有的学科都转向定量化和精确化,因此也出现了很多计算开头的学科,如计算数学、计算

    2024年01月23日
    浏览(46)
  • 并行计算与云计算的结合:实现高效计算

    并行计算和云计算都是当今计算技术的重要组成部分,它们各自具有独特的优势和应用场景。并行计算可以在多个处理单元之间分配任务,以提高计算效率,而云计算则可以通过分布式资源共享和虚拟化技术,实现计算资源的灵活性和可扩展性。随着数据量的增加和计算任务

    2024年04月11日
    浏览(51)
  • 并行计算-OPENMP(windows)

             并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行

    2024年02月16日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包