OpenBLAS(Open Basic Linear Algebra Subprograms)是开源的基本线性代数子程序库,是一个优化的高性能多核BLAS库,主要包括矩阵与矩阵、矩阵与向量、向量与向量等操作。它的License是BSD-3-Clause,可以商用,目前最新的发布版本是0.2.19。它的源码放在了GitHub上,由张先轶老师等持续维护。

OpenBLAS是由中科院软件所并行软件与计算科学实验室发起的基于GotoBLAS2 1.13 BSD版的开源BLAS库高性能实现。

BLAS是一个应用程序接口(API)标准,用以规范发布基础线性代数操作的数值库(如矢量或矩阵乘法)。该程序集最初发布于1979年,并用于建立更大的数值程序包(如LAPACK)。在高性能计算领域,BLAS被广泛使用。

OpenBLAS支持的操作系统包括:Windows、Linux、Mac OS X、FreeBSD、Android.

OpenBLAS支持CPU类型包括:Intel、AMD、MIPS64、ARM/ARM64、IBM Z13.

在Windows7上安装Perl操作步骤:

1.      从https://www.perl.org/get.html下载Windows ActiveState Perl 5.22.3.2204 windows 64-bit;

2.      点击安装,一直选择默认设置即可;

3.      打开命令提示符cmd,输入: $ perl -v  如果提示This is perl5,version 22等信息,说明安装正确,如下图:

OpenBLAS在VS2013上的编译过程:(注:直接用VS2013编译不如用MinGW编译好,因为VS2013仅编译C语言,没有编译AT&T汇编语言。在性能上用MinGW编译的库要快于直接用VS2013编译的库。要通过CMake和VS2013编译OpenBLAS源码,Windows操作系统上还需要安装Perl)

1.      从 https://github.com/xianyi/OpenBLAS/releases下载OpenBLAS 0.2.19源码,并解压缩;

2.      打开CMake GUI:source code: D:/Download/OpenBLAS-0.2.19/OpenBLAS-0.2.19; build thebinaries: D:/Download/OpenBLAS-0.2.19/build;

3.      点击Configure;Specify the generator for this project: Visual Studio 12 2013 Win64,Finish;

4.      修改CMAKE_INSTALL_PREFIX路径为:D:/Download/OpenBLAS-0.2.19/install;默认BUILD_WITHOUT_LAPACK是被勾选的,即不会产生Lapack库;

5.      再次点击Configure,点击Generate,生成OpenBLAS.sln,如下图;

6.      打开OpenBLAS.sln:分别在Debug和Release下,重新生成解决方案,便会生成libopenblas.dll和libopenblas.lib(注:Debug和Release下,默认生成的库的名字一样,并且在同一个目录下);

7.      新建一个控制台工程,验证其openblas库的正确性,测试代码如下:

#include "funset.hpp"
#include <iostream>
#include <cblas.h>

int test_openblas()
{
	int th_model = openblas_get_parallel();
	switch (th_model) {
	case OPENBLAS_SEQUENTIAL:
		printf("OpenBLAS is compiled sequentially.\n");
		break;
	case OPENBLAS_THREAD:
		printf("OpenBLAS is compiled using the normal threading model\n");
		break;
	case OPENBLAS_OPENMP:
		printf("OpenBLAS is compiled using OpenMP\n");
		break;
	}

	int n = 2;
	double* x = (double*)malloc(n*sizeof(double));
	double* upperTriangleResult = (double*)malloc(n*(n + 1)*sizeof(double) / 2);

	for (int j = 0; j<n*(n + 1) / 2; j++)
		upperTriangleResult[j] = 0;

	x[0] = 1; x[1] = 3;

	cblas_dspr(CblasRowMajor, CblasUpper, n, 1, x, 1, upperTriangleResult);
	double*& A = upperTriangleResult;
	std::cout << A[0] << "\t" << A[1] << std::endl << "*\t" << A[2] << std::endl;

	free(upperTriangleResult);
	free(x);

	return 0;
}

执行结果如下:

GitHubhttps://github.com/fengbingchun/Caffe_Test

OpenBLAS简介及在Windows7 VS2013上源码的编译过程的更多相关文章

  1. 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视GCC编译全过程 | 百篇博客分析OpenHarmony源码| v57.01

    百篇博客系列篇.本篇为: v57.xx 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...

  2. Hadoop源码的编译过程详细解读(各版本)

    说在前面的话   重新试多几次.编译过程中会出现下载某个包的时间太久,这是由于连接网站的过程中会出现假死,按ctrl+c,重新运行编译命令. 如果出现缺少了某个文件的情况,则要先清理maven(使用命 ...

  3. Spark源码的编译过程详细解读(各版本)

    说在前面的话   重新试多几次.编译过程中会出现下载某个包的时间太久,这是由于连接网站的过程中会出现假死,按ctrl+c,重新运行编译命令. 如果出现缺少了某个文件的情况,则要先清理maven(使用命 ...

  4. Spark源码的编译过程详细解读(各版本)(博主推荐)

    不多说,直接上干货! 说在前面的话   重新试多几次.编译过程中会出现下载某个包的时间太久,这是由于连接网站的过程中会出现假死,按ctrl+c,重新运行编译命令.  如果出现缺少了某个文件的情况,则要 ...

  5. 鸿蒙内核源码分析(编译脚本篇) | 如何防编译环境中的牛皮癣 | 百篇博客分析OpenHarmony源码 | v58.01

    百篇博客系列篇.本篇为: v58.xx 鸿蒙内核源码分析(环境脚本篇) | 编译鸿蒙原来如此简单 | 51.c.h.o 本篇用两个脚本完成鸿蒙(L1)的编译环境安装/源码下载/编译过程,让编译,调试鸿 ...

  6. 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙看这篇或许真的够了 | 百篇博客分析OpenHarmony源码 | v50.06

    百篇博客系列篇.本篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉坑指南 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉 ...

  7. 使用 IntelliJ IDEA 导入 Spark 最新源码及编译 Spark 源代码

    前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. 准备工作 1.sca ...

  8. MySQL源码包编译安装

    +++++++++++++++++++++++++++++++++++++++++++标题:MySQL数据库实力部署时间:2019年3月9日内容:MySQL源码包进行编译,然后部署MySQL单实例重点 ...

  9. 使用 IntelliJ IDEA 导入 Spark 最新源码及编译 Spark 源代码(博主强烈推荐)

    前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. 准备工作 1.sca ...

随机推荐

  1. Centos7下搭建SVN服务,本地提交代码自动同步到WEB目录

    1.安装SVN服务[root@bogon ~]# yum -y install subversion 2.查看svnserve安装目录[root@bogon ~]# whereis svnserves ...

  2. Oracle EBS FA 获取累计折旧

    FUNCTION get_ltd_deprn(p_asset_id IN NUMBER, p_book_type_code IN VARCHAR2, p_rate_source_rule IN VAR ...

  3. python第三十天-类

    编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很 ...

  4. JS获取当前星期几的简易写法

    var str = "今天是星期" + "日一二三四五六".charAt(new Date().getDay()); mark在此,方便日后复制 原文https ...

  5. MySQL参数log_bin_trust_function_creators介绍-存储过程和复制

    MySQL的有个参数log_bin_trust_function_creators,官方文档对这个参数的介绍.解释如下所示: log_bin_trust_function_creators Comma ...

  6. Linux 小知识翻译 - 「RAID」

    最近术语「RAID」变得比较有名.「RAID」是指将多个HDD组合起来使用,从而提高存储可靠性的一种技术. 那么,关于 RAID 中的 「RAID 0」「RAID 1」「RAID 5」等各种「RAID ...

  7. Tomcat 访问页面或服务器异常,请检查这些方面

    若还没有部署网站,请检查 防火墙是否关闭 数据库服务是否打开 浏览器访问的地址和端口是否正确 tomcat 配置文件中的端口是否发生冲突,换一个试试 若出现的是"拒绝连接",检查阿 ...

  8. Skip-Gram模型

    Stanford CS224n的课程资料关于word2vec的推荐阅读里包含Word2Vec Tutorial - The Skip-Gram Model 这篇文章.这里针对此文章作一个整理. wor ...

  9. UVA12171-Sculpture(离散化+floodfill)

    Problem UVA12171-Sculpture Accept: 196  Submit: 1152 Time Limit: 3000 mSec Problem Description Imagi ...

  10. 转载 c# automapper 使用(一) https://www.cnblogs.com/caoyc/p/6367828.html

    一.最简单的用法 有两个类User和UserDto 1 public class User 2 { 3 public int Id { get; set; } 4 public string Name ...