首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 并行算法与向量指令集的实战经验

    最近在优化一个大规模数据处理系统时,遇到了性能瓶颈,迫使我深入研究了并行算法设计和向量指令集优化。这两个月的"折腾"让我收获颇丰,今天就来分享一下这段实践经历和一些思考。 这时,一位同事提醒我可以尝试使用向量指令集。老实说,虽然之前听说过SIMD(单指令多数据),但从未深入研究过。抱着试一试的心态,我开始学习如何利用现代处理器的向量指令集向量指令集允许CPU在一个时钟周期内对多个数据执行相同的操作,特别适合数组运算、图像处理等场景。 主流向量指令集的实践对比在学习过程中,我尝试了几种不同的向量指令集,总结如下:指令集支持平台数据宽度实际加速效果开发难度SSE4.2较老Intel/AMD128位2-3倍中等AVX2现代x86256位3 Eigen, IPP提供优化的向量操作Eigen接口清晰,IPP性能出色编译器GCC, Clang自动向量化Clang的诊断信息更友好总结与思考通过这次实践,我深刻体会到并行算法设计和向量指令集对现代高性能计算的重要性

    34210编辑于 2025-07-26
  • 来自专栏杨熹的专栏

    TensorFlow-9-词的向量表示

    http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/word2vec.html 这一节是关于 word2vec 模型的,可以用来学习词的向量表达 /word2vec/word2vec_basic.py 词向量就是用一个具有一定维度的向量来表示一个单词,这样在分布式假设的思想下,我们可以认为出现在相同上下文情景中的词汇都有类似的语义。 最后还可以用 t-SNE 来可视化最后的词向量间的距离关系,可以发现具有相似信息的单词距离较近。 ? ---- 1. 用 SGD 优化器去优化目标, valid_embeddings 是用来检验的 16 个单词的词向量表示, similarity 是定义验证单词与词汇表中所有单词的相似度: ? 5. 最后用 TSNE 将 128 维的词向量降到 2 维,并展示频率最高的 100 个单词: ?

    1.1K70发布于 2018-04-03
  • 来自专栏WD学习记录

    机器学习 学习笔记(9)支持向量

    为法向量,决定了超平面的方向,b为位移项,决定了超平面与原点之间的距离。 样本中任意点x到超平面的距离为 ? ,假设超平面能够正确分类训练样本,即对于 ? , ? ,有 ? ,若 ? ,则 ? 距离样本超平面最近的几个训练样本使得等号成立,被称为支持向量,两个异类支持向量到超平面的距离之和为: ? ,被称为间隔。 欲找到具有最大间隔的划分超平面,也就是要找到能满足上面约束的w和b,使得 ? 确定偏移项b的方法: 对所有支持向量: ? ,其中 ? 为所有支持向量的下标集。理论上可以选择任意支持向量求解b,但现实任务中采用一种更加鲁棒的做法,使用所有支持向量求解平均值: ? 。 这就是常见的软间隔支持向量机。 ? , 对偶问题: ? ? KKT条件为: ? ? ? ? ? ? 软间隔支持向量机的最终模型仍然仅与支持向量有关,即通过采用hinge损失函数保持了稀疏性。 # 如果支持向量太少,就可能会得到一个很差的决策边界 # 如果支持向量太多,也就相当于每次都利用整个数据集进行分类 参考: 《机器学习》 《统计学习方法》 《机器学习实战》

    89120发布于 2018-09-03
  • 来自专栏全栈程序员必看

    git指令集

    Git 是分散式的版本控制系統, 從架設、簡易操作、設定, 此篇主要是整理 基本操作、遠端操作 等.

    56120编辑于 2022-08-23
  • 来自专栏乐行僧的博客

    java指令集

    1.栈和局部变量操作 ,将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int类型常量1压入栈 iconst_2 将int类型常量2压入栈 iconst_3 将int类型常量3压入栈 iconst_4 将int类型常量4压入栈 iconst_5 将int类型常量5压入栈 lconst_0 将long类型常量0压入栈 lconst_1 将long类型常量1压入栈 fconst_0 将float类型常量0压入栈 fconst_1 将float类型常量1压入栈 dconst_0将double类型常量0压入栈 dconst_1 将double类型常量1压入栈 bipush 将一个8位带符号整数压入栈 sipush将16位带符号整数压入栈 ldc把常量池中的项压入栈 ldc_w 把常量池中的项压入栈(使用宽索引) ldc2_w 把常量池中long类型或者double类型的项压入栈(使用宽索引)

    56510编辑于 2022-02-24
  • 来自专栏全栈程序员必看

    luaJIT指令集介绍

    luaJIT指令集介绍 —————-目录————— (a)相关ByteCode定义介绍 (b)lj_bc.h和lj_bc.c (1)字节码format简介 (2)操作数的相关范围定义,和部分定义常量 (8)参数类型校验 这里的参数校验定义为 a 0~2 位 b 3~6位 c 7~10位 d 与c相同,但是有hasd这个校验步骤,就是检验b是不是modeNone mm 11位以后 到这里全部的指令集定义已经完全介绍完毕

    1.2K20编辑于 2022-11-08
  • 来自专栏同步文章

    jvm指令集

    dup_x1 复制栈顶部一个字长的内容,然后将复制内容及原来弹出的两个字长的内容压入栈

    48220编辑于 2022-10-25
  • 来自专栏林欣哲

    ISA指令集

    今天的内容来源于《计算机系统概论》的第4章,介绍的指令是作者根据x86指令简化设计的一个自称为LC-3(Little Computer-3 edition)的指令集。 bit[15:12]=0001表示NOT操作,bit[11:9]表示目标寄存器,用于存计算后的操作码,bit[8:6]表示来源寄存器,用于从来源寄存器取出操作数做运算。

    1.9K70发布于 2018-04-10
  • 来自专栏Android开发经验分享

    Dalvik指令集

    转载请以链接形式标明出处: 本文出自:103style的博客 对于 Android 4.4 之前的系统, 可以在 Android 源码 davik/libdex/DexOpcodes.h中找到完整的Dalvik指令集 对于 Android 4.4 及之后的以 ART 主导的系统, 可以在 Android 源码 art/runtime/dexinstuctionlist.h中找到完整的Dalvik指令集。 有以下两种指令集: iinstanceop vA, vB, field@CCCC : 操作普通字段,以i开头 – iget读,iput写 sstaticop vAA, field@CCCC : 操作静态字段 sget-char 、iput-char 、sput-char iget-short 、sget-short 、iput-short 、sput-short 在 Android 4.0 中, Dalvik指令集增加了以下两类指令

    1K20编辑于 2022-12-19
  • 来自专栏全栈程序员必看

    ARM指令集

    ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令: B 跳转指令 BL 带返回的跳转指令 BX 带状态切换的跳转指令 BLX BLX指令的格式为: BLX 目标地址 BLX指令 从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态有ARM状态切换到Thumb状态,该指令同时将PC的当前内容保存到寄存器 因此,当子程序使用Thumb指令集,而调用者使用ARM指令集时,可以通过BLX指令实现子程序的调用和处理器工作状态的切换。 Thumb指令集合 Thumb指令集是ARM指令集的一个子集,允许指令编码为16位的长度,Thumb指令集在保留32位代码优势的同时,大大节省了系统的存储空间。 但使用Thumb指令集合的代码有以下特点: 1)比ARM代码更节略存储空间。 2)使用的指令条数比ARM代码多。

    1.6K20编辑于 2022-07-05
  • 来自专栏全栈程序员必看

    eBPF指令集_sse3指令集

    寄存器及调用约定 通用的RISC指令集,11个64位寄存器,一个程序计数器和512字节的栈空间构成。 10个通用寄存器+1个只读FP(帧指针寄存器),所有寄存器64bit宽。 R0:函数返回值、程序退出值 R1-R5:函数调用参数 R6-R9:被调用者保存函数(调用保留的)寄存器 R10:只读FP用于访问栈 R0-R5是临时寄存器,eBPF程序在调用之间将它们从寄存器转移到内存或从内存转移到寄存器

    72920编辑于 2022-11-08
  • 来自专栏机器学习与统计学

    100天搞定机器学习|Day9-12 支持向量

    支持向量机(support vector machines)是一种二分类模型,基本模型是定义在特征空间上的间隔最大化的线性分类器,通过引入核函数,最终转化为一个凸二次规划问题来求解。 支持向量机也可以作为非线性分类器来解决非线性数据集的分类问题。 支持向量机诞生于1963年,理论及应用都非常成熟,对初学者来说是绕不开的一个算法,在机器学习/数据挖掘的面试当中更是经典中的经典,非常能够体现面试者的数学功底以及对机器学习算法理解的程度。 支持向量机内涵诸多数学思想,比如几何思想、抽象思维、转化思想等等,学习SVM是一个非常好的实践数学思想的过程。 之前发过一篇SVM数学推导原理的文章:[算法系列]SVM的数学推导原理 各种博客或公众号都有很多类似文章,向大家推荐一个个人看过最靠谱的一篇: 《支持向量机通俗导论(理解SVM的三层境界)》 https

    43230发布于 2019-04-23
  • 来自专栏iOS开发~

    iOS_Apple 指令集

    文章目录 Apple 指令集 ARM架构 指令集对应设备 Architectures Build Active Architecture Only Valid Architectures Apple 指令集 ARM架构 ​ ARM架构,过去称作高级精简指令集机器(英语:Advanced RISC Machine,更早称作艾康精简指令集机器,Acorn RISC Machine),是一个精简指令集(RISC) (RISC) Intel处理器:使用复杂指令集(CISC) ARM处理器指令集 ARM指令集:计算机ARM操作指令系统 armv6、armv7、armv7s、arm64、arm64e 都是arm处理器的指令集 (比如:你的设备是armv7s指令集,那么它可以兼容运行比armv7s版本更低的指令集:armv7、armv6,只是使用armv6指令集时无法充分发挥其性能,即无法使用armv7指令集中的新特性) Xcode4.5 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-huVqBf8u-1613575098536)(blob:file:///e6cddb72-6605-4ffb-943a-69f19f9ec675

    1.8K20编辑于 2022-07-20
  • 来自专栏Node Python Go全栈开发

    使用 Makefile 构建指令集

    使用 Makefile 构建指令集 make 是一个历史悠久的构建工具,通过配置 Makefile 文件就可以很方便的使用你自己自定义的各种指令集,且与具体的编程语言无关。 使用 Makefile 构建指令集可以很大的提升工作效率。

    1.1K10发布于 2020-07-17
  • 来自专栏叶子的开发者社区

    MIPS指令集实验

    首先先初始化一些数据,包括需要排序的数据和数据的长度以及需要输出的字符串和CONTROL和DATA的地址 .data array: .word 8,6,3,7,1,0,9,4,5,2 size: . r5,3 dadd r9,r4,r9 lw r8,0(r9) lw r10,8(r9) sw r10,0(r9) sw r8,8(r9) lw r31,0(r29) lw r10,4(r29 r10,-1 daddi r1,r0,0 loop2: daddi r2,r0,0 loop3: dsll r3,r2,3 lw r8,array(r3) daddi r3,r3,8 lw r9, array(r3) slt r3,r8,r9 bnez r3,fine dadd r5,r2,r0 daddi r4,r0,array jal swap fine: daddi r2,r2,1 r5,3 dadd r9,r4,r9 lw r8,0(r9) lw r10,8(r9) sw r10,0(r9) sw r8,8(r9) lw r31,0(r29) lw r10,4(r29

    54540编辑于 2023-10-09
  • 来自专栏JusterZhu

    IL指令集--box

    再往下一层可以通过一些反编译工具查看IL指令集,可以看到一个box指令,那这个指令做了什么事情呢? int i = 123; object o = i; // 箱装操作 IL指令集: .locals init ( [0] int32, [1] object ) // 初始化变量i IL

    48330编辑于 2023-09-18
  • 来自专栏Postgresql源码分析

    Postgresql引入SIMD指令集

    snapshot->xcnt; i++) { if (TransactionIdEquals(xid, snapshot->xip[i])) return true; patch引入SIMD指令集

    74530编辑于 2022-11-21
  • 来自专栏用户7721898的专栏

    什么是cpu指令集

    当我们查看cpu的时候在最下面的就是cpu指令集 ? CPU指令集是什么? CPU指令集都是存储在CPU内部的,主要是对CPU运算进行优化、指导的硬程序,有了这些CPU指令集,CPU就能够更快速高效的工作。 一般来说,预设存储的指令越多,那么CPU就越“聪明”,预设存储的指令越先进,CPU也就越高级,预设的很多指令集中在一起,那么就是所谓的“指令集”。 CPU指令集的作用 CPU指令集的多少,对CPU的效率影响较大,但是对于普通用户来说,功能几乎并不会有影响。 文章结束,以上就是关于CPU指令集是什么?

    1.9K20发布于 2021-03-02
  • 来自专栏cwl_Java

    快速学习-EVM指令集

    EVM指令集 所有的指令都是针对"256位的字(word)"这个基本的数据类型来进行操作 具备常用的算术、位、逻辑和比较操作,也可以做到有条件和无条件跳转 合约可以访问当前区块的相关属性,比如它的块高度和时间戳

    73410发布于 2020-04-13
  • 来自专栏全栈程序员必看

    ARM指令集介绍「建议收藏」

    ARM指令介绍 ARM 指令集是针对ARM体系架构设计的指令。 所以可以组合出9种寻址方式: [ < Rn >,#+/-< offset_12>] [ < Rn>,+/-< Rm>] [< Rn>,+/-< Rm>,< shift>#< shift_imm>] [ 指令有B、BL、BLX、BX L将PC的值保存到LR寄存器中,X带状态切换的跳转(可以切换到thumb指令集,目标地址处的指令类型有目标地址的bit[0]决定)。 ARM指令集中的除法运算是通过协处理器来实现的,所以没有除法算术的指令。 AND、ORR、EOR、BIC分别是按位逻辑与、或、异或、清除操作。 在ARM指令集中立即数使用#标记。

    3.6K10编辑于 2022-11-15
领券