CN115878321A - 一种基于gpu加速的文件搜索方法 - Google Patents
一种基于gpu加速的文件搜索方法 Download PDFInfo
- Publication number
- CN115878321A CN115878321A CN202211607406.7A CN202211607406A CN115878321A CN 115878321 A CN115878321 A CN 115878321A CN 202211607406 A CN202211607406 A CN 202211607406A CN 115878321 A CN115878321 A CN 115878321A
- Authority
- CN
- China
- Prior art keywords
- file
- character string
- gpu
- container
- lock
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 46
- 230000001133 acceleration Effects 0.000 title claims abstract description 14
- 230000015654 memory Effects 0.000 claims abstract description 43
- 238000004364 calculation method Methods 0.000 claims abstract description 8
- 238000012545 processing Methods 0.000 claims abstract description 7
- 230000001360 synchronised effect Effects 0.000 claims description 19
- 230000006870 function Effects 0.000 claims description 17
- 230000008569 process Effects 0.000 claims description 5
- 238000012217 deletion Methods 0.000 claims description 3
- 230000037430 deletion Effects 0.000 claims description 3
- 239000012634 fragment Substances 0.000 claims description 2
- 238000012544 monitoring process Methods 0.000 claims description 2
- 238000009987 spinning Methods 0.000 claims 1
- 230000007246 mechanism Effects 0.000 description 11
- 230000004048 modification Effects 0.000 description 10
- 238000012986 modification Methods 0.000 description 10
- 230000008859 change Effects 0.000 description 8
- 230000009471 action Effects 0.000 description 5
- 238000012360 testing method Methods 0.000 description 5
- 238000011160 research Methods 0.000 description 2
- 101000695861 Arabidopsis thaliana Brefeldin A-inhibited guanine nucleotide-exchange protein 5 Proteins 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于GPU加速的文件搜索方法,涉及文件搜索领域,所述方法包括:磁盘文件处理步骤和磁盘文件搜索步骤,本发明通过对系统中的文件夹和文件进行索引,并采用内存偏移进行随机访问,利用GPU进行并行计算,不同于传统的文件搜索采用大量的循环来进行字符串匹配,大幅提高了文件搜索效率。
Description
技术领域
本发明涉及数据处理领域,具体地,涉及一种基于GPU加速的文件搜索方法。
背景技术
随着硬盘容量越来越大,用户的文件越来越多,越来越难以管理,Windows现有的文件搜索通过递归遍历文件系统中的文件夹,对每个文件夹和文件的名字进行匹配,速度很慢,等待搜索结果需要很长时间,对于大量文件搜索甚至可能直接卡死。现有技术软件也对其做过研究,如对文件夹进行索引,但均存在大数据量效率低,仅使用CPU进行运算,没有充分利用系统资源以提高效率的问题。
发明内容
本发明目的是解决现有文件搜索效率较低的技术问题。
为实现上述目的,本发明提供了一种基于GPU加速的文件搜索方法,所述方法包括:
磁盘文件处理步骤,包括:
遍历磁盘中的所有文件,获得每个文件的存储路径;基于每个文件的存储路径获得每个文件的文件名和文件后缀名;针对每个文件,对其文件名中的每个字符进行编码获得每个字符的编码值,基于每个字符的编码值求和计算获得该文件的文件名编码值;基于每个文件的文件后缀名获得每个文件的优先级;基于每个文件的文件名编码值获得每个文件对应的文件分类号;基于每个文件的磁盘盘符、文件分类号和优先级生成该文件的标签信息;针对每个标签信息,分别添加一个第一容器用于保存与该标签信息对应的所有文件的存储路径;将每个文件对应的标签信息和第一容器保存到GPU中;
磁盘文件搜索步骤,包括:
输入关键词进行搜索;
在GPU中调用核函数进行多线程并行关键字匹配,基于匹配结果获得文件搜索结果。
其中,本方法可以通过先对系统中的文件和文件夹进行索引,随后调用GPU硬件并行地对每个文件夹和文件名称进行关键字匹配,筛选出包含关键字的文件,充分利用系统的GPU资源,极大地提高搜索的效率。
其中,因为文件本身是具有属性的,文件可以分布在不同的磁盘中,有不同路文件路径,因此采用不同的标签信息进行区分可以有效地降低单次运算的数据量,本方法在GPU中调用核函数进行多线程并行关键字匹配,采用分治的思想,通过多次小数据量的高速运算,可以减少大数据量导致的卡顿,最后再将结果进行合并,可以大幅提高搜索的效率,使用多个小任务也可以更加的方便停止,例如当第一个任务完成用户便找到了自己想要的结果,随后点击了确认,后面的任务便不需要再执行,而不是一个大任务卡住,只能让用户等待结果。
将文件通过不同的标签信息进行分组也可以更方便的用于文件同步,通过检测系统中文件的变化,将变化的文件路径字符串直接通过标签信息添加到对应的容器中,下次运行就可以直接找到该文件,而不需要每次都先从数据库同步并复制到GPU内存。
其中,本方法设置优先级的目的是,将优先级设置高进行优先搜索可以更快的搜索出用户想要的结果以提高效率;另一方面,通过标签信息以及优先级,可以将每一块数据分成更小的小块,这样并发量会更大,效率也会更高,每个小任务之间互相不关联,不需要同步机制,速度也会更快。
优选的,为了节省内存针对每个文件采用utf-8编码方式对其文件名中的每个字符进行编码。
优选的,为了提高获得文件分类号的效率,本方法采用以下方式基于每个文件的文件名编码值获得每个文件对应的文件分类号,具体包括:
将文件名编码值除以40并取整获得第一数值;
若第一数值大于40或等于40或小于0,则文件分类号为40;
若第一数值小于40且大于0,则文件分类号为第一数值。
优选的,所述磁盘文件搜索步骤,具体包括:
遍历GPU,计算GPU中每个标签信息对应的第一容器中存储的数据数量获得第一计算结果,将第一计算结果作为GPU上开启的线程数,并对每个线程分配一个编号;
调用核函数进行多线程并行关键字匹配,核函数启动后通过每个线程分配的编号计算关键字的字符串在GPU中的地址偏移,基于地址偏移计算结果分别获取第一容器中每个文件的存储路径,将获取的文件路径的字符串与关键字的字符串进行匹配,基于匹配结果获得文件搜索结果。
其中,通过保存字符串的地址,以字符串偏移的方式来获取字符串可以实现随机寻址,相比于每个字符串固定长度可以更加节省空间,在Windows系统中每个文件的路径最大字符串长度固定是260,但是经过统计发现其实大部分用户的文件路径长度都在150左右,因此采用字符串偏移计算地址而不是固定一块大内存可以有效的节约内存空间,在文件同步方面也更加方便,仅需要字符串地址即可实现字符串的保存而不必保证内存地址与之前的字符串连续。
优选的,所述方法还包括文件同步步骤:当将数据库的数据存入GPU内存中后,可以实时检测到系统文件的变更,并将变更同步到GPU内存中,实现数据的动态更新。
当将每个文件对应的标签信息和第一容器保存到GPU中后,实时监测磁盘中的文件是否有更新,若检测到磁盘中的文件有更新,则获得更新文件,并基于更新文件获得更新文件对应的标签信息和第一容器,并将更新文件对应的标签信息和第一容器同步到GPU中。
优选的,为了提高同步性能,本方法中更新内容中文件同步采用函数ReadDirectoryChangesW,通过异步方式调用函数ReadDirectoryChangesW,使用函数GetOverlappedResult异步获取同步完成结果。
优选的,本方法每间隔5秒检测一次磁盘中的文件是否有更新,并将更新文件信息封装到预设容器中作为数据包进行处理。用户修改了文件之后立刻打开进行搜索时间在5秒内恰好可以同步到GPU内存中,且不会占用过多CPU和GPU资源。当检查到修改为文件夹时也会异步进行搜索,并将已修改的文件夹中的文件也进行同步,这样可以有效的防止文件夹被重命名而导致内部文件无法被搜索到的问题。
优选的,本方法在文件同步步骤中设有:用于清除缓存的第一锁,以及用于修改缓存的第二锁,以及用于对文件添加进行计数的第一原子计数器,以及用于对文件删除计数的第二原子计数器,并对每个第一容器设有对应的容器锁。在对GPU内存进行同步时,考虑到文件可能添加后被立即删除,可能会出现两个线程同时操作同一片内存,出现脏数据或崩溃的情况。因此文件同步时采用双锁同步线程计数机制,该机制实现了在文件同步时修改数据不会影响搜索读取到脏数据,并且对于不同标签信息的容器进行操作完全异步,互不干扰,提高了文件同步效率,对于缓存过期需要重新创建也不会影响到现有缓存的使用。
优选的,本方法在添加或删除预设文件对应的信息到GPU时,首先获取第一锁,检查是否正在清除过期缓存,然后释放第一锁抢占第二锁,当获取到第二锁,则计算预设文件对应的标签信息和优先级,并获取预设文件对应的第一容器,然后获取容器锁,容器锁获取之后释放第二锁并对容器锁进行加锁操作。
优选的,本方法在添加预设文件对应的信息到GPU时,获取预设文件对应的第一容器中最后一个字符串a所对应的内存地址A,从GPU复制出字符串a后计算字符串a的字符串长度L,然后计算字符串b的起始地址B,字符串b为字符串a的下一个字符串,起始地址B=内存地址A+字符串长度L+1,将第一原子计数器进行+1操作,最后将起始地址B复制到GPU中,并将字符串b的地址保存到地址数组中进行记录;
本方法在删除预设文件对应的信息到GPU时,遍历GPU中已有的字符串,并和待同步字符串进行比对,若GPU中的字符串与待同步字符串相等或GPU中的字符串包含待同步字符串,则将第二原子计数器进行+1操作,获取目的字符串的地址,读取目的字符串的地址并计算长度,获取GPU中最后一个字符串C的地址,读取字符串C并获取字符串C的长度,若目的字符串长度大于或等于字符串C的长度,则将字符串C复制到目的字符串所在的内存空间中,然后更新地址数组中保存的字符串C的地址,若目的字符串长度小于字符串C的长度,则更新地址数组中保存的字符串C的地址,并在字符串C地址的后方分配相应空闲空间,然后开始内存碎片整理过程,遍历所有的字符串,然后按照初始化缓存的方式保存所有字符串;
当文件同步完成后将第一原子计数器或第二原子计数器进行-1操作,然后释放容器锁;
当清除过期缓存时,对第一原子计数器和第二原子计数器进行自旋等待操作,直到第一原子计数器和第二原子计数器都为0时跳出,获取第一锁后等待清除过期缓存操作完成,根据过期缓存的标签信息获取对应的第一容器,对获取的第一容器加锁,释放第一容器中所保存的GPU内存区域以及所有指针,释放容器锁并在GPU中删除该过期缓存记录,释放第一锁,继续文件同步操作。
其中,该同步机制不仅实现了文件的同步,以及过期缓存的清除,且整体异步执行,线程安全,在搜索和文件修改时不会出现脏数据,通过对各容器的分离加锁机制也极大的提高了内存的使用效率。
本发明提供的一个或多个技术方案,至少具有如下技术效果或优点:
本发明通过对系统中的文件夹和文件进行索引,并采用内存偏移进行随机访问,利用GPU进行并行计算,不同于传统的文件搜索采用大量的循环来进行字符串匹配,能够实现在硬盘中存在多文件,大数据量的情况下实现高速搜索,大幅提高了文件搜索效率。
附图说明
此处所说明的附图用来提供对本发明实施例的进一步理解,构成本发明的一部分,并不构成对本发明实施例的限定;
图1为磁盘文件处理流程示意图;
图2为磁盘文件搜索流程示意图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在相互不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述范围内的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
实施例一
请参考图1-图2,图1为磁盘文件处理流程示意图,图2为磁盘文件搜索流程示意图,本发明步骤具体包括:
首先索引整个磁盘,获得所有文件的完整路径,先通过文件路径获取文件名,如从“C:\test.exe”中获取文件名为“test.exe”,文件路径字符串统一采用utf-8编码,计算出文件名的每一个字符的utf-8值,并求和,如“test.exe”,“t”的utf-8编码为116,“e”的utf-8编码为101,“s”的utf-8编码为115,以此类推直到最后一个字符“e”,如果有字符编码是负数的则忽略,最后求和,得到结果:
116(t)+101(e)+115(s)+116(t)+46(.)+101(e)+120(x)+101(e)=816,即文件名编码和为816。
随后通过文件后缀名将文件分为不同的优先级,如“.exe”后缀的文件优先级为10,“.zip”文件后缀优先级为9,等等,优先级可以由用户自定义。
最后通过函数接口initCache(key,filePath)保存至GPU内存,通过如下规则进行保存。
将上方获得的编码的和除以40并取整,如“test.exe”则为816除以40,结果为20.4,取整后为20,如果做除法取整后结果大于40或者小于0则限制结果为40或0。结果保存为文件分类号。
申请人研究发现,日常使用的文件编码的和大概都在2000-3000的范围内,大于4000的结果大多都是一些程序产生的缓存文件,文件名大多数是很长的乱码,对用户并没有多大的意义,并且这样的文件还很多,由于普通用户一般不会将自己的文件名设置得很长,因此设置将编码的和结果除以40,这样可以优先处理文件名比较短,对用户更加有意义的文件,可以大幅度的提高效率。
随后检查文件处于哪个磁盘,获得磁盘盘符,如“test.exe”完整目录为“C:\test.exe”,则为C盘。
最后通过上方获取的磁盘盘符,文件分类号,后缀优先级生成一个key(即标签信息),并添加一个Set容器保存符合该key的所有文件的完整路径。Key的规则为“[磁盘盘符],list[文件分类号],[后缀优先级]”。如上方例子“C:\test.exe”则将会存入进key为“C,list20,10”的容器中。
并将key和容器一起保存到一个cache_map中,cache_map为高速缓冲存储器。
当进行关键字搜索时,首先将各个关键字字符串复制到GPU内存的常量区中,然后遍历cache_map,计算每个key对应的容器保存的数据数量作为GPU上开启的线程数,每个线程会被分配到一个id,从0开始分配到容器中数据数量的值,然后调用start_kernel()启动GPU核函数进行关键字匹配,核函数启动后通过每个线程分配的id来计算字符串在内存中的地址偏移,获取到容器中每一个文件路径字符串,随后进行字符串匹配,通过字符串的地址偏移来寻址,通过每一个线程的id并且加上一个基地址来得到目的字符串的地址,并进行计算。
字符串匹配算法如下:
首先从文件路径字符串中获取文件名,从GPU内存常量区中遍历所有关键字,检查当前文件名是否包含关键字,若有一个关键字不包含则输出空,否则进一步检查是否有其他限制条件,如是否限制在固定文件夹搜索,如果是,则检查文件路径中是否包含关键字,若匹配失败则输出空,否则匹配成功,输出当前文件路径字符串,该算法实现了每一个线程只计算单个文件路径字符串,实现并行计算。
其中,在本发明实施例中,采用utf-8编码,一方面因为文件路径中可能具有汉字,日语等其他不属于英语的字符,并且在不同的计算机上有不同的语言环境,默认编码也不同,如简体中文在Windows上是GBK,繁体中文是BIG5,导致乱码的情况,所以采用所有计算机的可以兼容的utf-8编码,而不使用Windows默认编码;另一方面由于utf-8编码在英文字符仅占用一个字节,文件路径大部分是英文,只有少部分文件夹中带有中文字符,而其他的如UTF-16,UTF-32以及上文提到的GBK编码英文字符也是用两个到三个字节编码,所以采用utf-8更加节省内存。
其中,本发明中设置文件优先级的原因是:一方面由于文件本身具有不同的属性,一些是可执行文件,一些又是依赖文件,一些又是文件夹,日常使用的需要打开的文件基本都是exe可执行文件或者像lnk快捷方式,因此将优先级设置高进行优先搜索可以更快的搜索出用户想要的结果以提高效率;另一方面,通过上面提到的key以及优先级,可以将每一块数据分成更小的小块,这样并发量会更大,效率也会更高,每个小任务之间互相不关联,不需要同步机制,速度也会更快。
实施例二
在实施例一的基础上,并且本发明还包括文件同步步骤,当将数据库的数据存入GPU内存中后,可以实时检测到系统文件的变更,并将变更同步到GPU内存中,实现数据的动态更新。
文件同步采用Windows Api提供的函数ReadDirectoryChangesW来实现。通过异步方式来调用该API,使用GetOverlappedResult异步获取完成结果,以提高性能。当硬盘中出现文件新增、修改或者删除,通过调用该API返回的值可以获得文件的路径以及文件名。通过前面所述的编码方式可以获得一个key以及以后后缀优先级的值。文件同步默认每5秒检测一次文件改动,所有改动的文件信息将会被封装到一个vector容器中,每一个元素保存了该文件的改动操作,如“新增(FILE_ACTION_ADDED|FILE_ACTION_RENAMED_NEW_NAME),删除(FILE_ACTION_REMOVED|FILE_ACTION_RENAMED_OLD_NAME),修改(FILE_ACTION_MODIFIED),通过vector容器进行封装每5秒内的文件改动,作为一个数据包进行处理,而不是每获取到一个结果就立刻同步,提高数据同步吞吐量。经过统计发现,用户修改了文件之后立刻打开进行搜索时间在5秒内恰好可以同步到GPU内存中,且不会占用过多CPU和GPU资源。当检查到修改为文件夹时也会异步进行搜索,并将已修改的文件夹中的文件也进行同步,这样可以有效的防止文件夹被重命名而导致内部文件无法被搜索到的问题。
在对GPU内存进行同步时,考虑到文件可能添加后被立即删除,可能会出现两个线程同时操作同一片内存,出现脏数据或崩溃的情况。因此文件同步时采用双锁同步线程计数机制,该机制实现了在文件同步时修改数据不会影响搜索读取到脏数据,并且对于不同key的容器进行操作完全异步,互不干扰,提高了文件同步效率,对于缓存过期需要重新创建也不会影响到现有缓存的使用。
双锁同步线程计数机制中设计了两个锁,一个清除缓存clear_cache mutex锁(第一锁),一个修改缓存modify_cache mutex锁(第二锁),以及两个原子计数器atomic_add_count(第一原子计数器),atomic_remove_count(第二原子计数器)来分别对文件的添加和删除进行计数,并且每一个key对应的容器也有一个容器锁。
文件同步的具体操作包括:在添加或删除文件到GPU内存中时,首先会尝试获取clear_cache锁,检查是否正在清除过期缓存,然后释放clear_cache锁,抢占modify_cache锁,当成功获取到modify_cache锁后,将会计算文件所对应的key和后缀名优先级,并获取所对应的容器,随后对容器锁进行加锁操作。(容器锁获取之后即可释放modify_cache锁,随后其他的同步操作又继续抢占modify_cache锁,重复上述操作。)之后判断操作类型,
若是添加操作:获取该容器中最后一个字符串所对应的内存地址,从GPU内存复制出字符串后计算该字符串长度。之后计算字符串地址+字符串长度+1(字符串结尾符)=下一字符串起始地址,将atomic_add_count进行+1操作,最后将字符串复制到GPU内存中,并将字符串的地址保存到地址数组中进行记录。
若是删除操作:遍历GPU内存中已有的字符串,并和待同步字符串进行比对,若相等或者字符串路径中包含待同步字符串(即文件曾经属于待同步文件夹中),则将atomic_remove_count进行+1操作,获取目的字符串(即要删除的字符串)的地址,读取出来并计算长度,并获取最后一个字符串的地址,读取并获取长度。此时若目的字符串长度大于等于最后一个字符串,则将最后一个字符串直接复制到目的字符串所在的内存空间中,然后更新地址数组中保存的最后一个字符串的地址。若目的字符串长度小于最后一个字符串,则直接更新地址数组中保存的最后一个字符串的地址,并在最后一个字符串地址的后方分配一片空闲空间。随后开始内存碎片整理过程。遍历所有的字符串,然后重新按照初始化缓存的方式保存所有字符串。
当文件同步完成后再将atomic_add_count或atomic_remove_count进行-1操作。最后进行容器锁的释放,文件同步操作结束。
当清除过期缓存时,将会对atomic_add_count和atomic_remove_count进行自旋等待,直到两个计数器都为0时跳出,此时代表上方文件同步操作结束,开始尝试获取clear_cache锁,获取成功后上方同步操作便无法进入,需要等待清除缓存操作完成。此时再根据过期缓存的key获取对应的容器,对容器加锁后,释放容器中所保存的GPU内存区域以及所有指针。最后释放容器锁并在cache_map中删除该缓存记录。释放clear_cache锁,继续文件同步操作。
该同步机制不仅实现了文件的同步,以及过期缓存的清除,且整体异步执行,线程安全,在搜索和文件修改时不会出现脏数据,通过对各容器的分离加锁机制也极大的提高了内存的使用效率。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种基于GPU加速的文件搜索方法,其特征在于,所述方法包括:
磁盘文件处理步骤,包括:
遍历磁盘中的所有文件,获得每个文件的存储路径;基于每个文件的存储路径获得每个文件的文件名和文件后缀名;针对每个文件,对其文件名中的每个字符进行编码获得每个字符的编码值,基于每个字符的编码值求和计算获得该文件的文件名编码值;基于每个文件的文件后缀名获得每个文件的优先级;基于每个文件的文件名编码值获得每个文件对应的文件分类号;基于每个文件的磁盘盘符、文件分类号和优先级生成该文件的标签信息;针对每个标签信息,分别添加一个第一容器用于保存与该标签信息对应的所有文件的存储路径;将每个文件对应的标签信息和第一容器保存到GPU中;
磁盘文件搜索步骤,包括:
输入关键词进行搜索;
在GPU中调用核函数进行多线程并行关键字匹配,基于匹配结果获得文件搜索结果。
2.根据权利要求1所述的一种基于GPU加速的文件搜索方法,其特征在于,针对每个文件采用utf-8编码方式对其文件名中的每个字符进行编码。
3.根据权利要求1所述的一种基于GPU加速的文件搜索方法,其特征在于,所述基于每个文件的文件名编码值获得每个文件对应的文件分类号,具体包括:
将文件名编码值除以40并取整获得第一数值;
若第一数值大于40或等于40或小于0,则文件分类号为40;
若第一数值小于40且大于0,则文件分类号为第一数值。
4.根据权利要求1所述的一种基于GPU加速的文件搜索方法,其特征在于,所述磁盘文件搜索步骤,具体包括:
遍历GPU,计算GPU中每个标签信息对应的第一容器中存储的数据数量获得第一计算结果,将第一计算结果作为GPU上开启的线程数,并对每个线程分配一个编号;
调用核函数进行多线程并行关键字匹配,核函数启动后通过每个线程分配的编号计算关键字的字符串在GPU中的地址偏移,基于地址偏移计算结果分别获取第一容器中每个文件的存储路径,将获取的文件路径的字符串与关键字的字符串进行匹配,基于匹配结果获得文件搜索结果。
5.根据权利要求1所述的一种基于GPU加速的文件搜索方法,其特征在于,所述方法还包括文件同步步骤:
当将每个文件对应的标签信息和第一容器保存到GPU中后,实时监测磁盘中的文件是否有更新,若检测到磁盘中的文件有更新,则获得更新文件,并基于更新文件获得更新文件对应的标签信息和第一容器,并将更新文件对应的标签信息和第一容器同步到GPU中。
6.根据权利要求5所述的一种基于GPU加速的文件搜索方法,其特征在于,本方法中更新内容中文件同步采用函数ReadDirectoryChangesW,通过异步方式调用函数ReadDirectoryChangesW,使用函数GetOverlappedResult异步获取同步完成结果。
7.根据权利要求6所述的一种基于GPU加速的文件搜索方法,其特征在于,本方法每间隔5秒检测一次磁盘中的文件是否有更新,并将更新文件信息封装到预设容器中作为数据包进行处理。
8.根据权利要求5所述的一种基于GPU加速的文件搜索方法,其特征在于,本方法在文件同步步骤中设有:用于清除缓存的第一锁,以及用于修改缓存的第二锁,以及用于对文件添加进行计数的第一原子计数器,以及用于对文件删除计数的第二原子计数器,并对每个第一容器设有对应的容器锁。
9.根据权利要求8所述的一种基于GPU加速的文件搜索方法,其特征在于,本方法在添加或删除预设文件对应的信息到GPU时,首先获取第一锁,检查是否正在清除过期缓存,然后释放第一锁抢占第二锁,当获取到第二锁,则计算预设文件对应的标签信息和优先级,并获取预设文件对应的第一容器,然后获取容器锁,容器锁获取之后释放第二锁并对容器锁进行加锁操作。
10.根据权利要求9所述的一种基于GPU加速的文件搜索方法,其特征在于,本方法在添加预设文件对应的信息到GPU时,获取预设文件对应的第一容器中最后一个字符串a所对应的内存地址A,从GPU复制出字符串a后计算字符串a的字符串长度L,然后计算字符串b的起始地址B,字符串b为字符串a的下一个字符串,起始地址B=内存地址A+字符串长度L+1,将第一原子计数器进行+1操作,最后将起始地址B复制到GPU中,并将字符串b的地址保存到地址数组中进行记录;
本方法在删除预设文件对应的信息到GPU时,遍历GPU中已有的字符串,并和待同步字符串进行比对,若GPU中的字符串与待同步字符串相等或GPU中的字符串包含待同步字符串,则将第二原子计数器进行+1操作,获取目的字符串的地址,读取目的字符串的地址并计算长度,获取GPU中最后一个字符串C的地址,读取字符串C并获取字符串C的长度,若目的字符串长度大于或等于字符串C的长度,则将字符串C复制到目的字符串所在的内存空间中,然后更新地址数组中保存的字符串C的地址,若目的字符串长度小于字符串C的长度,则更新地址数组中保存的字符串C的地址,并在字符串C地址的后方分配相应空闲空间,然后开始内存碎片整理过程,遍历所有的字符串,然后按照初始化缓存的方式保存所有字符串;
当文件同步完成后将第一原子计数器或第二原子计数器进行-1操作,然后释放容器锁;
当清除过期缓存时,对第一原子计数器和第二原子计数器进行自旋等待操作,直到第一原子计数器和第二原子计数器都为0时跳出,获取第一锁后等待清除过期缓存操作完成,根据过期缓存的标签信息获取对应的第一容器,对获取的第一容器加锁,释放第一容器中所保存的GPU内存区域以及所有指针,释放容器锁并在GPU中删除该过期缓存记录,释放第一锁,继续文件同步操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211607406.7A CN115878321B (zh) | 2022-12-14 | 2022-12-14 | 一种基于gpu加速的文件搜索方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211607406.7A CN115878321B (zh) | 2022-12-14 | 2022-12-14 | 一种基于gpu加速的文件搜索方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115878321A true CN115878321A (zh) | 2023-03-31 |
CN115878321B CN115878321B (zh) | 2023-11-10 |
Family
ID=85767446
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211607406.7A Active CN115878321B (zh) | 2022-12-14 | 2022-12-14 | 一种基于gpu加速的文件搜索方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115878321B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103544281A (zh) * | 2013-10-23 | 2014-01-29 | 中安消技术有限公司 | 一种关键字检索方法、装置及系统 |
CN105095091A (zh) * | 2015-09-23 | 2015-11-25 | 南京大学 | 一种基于倒排索引技术的软件缺陷代码文件定位方法 |
CN109634921A (zh) * | 2018-11-23 | 2019-04-16 | 湖南城市学院 | 一种文件存储的方法及存储系统 |
CN110825748A (zh) * | 2019-11-05 | 2020-02-21 | 北京平凯星辰科技发展有限公司 | 利用差异化索引机制的高性能和易扩展的键值存储方法 |
CN111427847A (zh) * | 2020-04-03 | 2020-07-17 | 中山大学 | 面向用户自定义元数据的索引与查询方法和系统 |
CN111552849A (zh) * | 2020-03-19 | 2020-08-18 | 西安电子科技大学 | 可搜索加密方法、系统、存储介质、车载网、智能电网 |
US20210019352A1 (en) * | 2019-07-16 | 2021-01-21 | National Tsing Hua University | Privacy-kept text comparison method, system and computer program product |
CN114969852A (zh) * | 2022-05-23 | 2022-08-30 | 北京北信源软件股份有限公司 | 敏感信息处理方法、装置、电子设备及存储介质 |
-
2022
- 2022-12-14 CN CN202211607406.7A patent/CN115878321B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103544281A (zh) * | 2013-10-23 | 2014-01-29 | 中安消技术有限公司 | 一种关键字检索方法、装置及系统 |
CN105095091A (zh) * | 2015-09-23 | 2015-11-25 | 南京大学 | 一种基于倒排索引技术的软件缺陷代码文件定位方法 |
CN109634921A (zh) * | 2018-11-23 | 2019-04-16 | 湖南城市学院 | 一种文件存储的方法及存储系统 |
US20210019352A1 (en) * | 2019-07-16 | 2021-01-21 | National Tsing Hua University | Privacy-kept text comparison method, system and computer program product |
CN110825748A (zh) * | 2019-11-05 | 2020-02-21 | 北京平凯星辰科技发展有限公司 | 利用差异化索引机制的高性能和易扩展的键值存储方法 |
CN111552849A (zh) * | 2020-03-19 | 2020-08-18 | 西安电子科技大学 | 可搜索加密方法、系统、存储介质、车载网、智能电网 |
CN111427847A (zh) * | 2020-04-03 | 2020-07-17 | 中山大学 | 面向用户自定义元数据的索引与查询方法和系统 |
CN114969852A (zh) * | 2022-05-23 | 2022-08-30 | 北京北信源软件股份有限公司 | 敏感信息处理方法、装置、电子设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
JAEYOUNG DO: "Cost-effective, Energy-efficient, and Scalable Storage Computing for Large-scale AI Applications", ACM TRANSACTIONS ON STORAGEVOLUME 16ISSUE 4, pages 1 - 37 * |
徐慧琴: "基于数据图的关系数据库关键词查询研究", 万方学位论文 * |
Also Published As
Publication number | Publication date |
---|---|
CN115878321B (zh) | 2023-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11625501B2 (en) | Masking sensitive information in records of filtered accesses to unstructured data | |
US6625591B1 (en) | Very efficient in-memory representation of large file system directories | |
US11080260B2 (en) | Concurrent reads and inserts into a data structure without latching or waiting by readers | |
EP2488950B1 (en) | A tiered data management method and system for high performance data monitoring | |
US7856437B2 (en) | Storing nodes representing respective chunks of files in a data store | |
JP2761389B2 (ja) | ファイル順次アクセス方法及び装置 | |
US8321389B2 (en) | Method, apparatus and computer program product for maintaining file system client directory caches with parallel directory writes | |
US7725437B2 (en) | Providing an index for a data store | |
US5761659A (en) | Method, product, and structure for flexible range locking of read and write requests using shared and exclusive locks, flags, sub-locks, and counters | |
US7673099B1 (en) | Affinity caching | |
Basin et al. | KiWi: A key-value map for scalable real-time analytics | |
US10650032B1 (en) | Filtering pipeline optimizations for unstructured data | |
CA2302303A1 (en) | System for accessing database tables mapped into memory for high performance | |
US10664508B1 (en) | Server-side filtering of unstructured data items at object storage services | |
US11392314B2 (en) | Sequentially writing metadata into a solid state disk by redirect-on-write | |
CN113342908B (zh) | 一种面向对象的内核层数据库的构建方法 | |
CN111444149A (zh) | 一种数据导入方法、装置、设备及存储介质 | |
CN115878321B (zh) | 一种基于gpu加速的文件搜索方法 | |
JP2675958B2 (ja) | 情報検索用計算機システム及びその記憶装置の動作方法 | |
Darnowski et al. | Writing and Deleting files on hard drives with NTFS | |
Deppisch et al. | Managing complex objects in the Darmstadt database kernel system | |
US20220100415A1 (en) | Method, device, and computer program product for storage management | |
Graefe | A Survey of B-Tree Locking Techniques | |
Lewis | Parsing and Optimizing | |
CN117891796A (zh) | 一种适用于多读少写场景的hdfs海量小文件存储方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |