【openEuler创新项目探索】一个Java端的向量化BLAS库VectorBLAS

这篇具有很好参考价值的文章主要介绍了【openEuler创新项目探索】一个Java端的向量化BLAS库VectorBLAS。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

VectorBLAS简介

VectorBLAS是一个使用Java语言实现的向量化BLAS高性能库,目前已在openEuler社区开源。

VectorBLAS通过循环展开、矩阵分块和内存布局优化等算法优化,对BLAS函数进行了深度优化,并利用VectorAPI JDK提供的多种向量化API实现。

可以理解为:VectorBLAS = VectorAPI + BLAS。

BLAS简介:

BLAS(Basic Linear Algebra Subprograms)是进行向量和矩阵等基本线性代数操作的数值库,是LAPACK(Linear Algebra Package)的一部分。

在高性能计算领域中被广泛应用,由此衍生出大量优化版本,如OpenBLAS、Intel的Intel MKL等优化版本。

主要支持三个级别的运算:分别支持向量与向量、向量与矩阵、矩阵与矩阵的相关操作。

VectorAPI简介:

VectorAPI是Java端为实现SIMD向量化功能提供的一个抽象层,从JDK16开始发布,目前已孵化到第六代(JDK21)。

VectorAPI提供的能力包括:

  1. 定义更清晰及准确的向量化API,使用户更直接的实现向量化;

  2. 与平台无关:支持AArch64和x86等平台,支持NEON、SVE、AVX等多种向量化指令,一份代码多处可用;

应用场景:

目前BLAS库在大数据、HPC和机器学习等高性能计算中被广泛使用。例如大数据组件Spark中的多种机器学习算法(如:KMeans、 LDA、 PCA、 Bayes、 GMM、 SVM等)都用到了BLAS函数接口gemm、 gemv、 axpy、 dot、 spr等。

主要优化方法

1. VectorAPI向量化

BLAS库中的函数分为矢量-矢量、矢量-矩阵、矩阵-矩阵的计算,其中多数场景为对数组、矩阵进行计算,因此使用向量化进行优化,一次处理多个数据,提升效率,下面以daxpy函数为例:

daxpy => y = alpha * x + y, 其中alpha为常数,x和y为一维向量,数据类型均为double;

原生朴素实现:对x和y中的元素逐个计算;

向量化实现:以256位宽的寄存器为例,一次可以处理2个double类型,即一次对alpha、x和y做两次乘加操作;

图片可以看出,向量化操作可以成倍的提升处理效率,目前的向量化寄存器有128、256、512等大小的位宽,SVE等指令集甚至最高可支持2048位。

2. 循环展开

循环展开是一种循环转换技术, 通过减少或消除控制程序循环的指令,来减少计算开销,这种开销包括增加指向数组中下一个索引或者指令的指针算数等,还可以减少循环的次数,每次循环内的计算也可以利用CPU的流水线提升效率;

JDK中的JIT即时编译器也有针对循环进行自动优化,尤其是使用int, short, 或者char变量作为计数器的计数循环(counted loops)

VectorBLAS主要分析函数特性,通过把循环改造为counted loop,或手动对关键循环进行展开,以此提高执行效率;

3. 矩阵分块

矩阵分块是一种cache优化手段,当数组、矩阵的规模较大的时候,在N层循环中的跨度太大时,无法fit in the cache,数据则会被清出了缓存,造成较高的cache miss率;
通过矩阵分块,可以将小块数据锁在L1/L2 Cache中,提高cache命中,降低cache miss率。

图片

4. Packing

Packing优化又称为内存布局优化,因矩阵在数组中一般是按列存储或者按行存储,若计算时不是按照整行整列的顺序进行,那么就需要跨列或跨行读取数据。

Packing指的是在内存中新开一块空间,在这块空间内重新排布数据,使得数据的读取可以变得连续,减少cache miss,提升读取速度,Packing一般与矩阵分块搭配使用。

图片

性能数据

现有版本基于鲲鹏服务器测试验证,性能相较于业界同类库F2jBLAS/ludovic.netlib都有提升,如下图所示:

图片

后续规划

本项目已开源在openEuler社区,当前版本实现了BLAS库中的主要接口,后续规划如下:

  1. 支持Level1、Level2、Level3中更多的函数接口;

  2. 补充完善UT和Benchmark;

  3. 对于不同平台/指令集的调优;

4.结合Spark MLlib等机器学习算法库进行性能优化。

欢迎感兴趣的朋友们参与进来,代码地址:https://gitee.com/openeuler/vectorBlas文章来源地址https://www.toymoban.com/news/detail-677251.html

到了这里,关于【openEuler创新项目探索】一个Java端的向量化BLAS库VectorBLAS的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 3D Web轻量化引擎HOOPS Communicator如何实现对BIM桌面端的支持?

    HOOPS Communicator是一款简单而强大的工业级高性能3D Web轻量化渲染开发包,其主要应用于Web领域,主要加载其专有的SCS、SC、SCZ格式文件;HOOPS还拥有另一个桌面端开发包HOOPS Visualize,主要加载HSF、HMF轻量化格式文件。两者虽然同为Tech Soft 3D公司的图像处理引擎,但两者加载的文

    2024年02月13日
    浏览(17)
  • AI赋能金融创新:ChatGPT引领量化交易新时代

    随着人工智能技术的不断进步,金融领域也经历着一场技术革命。量化交易,作为金融领域的一大分支,正逐渐受到AI技术的深刻影响。特别是近年来,ChatGPT等自然语言处理技术的崛起,为量化交易带来了前所未有的机遇。本文将深入探讨ChatGPT如何助力量化交易,以及这一结

    2024年02月04日
    浏览(19)
  • 把Flutter扩展到微信小程序端的探索

    Flutter是声明式UI框架,声明式UI只需要向框架描述UI长什么样子而不用关心框架具体的实现细节,具体到Flutter,上层的UI描述使用底层的skia图形引擎处理就是原生Flutter,而把底层处理换成html/css/canvas就是flutter_web,flutter_mp则是探索在类小程序上对这些UI描述的处理。 我们看一

    2024年04月28日
    浏览(13)
  • 探索Redns的North项目:一个高效、安全的DNS解决方案

    项目地址:https://gitcode.com/Redns/North Redns/North 是一个开源的DNS服务器实现,旨在提供高性能、安全且易于管理的服务。它由Go语言编写,充分利用了Golang的并发特性,从而在处理大量DNS查询时展现出优秀的性能。此外,North还具有丰富的功能和良好的可扩展性,使其成为个人、企

    2024年04月14日
    浏览(13)
  • 学习购药系统源码:从前端到后端的技术探索

    本文将带领读者探索购药系统源码,从前端到后端逐步深入,了解其核心功能和实现方式。我们将使用常见的Web技术,包括HTML、CSS、JavaScript、以及Python的Django框架,展示购药系统的技术奥秘。 购药系统的前端主要使用HTML来构建页面结构。以下是一个简化的示例代码,用于显

    2024年02月14日
    浏览(16)
  • 探索未来外贸电商系统的创新架构

    在全球化、数字化的时代背景下,外贸电商行业呈现出蓬勃发展的态势。为了适应市场竞争的激烈和用户需求的多样化,外贸电商系统的架构设计显得尤为重要。本文将深入探讨未来外贸电商系统的创新架构,以期为行业发展提供新的思路和方向。 随着全球市场的开放和互联

    2024年04月11日
    浏览(13)
  • 探索 The Sandbox 教育蓝图:深入数字创新

    在充满活力的区块链和 Web3 游戏世界中,The Sandbox已经超越了娱乐平台的角色。它站在教育运动的前沿,旨在揭开区块链技术、NFT 和 Web3 游戏错综复杂的神秘面纱。The Sandbox 的使命是吸引新一波十亿用户,它正在与具有远见卓识的教育合作伙伴进行合作,将可玩性体验与全面

    2024年01月19日
    浏览(16)
  • 探索Xiotman:物联网软件架构的创新之路

    🚀🚀众所周知,物联网是当今科技领域的一个热门话题,它指的是 通过互联网将各种物理设备、传感器、终端等连接起来,实现信息的交换和通信 。物联网的应用场景非常广泛,涉及智能家居、智能城市、智能医疗、智能工业等领域。然而,物联网终端应用的开发也面临着

    2024年02月09日
    浏览(19)
  • 基于JAVA大学生创新创业项目管理系统设计与实现(Springboot框架) 研究背景与意义、国内外研究现状

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、

    2024年02月03日
    浏览(18)
  • 探索未来餐饮:构建创新连锁餐饮系统的技术之旅

    随着数字化时代的发展,连锁餐饮系统的设计和开发不再仅仅关乎订单处理,更是一场充满技术创新的冒险。在本文中,我们将深入研究连锁餐饮系统的技术实现,带你探索未来餐饮业的数字化美食之旅。 在设计连锁餐饮系统时,强大的后端服务是不可或缺的一部分。以下是

    2024年02月02日
    浏览(19)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包