在高速缓存行中实现动态阵列数据结构的方法和系统的制作方法
【技术领域】
[0001]本发明涉及计算系统,更具体地说,涉及用于在高速缓存行中实现动态阵列数据结构的方法。
【背景技术】
[0002]对于不同规模的公司而言,许多多线程计算机系统或工作负荷变为多项重要技术之一。它们提高计算硬件平台的计算效率和灵活性。但是,仍需要在保持较低硬件工作量的同时实现较高的性能。
【发明内容】
[0003]本发明的实施例的一个目标是提供一种改进的方法、计算机系统和计算机程序产品。所述目标由独立权利要求的主题解决。在从属权利要求中描述有利的实施例。
[0004]此处使用的原子存储操作(ΑΜ0)指对共享数据的读-改-写操作。就一个线程的读-改-写操作在不受另一线程干扰的情况下执行这个意义而言,ΑΜ0是原子的。换言之,对于存取(例如,并发存取)共享数据的线程或处理器而言,每次读取、写入或ΑΜ0存取被原子地执行而不受另一存取的干扰。
[0005]在一方面,本发明涉及一种用于在包括存储装置和控制器的存储系统内的高速缓存行中实现动态阵列数据结构的方法。所述高速缓存行的至少一部分可作为动态阵列数据结构被存取(或者被视为动态阵列数据结构)。
[0006]所述方法包括在所述存储装置中将所述高速缓存行配置为包括元数据字段和元素字段的高速缓存行,其中所述元数据字段包括所述动态阵列数据结构的元数据。所述元素字段可包括所述动态阵列数据结构的每个元素的元素值。
[0007]所述方法进一步包括所述控制器接收对所述动态阵列数据结构执行操作的请求,其中所述请求指示所述高速缓存行在所述存储装置中的位置以及指示指定所述请求的信息。指定所述请求的信息可包括指定所述操作所需的所述动态阵列数据结构的元素的信息。
[0008]所述方法进一步包括所述控制器针对所述操作使用所述信息标识对所述动态阵列数据结构执行的一个或多个动作,其中所述一个或多个动作被编码在所述控制器中;以及响应于接收所述请求,通过执行一个或多个所编码的动作来执行所述请求。
[0009]可将多个动作编码在所述控制器中。所述一个或多个动作的标识可包括从所述多个动作中选择所述一个或多个动作。
[0010]例如,所请求的操作可以是原子存储操作。所接收的请求可以是所述控制器从多个线程接收的对所述动态阵列数据结构执行操作的多个并发请求之一。所接收的并发请求可以按顺序被执行。
[0011]这些特征可以是有利的,因为它们可提供一种简化的方法来存取被存储在存储器中的数据。所述方法可被无缝地集成到现有存储系统中。
[0012]元数据和元素字段可适配单个高速缓存行的事实可促进所述控制器和存储系统的实现。所述存储系统的使用允许最高以所述存储器的容量来配置多个动态阵列。
[0013]另一优点可以是,能够在不需要将被存取的元素的地址的情况下,将所述请求引导到所述动态阵列结构。例如,所述请求可被引导到所述动态阵列数据结构的第一元素、所述动态阵列数据结构的最后元素、以及指定索引处的元素。这样,可实现优于传统ΑΜ0的新ΑΜ0以使用上述动态阵列数据结构。
[0014]进一步的优点可以是存取单个高速缓存行以执行给定操作可以快于存取多个高速缓存行以执行同一操作。
[0015]这些特征可以提供单个接口,以便多个用户或线程例如通过多线程应用来利用所述动态阵列数据结构,在所述多线程应用中,多个线程同时发出存取所述动态阵列数据结构的请求(例如所述请求)。
[0016]根据一个实施例,所述配置进一步包括在所述元数据中定义所述动态阵列数据结构的元素大小;在所述元数据中定义所述动态阵列数据结构中的元素数量,以及在所述元素字段中定义所述动态阵列数据结构中的每个元素的值。
[0017]该实施例可以是有利的,因为它可以向所述控制器提供足够的信息以便自主执行所接收的请求。
[0018]根据一个实施例,所述请求进一步指示所述动态阵列数据结构的元素的元素大小。这可以是有利的,因为所述元数据可能不包括有关所述元素大小的数据。
[0019]根据多个实施例,元数据参数可启用或禁用错误状况的指示。例如,当所述请求指定的元素大小分别小于或大于所述元数据中定义的元素大小时,所述控制器可产生中断。例如,所述控制器可响应于到已具有元素字段所支持的最大数量元素的动态阵列数据结构的压入(push)请求而产生中断。例如,所述控制器可响应于指定不在所述动态阵列数据结构中的元素的索引的设定请求而产生中断。
[0020]根据多个实施例,对于无法被满足的请求,所述控制器可使用预定义的失败值进行应答。例如,所述控制器可响应于指定不在所述动态阵列数据结构中的元素的索引的获取请求而使用预定义的失败值进行应答。根据多个实施例,所述预定义的失败值可以由所述元数据中的可配置字段确定。所述控制器可以返回多个预定义的失败值之一以进一步确定为何无法满足请求。例如,所述元数据还可包括失败弹出参数。所述失败弹出参数可具有可被包括在所述控制器针对所述动态阵列数据结构为空而返回给弹出操作请求者的应答中的值。
[0021]根据一个实施例,所述请求包括多个元素操作请求,所述请求的执行包括执行以下一个或多个动作:读取所述元数据字段的元数据;确定所述动态阵列数据结构中的元素数量;将所确定的元素数量作为应答发送给所述操作的请求者。
[0022]根据一个实施例,所述配置进一步包括在所述元数据中定义头索引和尾索引,从而允许所述元素字段被用作保存所述动态阵列数据结构的元素的环形缓冲区,对于某些请求,这因而避免了元素在所述元素字段内的移动。
[0023]指定所述请求的信息可指定选定元素,其中所述选定元素可被指定为所述动态阵列数据结构中的第一元素、所述动态阵列数据结构中的最后元素、或者所述动态阵列数据结构中位于指定索引处的元素。
[0024]根据一个实施例,所述请求包括针对所述动态阵列数据结构的获取值操作请求,所述获取值操作请求用于获取所述动态阵列数据结构中的选定元素的值,其中所述请求的执行包括执行以下一个或多个动作:读取所述元数据字段的元数据;确定所述元素字段中的所述选定元素在所述存储装置中的位置;使用所述位置读取所述选定元素的值;将所述选定元素的值作为应答发送给所述操作的请求者。
[0025]根据一个实施例,所述请求包括针对所述动态阵列数据结构的弹出操作请求,所述弹出操作请求用于获取值并移除所述动态阵列数据结构中的选定元素,其中所述请求的执行包括执行以下一个或多个动作:读取所述元数据字段的元数据;确定所述元素字段中的所述选定元素在所述存储装置中的位置,其中所述方法进一步包括:使用所述位置读取所述选定元素的值;将所述选定元素的值作为应答发送给所述操作的请求者;以及更新所述高速缓存行,所述更新包括递减所述元数据中的元素数量,以及移动所述元素字段中的元素以将所述选定元素从所述动态阵列数据结构中移除。
[0026]根据一个实施例,所述请求包括设定值操作请求,所述请求为所述动态阵列数据结构中的选定元素提供值;其中所述请求的执行包括执行以下一个或多个动作:读取所述元数据字段的元数据;确定所述动态阵列数据结构中的选定元素在所述高速缓存行的所述元素字段中的位置;以及将所述值写入所述选定元素。
[0027]根据一个实施例,所述请求包括压入值操作请求,所述请求提供要插入所述动态阵列数据结构中的值;其中所述请求的执行包括执行以下一个或多个动作:读取所述元数据字段的元数据;更新所述高速缓存行,所述更新包括递增所述元数据中的元素数量,并移动所述元素字段中的元素以插入所述动态阵列数据结构的选定元素,以及将所述值写入所述选定元素。
[0028]在一个实施例中,所述压入值操作请求可以是基于处理器的条件存储指令的压入ΑΜ0请求,其中包括在请求应答中的条件向用户指示压入是否成功。在又一实施例中,所述压入ΑΜ0请求基于处理器的交换或比较-交换指令,其中所述应答中的值向用户指示压入是否成功。
[0029]所述ΑΜ0请求可以类似于处理器的条件存储指令,或者可以类似于处理器的交换或比较-交换指令。
[0030]根据一个实施例,所述请求包括获取最小值或获取最大值操作请求;其中所述请求的执行包括执行以下一个或多个动作:读取所述元数据字段的元数据;确定所述动态阵列数据结构中的所有元素在所述元素字段中的位置;使用所确定的位置读取所述动态阵列数据结构中的所有元素的值,并且标识具有最小值或最大值的元素;以及将所标识的最小或最大值作为应答发送给所述操作的请求者。
[0031]根据一个实施例,所述请求包括获取最小值或获取最大值操作请求,其中所述请求指定通过将所述动态阵列数据结构的每个元素视为无符号整数、有符号整数或浮点数中的一者,标识具有所述最小值或最大值的元素。
[0032]根据一个实施例,所述请求包括弹出最小值或弹出最大值操作请求,其中所述请求的执行包括执行以下一个或多个动作:读取所述元数据字段的元数据;确定所述动态阵列数据结构中的所有元素在所述高速缓存行中的位置;使用所确定的位置读取所述动态阵列数据结构中的所有元素的值,并且标识具有最小值或最大值的元素;将所标识的最小或最大值作为应答发送给所述操作的请求者,并且更新所述高速缓存行,所述更新包括递减所述元数据中的元素数量,以及移动所述元素字段中的元素以将所标识的元素从所述动态阵列数据结构中移除。
[0033]根据一个实施例,所述配置进一步包括在所述元数据中定义所述动态阵列数据结构的每个元素中的实例字段的位置和大小,所述请求包括弹出实例请求,所述方法进一步包括递减选定元素的实例字段,基于递减的实例大于0而将具有所递减的实例字段的所述选定元素压回所述动态阵列数据结构。
[0034]例如,响应于对多个元素的请求,所述控制器可在应答中返回所述动态阵列数据结构中的多个元素,其中包括所有实例。
[0035]根据一个实施例,所述请求与单个加载指令或单个存储指令相对应,其中所述单个加载指