前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 17 更新(11):支持矢量运算,利好科学计算?

Java 17 更新(11):支持矢量运算,利好科学计算?

作者头像
bennyhuo
发布于 2021-10-19 06:19:49
发布于 2021-10-19 06:19:49
2.8K00
代码可运行
举报
文章被收录于专栏:BennyhuoBennyhuo
运行总次数:0
代码可运行

关键词:Java Java17

Java 17 将继续孵化对矢量计算的支持。

我们这一篇来简单聊聊 JEP 414: Vector API (Second Incubator),之前 Java 16 就已经开始孵化这个项目了。

刚开始看到这个 Vector API,我都懵了,Vector 不是不推荐用吗?后来看到提案的详细内容才明白过来,人家说的是矢量运算,不是我们熟知的那个线程安全的 vector 容器

在过去,Java 确实没有提供很好的矢量运算的途径,这使得我们只能基于标量计算来构造矢量计算的算法。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static void scalarComputation(float[] a, float[] b, float[] c) {
    for (int i = 0; i < a.length; i++) {
        c[i] = (a[i] * a[i] + b[i] * b[i]) * -1.0f;
    }
}

这是提案当中给出的例子,a、b、c 是三个相同长度的数组,c 实际上是运算结果。

使用新的 Vector API实现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static final VectorSpecies<Float> SPECIES = FloatVector.SPECIES_PREFERRED;

static void vectorComputation(float[] a, float[] b, float[] c) {
    int i = 0;
    int upperBound = SPECIES.loopBound(a.length);
    for (; i < upperBound; i += SPECIES.length()) {
        // FloatVector va, vb, vc;
        var va = FloatVector.fromArray(SPECIES, a, i);
        var vb = FloatVector.fromArray(SPECIES, b, i);
        var vc = va.mul(va)
            .add(vb.mul(vb))
            .neg();
        vc.intoArray(c, i);
    }
    for (; i < a.length; i++) {
        c[i] = (a[i] * a[i] + b[i] * b[i]) * -1.0f;
    }
}

Vector API 的基本思想就是批量计算,例子当中的 SPECIES 其实是根据机器来选择合适的分批大小的一个变量。我们可以注意到,在计算时 i 每次增加 SPECIES.length(),这就是分批的大小了。当然,你也可以根据实际情况自己选择,例如调用下面的方法来根据矢量的 shape 来确定大小:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static FloatSpecies species(VectorShape s) {
    Objects.requireNonNull(s);
    switch (s) {
        case S_64_BIT: return (FloatSpecies) SPECIES_64;
        case S_128_BIT: return (FloatSpecies) SPECIES_128;
        case S_256_BIT: return (FloatSpecies) SPECIES_256;
        case S_512_BIT: return (FloatSpecies) SPECIES_512;
        case S_Max_BIT: return (FloatSpecies) SPECIES_MAX;
        default: throw new IllegalArgumentException("Bad shape: " + s);
    }
}

对于 FloatVector 类型,这套 API 提供了诸如 add、mul 这样的方法来方便实现矢量计算,用起来比较方便。

理论上来讲,这套 API 也是可以带来性能上的提升的,但我使用相同的数据调用上述矢量和标量的方法,在提前完成类加载的条件下,粗略得出以下耗时:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scalar: 746000ns
vector: 2210400ns

可以看到新的 Vector API 居然更慢。不过这个也不能说明什么,毕竟实际的使用场景是复杂的,而且也跟 CPU 架构密切相关,我的机器是 AMD R9 5900HX,也许在 Intel 上有更好的表现呢(噗。。)。

对了,因为 Java 自身语法的限制,现在的 Vector API 大量用到了装箱和拆箱(这可能是性能消耗的大头),因此预期在 Valhalla 合入之后,基于值类型再做优化可能会得到大幅的性能提升。这么看来应当不是我的 AMD CPU 的问题。

不管怎么样,这套东西还在很早期的孵化阶段,API 好用就行,性能的事儿后面会解决的(反正我又不会用到)。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Kotlin 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
win10+ubuntu18.04双系统安装/大集合
大一时曾按着CSDN教程按好了ubuntu+win10双系统,在宿舍里昏天黑地得干了一天,电脑重启无数次,心情经历了无比得崩溃。我相信每个经历这个过程得同学心理素质一定会有所提升的。之后帮同学安过一次也比较顺利。但在放寒假前win10系统因为我删C盘文件而崩溃了,后来重装系统后把Ubuntu系统给覆盖了。再重新装时本以为会很顺利,因为驾轻就熟嘛,但结果是我不慌不忙的按了好几次,历时三天都没有安好!所以我急眼了,现在我系统完美安装,一定要写篇推文来帮大家扫清一下前行的障碍。
周旋
2020/06/04
1.9K0
win10+ubuntu18.04双系统安装/大集合
系统安装部署系列教程(一):安装原版系统镜像
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/u011054333/article/details/89735253
乐百川
2019/07/02
2.3K0
系统安装部署系列教程(一):安装原版系统镜像
双系统安装 小记 历时9小时 过关斩将! Ubuntu19.10 + RUFUS 经验之谈
建议不要使用Ubuntu18.04.3的系统镜像,而是使用其他的版本,例如18.04.1 .4 等等 当然也可以使用本人使用的目前最新版本的19.10.
种花家的奋斗兔
2020/11/13
1.2K0
双系统安装 小记 历时9小时  过关斩将! Ubuntu19.10 + RUFUS  经验之谈
UEFI安装win10+manjaro双系统
微软官方 Windows 10 ISO 直接下载网页:https://www.microsoft.com/zh-cn/software-download/windows10ISO
全栈程序员站长
2022/09/07
4.8K0
UEFI安装win10+manjaro双系统
系统安装部署系列教程(四):制作PE系统
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/u011054333/article/details/89762107
乐百川
2019/07/02
3.5K0
系统安装部署系列教程(四):制作PE系统
Win10 Ubuntu16.04/Ubuntu18.04双系统完美安装「建议收藏」
按照网上博客的安装教程安装的Win10+Ubuntu16.04双系统安装了好几遍都不成功?启动Ubuntu左上一直有个光标在闪?如果你的电脑也是双硬盘(装Windows系统的固态硬盘+机械硬盘),在安装Win10+Ubuntu16.04双系统前一定要提前了解如下这些安装要点。
全栈程序员站长
2022/09/15
2.7K0
Win10 Ubuntu16.04/Ubuntu18.04双系统完美安装「建议收藏」
ubuntu 18.04 安装(UEFI+GBT)
官方的下载地址在这里~而且似乎自带了加速镜像,在自己的网络环境下可以在7M/s+,似乎是可以的~
idealclover
2018/10/31
13.7K0
记录Windows系统改装银河麒麟服务器操作系统V10版本的图文教程
前段时间公司一个项目要用到国产麒麟系统,最初是华为云主机安装的麒麟鲲鹏系统,测试完成后,部分项目要搬迁至政府机房中,但是政府的服务器基本都是物理机,很少存在云主机里面,这就为后期改成linux系统埋下了伏笔,当初麒麟厂商拿着服务器来到公司,然后安装领导和项目所需的环境安装了麒麟linux系统,部署了php环境,一切测试就绪之后,我想着公司有一台暂无人使用的旧主机,索性旧改造成内网的服务器测试政府相关项目吧,于是乎windows改成linux的事情就落在我身上了。
李洋博客
2023/03/03
7K0
记录Windows系统改装银河麒麟服务器操作系统V10版本的图文教程
Ubuntu18.04.3 LTS初体验
dell电脑,F12进入bios,安装系统可能会有点慢。然后如果黑屏报schem_error不停循环的话。别担心,正常现象。等一会就好了。
Noneplus
2020/01/22
1.1K0
Dell R730安装Ubuntu 18.04的过程
我下的是这个 https://ftp.sjtu.edu.cn/ubuntu-cd/18.04/ubuntu-18.04.5-desktop-amd64.iso
用户7010445
2021/02/05
1.8K0
树莓派3B+安装官方原版系统
https://blog.csdn.net/Fighting_Boom/article/details/88732537
全栈程序员站长
2022/09/12
8840
树莓派3B+安装官方原版系统
Windows + Deepin 双系统安装实践
这一周没有怎么写代码,玩弄了一番我的电脑。在不到一周的时间里装了不下于十次系统,这一段时间差点疯掉。不过最终结果还可以。现在电脑上有两个系统,Windows 10 和 Deepin。开机的时候可以进行系统之间的切换。
多云转晴
2019/11/05
8.8K0
Windows + Deepin 双系统安装实践
最新Win10专业版系统下载|Win10 22H2纯净版安装教程|UEFI引导+U盘分区优化+安全加固(含官方镜像文件)
Windows 10 是微软推出的一款具有重要影响力的操作系统。它在易用性和安全性上有显著提升,对云服务、智能移动设备等新技术进行融合,还优化支持了固态硬盘等硬件。其特点丰富,有 Cortana 个人助理、Edge 浏览器、多桌面和任务视图等。开始菜单回归经典且具高度可定制性,搜索栏功能强大。从 Windows Store 下载的应用可窗口化运行。
万里顾一诚
2025/06/09
5.2K0
最新Win10专业版系统下载|Win10 22H2纯净版安装教程|UEFI引导+U盘分区优化+安全加固(含官方镜像文件)
【教程】U盘、硬盘安装原版win7、8.1、10系统
《硬盘安装原版win7系统教程》 链接:http://user.qzone.qq.com/1019963719/blog/1425718860。 《陶院计算机协会教你用U盘装win7系统—详细教程》 链接:http://user.qzone.qq.com/1019963719/blog/1399108233。此文介绍不是安装纯净版的系统。
若川
2020/03/19
3.5K0
系统安装部署系列教程(二):硬盘安装方式安装系统
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/u011054333/article/details/89762076
乐百川
2019/07/02
3.2K0
系统安装部署系列教程(二):硬盘安装方式安装系统
如何用u盘安装一个纯净的win10系统
最近用了一段时间win10之后,有点对windows路转粉的意思,把所有的电脑都装成了win10系统,这里记录一下用U盘安装win10的过程和一些中间用到的工具,以及遇到的一些问题。
efonfighting
2019/11/08
2K0
如何用u盘安装一个纯净的win10系统
Ubuntu20.04安装详细图文教程(双系统)[通俗易懂]
最近想把自己开发环境换成linux的,查了一下还是ubuntu桌面比较美观并且作为生产系统生态良好,决定使用ubuntu。开始了着手查找安装Ubuntu双系统的方法。安装有三种:
全栈程序员站长
2022/08/29
21K0
Ubuntu20.04安装详细图文教程(双系统)[通俗易懂]
手把手教你安装win10+Ubuntu16.04的双系统(全网最详细)
本系列为小白入门整个AI项目教程,主要涉及双系统的搭建,linux的使用,安装caffe-gpu版本,利用caffe实现目标检测,并移植模型到android移动端,也就是手机端进行目标检测,本篇为安装双系统的教程。
小小詹同学
2019/05/15
27.1K1
手把手教你安装win10+Ubuntu16.04的双系统(全网最详细)
告别卡顿!Win7官方镜像极速下载|最新UEFI启动盘制作指南》
当电脑频繁蓝屏、系统崩溃甚至无法开机时,重装系统可能是最后的救命稻草。但市面上的教程往往存在三大痛点: ⚠️ 镜像来源不明导致系统被植入后门 ⚠️ 启动盘制作失败反复折腾 ⚠️ 操作失误造成数据永久丢失
万里顾一诚
2025/03/06
3551
告别卡顿!Win7官方镜像极速下载|最新UEFI启动盘制作指南》
入门学习SLAM(Windows &Ubuntu 16.04 双系统安装图片教程)
入门学习SLAM计划是一个系列,从开始记录大家的学习过程,每一步我们都是有规划的。前一段时间发现了一篇安装Windows + Ubuntu 16.04 双系统安装详细教程 ,然后放在公众号上供大家参考,也是学习SLAM的第一步了。
小白学视觉
2019/10/24
1.9K0
推荐阅读
相关推荐
win10+ubuntu18.04双系统安装/大集合
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验