没有合适的资源?快使用搜索试试~ 我知道了~
×软件X 12(2020)100617原始软件出版物badcrossbar:用于计算和绘制无源交叉阵列中的电流和电压的Python工具Adnan Mehonic Dovydas Joksas英国伦敦大学学院电子和电气工程系ar t i cl e i nf o文章历史记录:收到2020年收到修订版2020年10月28日接受2020年关键词:PythonCrossbar忆阻器a b st ra ct在实现具有类似于阵列的体系结构的系统时,Crossbar阵列是一种流行的解决方案随着神经形态工程领域的最新发展,交叉开关现在通常用于实现人工神经网络,或者更一般地,用于在硬件中执行然而,存在于所有交叉杆中的互连电阻可导致与这些结构的预期行为的显著偏差在这项工作中,我们提出了badcrossbar-一个开源的工具,用于计算在这种非理想的无源交叉阵列的电流和电压此外,该软件包允许轻松地可视化这些结构的分支和节点上的©2020作者由爱思唯尔公司出版这是CC BY许可下的开放获取文章(http://creativecommons.org/licenses/by/4.0/)中找到。代码元数据当前代码版本v1.0.1此代码版本所用代码/存储库的永久链接https://github.com/ElsevierSoftwareX/SOFTX-D-20-00023法律代码许可证MIT使用git的代码版本控制系统使用Python 3的软件代码语言、工具和服务编译要求、操作环境依赖性和依赖性:Python包numpy、scipy、pathvalidate、sigfig和pycairo。操作系统:Linux,MacOS,Windows.如果可用,可链接到开发人员文档/手册Sphinx代码文档,网址为https://github.com/joksas/badcrossbar/tree/master/docs,而更用户友好的介绍可以在GitHub存储库的主页https://github.com/joksas/badcrossbar中找到。支持电子邮件,如有疑问,请发送ucl.ac.uk1. 介绍在最一般的定义中,交叉开关阵列是具有m个输入和n个输出的结构,产生m个n个交叉的2D网格。输入被施加到被称为字线的导线。从被称为位线的导线获得输出。 器件被放置在字线和位线的交叉处,如图所示。凌晨1即使在它们的早期实现中,交叉开关阵列也适用于阳离子的范围从简单的控制信号流[1]*通讯作者。电子邮件地址:ucl.ac.uk(D.Joksas),ucl.ac.uk(A.Mehonic)。https://doi.org/10.1016/j.softx.2020.100617进行数学运算[2]。交叉开关阵列器件的矩阵式排列使其能自然地进行某些线性代数运算。具体地,交叉开关阵列能够计算这可以通过采用具有可变电导的模拟两端器件来实现,例如忆阻器[3]。图图1B示出了交叉开关阵列(其中交叉开关器件被描绘为忆阻器)的电路图。由相邻节点(描绘为黑点)界定的字线和位线段(如交叉开关装置)可具有电阻。然而,如果这些段(我们将其称为互连)的电阻可以忽略,则输出电流(描绘为I1,I2,. . . 图交叉杆阵列的电导矩阵(图1B)是所施加电压的矢量与交叉杆器件的电导矩阵的乘积。执行此功能的交叉阵列通常称为点积引擎(DPE)。2352-7110/©2020作者。 由Elsevier B.V.出版。这是一篇开放获取的文章,使用CC BY许可证(http://creativecommons.org/licenses/by/4.0/)。可在ScienceDirect上获得目录列表SoftwareX期刊主页:www.elsevier.com/locate/softxD. Joksas和A. 梅霍尼奇软件X 12(2020)1006172×()下一页M()==××()==WL我()下一页()下一页()==Fig. 1. crossbar阵列的结构。(A)字线、位线和交叉开关器件的物理配置。在通常的方法中,电压施加在一个字线的一端接地,而位线的一端接地。(B)忆阻交叉阵列的电路图节点被描绘为黑点。随着忆阻器件的发展[3,4],DPE的实际实现变得更加可行。因为忆阻器件能够逐渐改变电导[5],所以忆阻交叉阵列可以用于对矩阵条目进行编码。虽然电导只能是正数,但可以通过使用忆阻器对来编码负数[6,7]。由于其灵活性,DPE现在经常用于内存计算,最值得注意的是在忆阻神经网络的实现中[8]。然而,这样的系统仍然经常受到交叉杆阵列的非理想性质的限制-互连的不可忽略的电阻可以显著地影响性能。计算交叉阵列中的电流和电压对于理解它们在非理想条件下的行为是必不可少的。因此,自然地,在过去[9]中已经仔细分析了无源交叉杆阵列中的线路电阻效应。然而,据我们所知,没有开源的上下文无关的工具可用于分析交叉杆阵列中的线电阻效应。例如,当应用多组输入时,能够计算交叉杆阵列的输出电流将在忆阻神经网络的模拟中有用[10]。计算节点电压或电流在其他分支而不是输出的将是有用的分析线电阻或潜路径电流。Serbian等人已经研究了无选择器交叉杆阵列内器件电阻状态的准确读出问题,并得出结论,即使对于较小的交叉杆,线路电阻也很重要(12 12)[11]。已经提出了先进的映射或补偿方案来缓解该问题[12]。此外,我们的模拟工具可以补充对各种影响的分析,例如交叉开关器件的缺陷(及其缓解),这些在过去已经得到了很好的研究[13此外,可视化电流和电压的分布纵横阵列中的年龄可以提供额外的洞察力。尽管交叉阵列中的器件以矩阵状的方式排列,但它们并不完整。除了器件之外,还有字线和位线分支,它们一起形成3 × m × n个唯一的分支(见图1)。(1)通过电流流动。此外,有2×m×n个唯一节点,每个节点电流定律(KCL)和欧姆在交叉杆阵列的特定情况下,由于这些阵列的简单架构,可以容易地为任意数量的字线m和任意数量的位线n大多数电路模拟器使用节点分析(或其变体)来分析电路,并且在过去它已被应用于交叉杆阵列[9]。我们将简要介绍这种方法。如果互连电阻非零,则存在2个n个未知节点电压必须求解,如图所示。凌晨2可以通过将KCL应用于流入/流出特定节点的电流(如图2对于m, n>1的情况,我们可以使用等式(1)为第i个字线和第j个位线的交叉点处的字线节点和位线节点建立KCL等式(1)a、b和(1)c、d。IWL(i,j)−IWL(i,j+1)−ID(i,j)=0对于JN<(一)IWL(i,j)−ID(i,j)=0对于j=n(一)乙ID(i,j)−IBL(i,j)=0对于i=1(1c项)ID(i,j)+IBL(i−1,j)−IBL(i,j)=0对于i>1(1天)使用欧姆通过这样做和重新排列,我们得到Eq。(2)2 G WL + G(i,j)V WL(i,j)GVfor j1(2a)−GWLVWL(i,j+1)−G(i,j)VBL(i,j)2GWL+G(i,j)VWL(i,j)−GWLV WL(i,j−1)−GWLV WL(i,j+1)=0 for 1jn(2b)<<−G(i,j)VBL(i,j)GWL+G(i,j)VWL(i,j)0 forj n (2c)−GWLVWL(i,j−1)−G(i,j)VBL(i,j)GBL+G(i,j)VBL(i,j)其可以与电压值相关联可视化分支中的电流和电压(或任何其他数值变量)−G(i,j)VWL(i,j)-GBLVBL(i+1,j)i=1时=0(2d)和交叉阵列的节点上可以帮助理解这些结构的性质。2. 问题和背景建立方程来求解只包含无源元件的电路中的电流和电压,只需要基尔霍夫2GBL+G(i,j)−G(i,j)VWL(i,j)−GBLV BL(i−1,j)=0 for 1im(2e)<<−GBLVBL(i+1,j)2GBL+G(i,j)VBL(i,j)0 fori m(2f)−G(i,j)VWL(i,j)−GBLV BLD. Joksas和A. 梅霍尼奇软件X 12(2020)1006173(i−1,j)D. Joksas和A. 梅霍尼奇软件X 12(2020)1006174图二. 具有m条字线和n条位线的交叉开关阵列的标记电路图。(A)字线(橙色)和位线(蓝色)上节点的电压。(B)流经器件(绿色)和互连的电流沿着字线(红紫色)和位线(天蓝色)。假设字线电流向右流动,位线电流向下,器件电流向右对角向下。(For在该附图图例中对颜色的引用的解释,读者可参阅本文的网页版因为Eq的左边。(2)(三)、GV=I(3)其中G是包含电导的系数矩阵,V是节点电压的矢量(或矩阵,如果施加多于一组电压),并且I是常数的矢量(或矩阵),在这种情况下,是已知的电流。可以使用常规线性代数方法求解节点电压V。分支电流可以通过应用欧姆定律来计算。在一种特殊情况下,互连或这两者具有零电阻,唯一节点的数量减少。在这种情况下,必须应用KCL计算通过完美导电互连的未知电流,因为不可能在零电阻的元件上应用欧姆3. 软件框架badcrossbar包在Python 3中实现。选择这种编程语言是因为它的流行,直观的语法和开源软件包的可用性。具体来说,它提供了numpy或scipy等软件包,这些软件包可以有效地操作计算交叉阵列中的电流和电压所需的矢量和矩阵。确实,Python是一种解释型语言,与编译型语言相比,然而,numpy和scipy主要是用C编写的[16],因此由于纯Python代码,性能可能只有很小的下降-这两个库处理badcrossbar中最重的计算。最后,重要的是要注意Python现在被广泛使用badcrossbar使用的numpy数组很容易转换为最流行的机器学习框架所使用的数据结构,例如TensorFlow或PyTorch,这些框架在模拟基于crossbar的神经网络时经常使用。3.1. 软件构架badcrossbar包含两个子包:badcrossbar.computing和badcrossbar.plotting。前者通过传递给函数bad-crossbar.compute()的参数来实现交叉阵列 中 电 流 和 电 压 的 计 算 。 后 者 用 于 根 据 传 递 给 函 数badcrossbar.plot.branches ( ) 和 badcrossbar.plot.nodes()的值为这些数组的分支和节点着色。3.2. 软件功能3.2.1. 计算badcrossbar.compute()计算电流,交叉阵列中的电压。作为一个输入,它需要施加的电压,电阻的交叉器件和电阻的interconnects。互连电阻可针对沿着字线及位线的互连件单独指定,或可针对沿着字线及位线的互连件单独可以为两种类型的互连提供价值。坏交叉杆。计算采用节点分析,因此大部分计算时间花费在计算节点电压上。然而,如果不打算使用所有的分支电流,子包能够计算的节点电压,可以使用可选的关键字参数来返回None,而不是电压值和一些电流值,以节省内存(节省的时间通常是最小的)。最后,可选的关键字参数可用于控制在各个计算阶段显示的消息。参数的完整描述可以在badcrossbs.compute()的文档字符串中找到。compute()的输出是一个命名的元组,包含字段电压和电流。这两个字段本身都被命名为元组。 电压具有分别包含字线和位线上的节点电压的字段word_line和bit_line(在图1中可视化)。2 A)。电流具有包含流过器件、字线互连和位线互连的电流的场device、word_line和bit_line。 2 B)。 它还具有现场输出D. Joksas和A. 梅霍尼奇软件X 12(2020)1006175××其包含作为2D阵列的输出电流。它本质上表示与最后一行currents.bit_line中的电流相同的信息,只是格式更方便。假设具有m个字线、n个位线和p组施加电压的交叉杆,如果p=1,则除了输出电流之外的所有计算的电压和电流将是形状为m×n的阵列,并且如果p>1,则为形状为m×n×p的阵列另一方面,输出电流将总是形状为p×n的阵列。3.2.2. 密谋函数badcrossbar.plot.branches()和badcrossbar.plot.nodes()接受与不同类型的分支或节点相关联的单个数组,或包含电流和电压的命名元组(通常由函数badcrossbar.compute()产生)。虽然最有可能使用这些函数绘制的变量是电流和电压,但传递的数组可以与任何类型的数值变量相关联。重要的是,大量可选的关键字参数允许修改生成的图. 导线、设备或节点的宽度、颜色条的配色方案以及图中的其他元素都可以更改。 由于这些函数生成矢量图(PDF格式),因此可以在任何矢量图形处理程序中轻松修改它们。因此,提供的可选关键字参数主要允许修改一旦生成diagram就难以更改的参数。参数的完整描述可以在badcrossb.plot.branches()和badcrossb.plot.nodes()的文档字符串中找到。4. 执行情况和实证结果4.1. 计算当计算交叉阵列中的电流和电压时,该过程中有三个主要步骤。首先,有必要填充矩阵G和I(在代码中称为数组g和i,以符合Python命名约定),如等式2所示。(三)、这是通过首先初始化空数组(g也使用稀疏表示),然后使用Eq.(2)一旦完成,两个数组被传递到scipy.sparse子包的函数linalg.spsolve(),它求解矩阵V(代码中为v最后,将阵列v重新整形为方便的形式,然后通过在每个分支中应用欧姆定律来计算电流。第二步通常是计算过程中最耗时的部分。图 3显示了计算形状为n n的方形交叉条中的电流和电压所需的中值时间。我们看到,在一定的时间阈值以上,曲线变成线性的;给定这与解线性方程组的理论是一致的[17]。我们还发现,通常有一个最佳数量的电压集,应提供的时间。例如,在图的情况下。 3,一次提供1,000组施加的电压将导致比在10个单独的批次中提供它们(每个批次的大小为100)更快的计算。但是,一次提供10,000个集合将导致比在10个单独的批次中提供它们(每个批次的大小为1,000)更慢的计算这些权衡很可能与内存管理有关,因此最佳正因为如此,我们没有优化我们软件的这一特定方面,而是将选择权留给了个人用户。4.2. 密谋绘图功能使用cairo图形库实现所有元素(分支、节点、颜色条和标签)都是一个接一个地绘制的,其中使用第3.2.2小节中提到的可选参数描述了设置。虽然cairo可以在所有主要的操作系统(Linux,MacOS,Windows)上使用,但在Win-XP上安装可能会更困难。正因为如此,badcrossbar包被构建为使得计算子包可以独立于绘图子包使用,即,而不安装它。5. 说明性示例假设我们想计算交叉开关阵列中多组输入上的分支电流,然后绘制所有这些应用输入集上的平均值。下一篇计算在四组施加电压上的3 × 5交叉阵列中的分支电流和节点电压。然后绘制这四组输入上的平均支路电流。执行时,此代码生成一个名为“Example.pdf”的PDF文件;其内容如图所示。 四、Importbadcrossbar#Appliedvoltagesinvolts.applied_voltages=[[1.5,4.1,2.6,2.1],[2.3,4.5,1.1,0.8],[1.7,4.0,3.3,1.1]]#Deviceresistances 我不知道。电阻=[[345,903755257,646],[652、401 508一百六十六,454],[442、874,190,244,635]]#Interconne ctresistanceinoms. r_i=0.5#Comeonputing thesolution.solution=badcrossbar. compute(外加电压,电阻,r_i)#在所有#个输入集上执行一个虚拟缓存。#我们都失去了一个客户端文件和一个文件的#颜色栏。因为传递的所有数组都是#3D的,所以将在第三个数组上创建一个虚拟数组#AUTOMATICALLY.badcrossbar.plot. 分支机构(currents=solution. current s,filename=' E x amp l e ',axis_label=更多示例可以在badcrossbar包的GitHub存储库中的examples此外,文件夹测试包含许多测试,这些测试检查并与Qucs电路仿真软件中的等效电路进行了比较。测试既包括传统的配置,以及一个特殊的情况下,交叉杆只包括一个单一的设备。最后,还有一些测试可以验证某些单个函数的输出或行为。6. 影响badcrossbar是第一个用于分析电阻交叉阵列中线路电阻效应的开源Python软件包。该软件包能够计算电压和电流的问题即使在相对大的交叉杆阵列和大量施加的输入的情况下,也可以在几秒或几分钟内完成。这在模拟基于交叉杆的神经网络时特别有用,因为这种计算对于准确评估输出是必要的D. Joksas和A. 梅霍尼奇软件X 12(2020)1006176×图三. 纵横阵列中电流和电压的计算性能。显示了形状的交叉条的中位时间(每个数据点为10个)n×n,适用于不同数量的施加电压组见 图 4 。 在 交 叉 开 关 阵 列 的 不 同 分 支 中 给 定 多 组 电 流 时 , 由badcrossbar.plot.branches()生成的PDF文件的输出。由于阵列包含来自多组施加电压的数据,因此绘制所有组的这些结构和大量的输入必须进行测试[10]。此外,绘图功能可以帮助可视化物理变量并发现趋势,例如在交叉阵列中电流减小倾向于最严重的地方。我们相信,这个包将是有用的,在模拟和交叉阵列的设计。7. 结论我们提出了一个Python包,用于计算交叉阵列中的电流和电压,以及在这些结构上绘制它们(或任何其他数值变量)。使用numpy可以轻松地与各种软件包集成,而在生成的图表中使用矢量图形则可以使用外部程序对其进行修改在未来,我们计划让用户更多地控制如何在交叉阵列上施加电压,并允许指定各个互连的电阻此外,我们计划添加更多用于指定绘图行为的选项,以及允许导出为其他格式,例如Tik Z.竞合利益作者声明,他们没有已知的竞争性财务利益或个人关系,可能会影响本文报告的工作确认A.M.感谢联合王国皇家工程学院根据研究奖学金计划提供的资金,D.J.承认来自工程和物理科学研究委员会,英国(参考学生资助。2094654)。引用[1]WelchDF,Scifres DR,Waarts RG,Hardy AA,Mehuys DG,O'Bri en S. NN光交叉开关矩阵,美国专利5,255,332(Oct.2005),19 1993)。[2]Steinbuch K,Piske UA.学习矩阵及其应用。 IEEE跨电子计算1963;(6):846-62. http://dx.doi.org/10.1109/PGEC的网站。1963.263588。[3] Strukov DB,Snider GS,Stewart DR,Williams RS.失踪的小行星被发现.自然2008;453(7191):80-3. http://dx.doi.org/10.1038/nature06932.[4]Mehonic A,Sebastian A,Rajendran B,Simeone O,Vasilaki E,KenyonAJ.忆阻器-从内存计算、深度学习加速和尖峰神经网络到未来的神经形态和生物启发计算。AdvIntellSyst2020;2(7):2000085.http://dx.doi.org/10.1002/aisy.202000085.[5]Jo SH,Kim K-H,Lu W.基于半忆阻系统的高密度交叉阵列。Nano Lett2009;9(2):870-4. http://dx.doi.org/10.1021/nl8037689.[6]李波,单英,胡明,王英,陈英,杨华。基于忆阻器的近似计算。在:国际低功 耗 电 子 学 和 设 计 研 讨 会 。 IEEE;2013 年 , 第 242-7 页 。http://dx.doi.org/10.1109/ISLPED.2013的网站。6629302。[7] Zamanidoost E,Bayat FM,Strukov D,Kataeva I.忆阻交叉开关电路模式分类器的曼哈顿规则训练。2015年IEEE第9届智能信号处理国际研讨会IEEE; 2015年,第1-6页。http://dx.doi.org/10.1109/WISP.2015.7139171网站。[8]Ambrogio S,Narayanan P,Tsai H,Shelby RM,Boybat I,Nolfo CD等人 , 使 用 模 拟 记 忆 的 等 效 准 确 性 加 速 神 经 网 络 训 练 。 Nature 2018;558(7708):60-7. http://dx.doi.org/10.1038/s41586-018-0180-5.[9]Chen A.一个全面的交叉杆阵列模型,解决了线路电阻和非线性器件特性。IEEE Trans Electron Devices2013;60(4):1318-26.[10]Joksas D,Freitas P,Chai Z,Ng W,Buckwell M,Li C,et al. Committeemachines-a universal method to deal with non-idealities in memristor- basedneural networks. Nature Commun 2020;11 ( 1 ) . http://dx.doi.org/10 的 网站。1038/s41467-020-18098-0。[11][10] Serbian A,Redman-White W,Papavassiliou C,Prodromakis T.无选择器RRAM阵列中单个元件电阻状态的实际确定。IEEE Trans Circuits Syst IRegul Pap 2015;63(6):827-35. 网址://dx.doi.org/10.1109/TCSI.2015.2476296网站。[12] Hu M,Strachan JP,Li Z,Williams SR.作为计算内存的点积引擎加速机器 学 习 算 法 。 第 17 届 高 品 质 电 子 设 计 国 际 研 讨 会 。 2016 ,http://dx.doi.org/10.1109/ISQED.2016.7479230。[13] Tunali O,Morgul MC,Altun M.忆阻器交叉开关的容错逻辑综合IEEEMicro 2018;38(5):22-31. http://dx.doi.org/10.1109/MM.2018.053631138网站。[14]Tunali O,Altun M.可重构纳米交叉阵列容错算法研究综述。ACM ComputSurv 2017;50(6):1-35. http://dx.doi的网站。org/10.1145/3125641。[15]Peker F,Altun M. 一种快速爬山算法用于纳米交叉阵列的缺陷和变化容限逻辑 映 射 。 IEEE 跨 多 尺 度 计 算 系 统 2018;4 ( 4 ) : 522-32 。http://dx.doi.org/10.1109/TMSCS的网站。2018.2829518。[16]Harris CR , Millman KJ , van der Walt SJ , Gommers R , Virtanen P ,Cournapeau D , et al. Array programming with numpy. Nature 2020;585(7825):357-62. http://dx.doi.org/10.1038/s41586-020-2649-2网站。[17] Pan V.线性方程组算法的复杂性。解线性代数方程的计算机算法Springer;1991,p. 27http://dx.doi.org/10.1007/978-3-642-76717-3_2网站。
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功