Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencl GPU暴力实现_Opencl_Gpu_Md5_Gpgpu_Brute Force - Fatal编程技术网

Opencl GPU暴力实现

Opencl GPU暴力实现,opencl,gpu,md5,gpgpu,brute-force,Opencl,Gpu,Md5,Gpgpu,Brute Force,我想就以下问题寻求建议: 对于一个研究项目,我正在编写一个基于GPU和(py)OpenCl的暴力算法 (我知道JTR就在那里) 现在我在Python中有一个蛮力生成器,它用单词(amount=1024*64)填充每一轮缓冲区。GPU正在为缓冲区中的每个值计算MD5哈希值,并将其与给定值进行比较。真是太好了 但是: 我不认为这真的是我能从GPU获得的全部性能-或者是吗?当我必须通过CPU填充缓冲区并将其传递给GPU进行哈希计算或比较时,是否存在瓶颈?或者我错了,这已经是fastet或几乎是我可以获

我想就以下问题寻求建议:

对于一个研究项目,我正在编写一个基于GPU和(py)OpenCl的暴力算法

(我知道JTR就在那里)

现在我在Python中有一个蛮力生成器,它用单词(amount=1024*64)填充每一轮缓冲区。GPU正在为缓冲区中的每个值计算MD5哈希值,并将其与给定值进行比较。真是太好了

但是:

我不认为这真的是我能从GPU获得的全部性能-或者是吗?当我必须通过CPU填充缓冲区并将其传递给GPU进行哈希计算或比较时,是否存在瓶颈?或者我错了,这已经是fastet或几乎是我可以获得的fastet性能

在我考虑这个问题之前,我已经做了很多研究。到目前为止,我还没有在GPU内核上找到蛮力实现——为什么

Thx

编辑1:

我试着用不同的方式解释我想知道的。假设我有一台普通的电脑。在GPU上执行蛮力算法比在CPU上执行蛮力算法要快(如果你做得对的话)。我浏览了一些GPU暴力工具,没有找到一个在GPU内核上实现整个暴力的工具

现在我正在将“word包”传递到GPU,并让它们在那里完成工作(哈希和比较)——看起来这是常见的方式。“拆分”蛮力算法不是更快吗?这样GPU上的每个单元都会自己生成自己的“单词包”


我所做的只是想知道为什么常见的方法是将带有值的包从CPU传递到GPU,而不是在GPU上执行CPU工作!这是因为无法在GPU上拆分暴力算法,还是改进不值得将其移植到GPU?

关于“暴力”方法的性能。

我所做的只是想知道为什么常见的方法是将带有值的包从CPU传递到GPU,而不是在GPU上执行CPU工作!是因为不可能在GPU上拆分暴力算法,还是改进不值得将其移植到GPU

我不知道你的算法的细节,但是,一般来说,在创建一个混合CPU-GPU算法之前,需要考虑一些要点。仅举几个例子:

  • 不同的架构(最好的CPU算法可能不是最好的 GPU算法)
  • 额外的同步点
  • 不同的内存空间(意味着PCIe/网络传输)
  • 更复杂的算法

  • 更复杂的微调

  • 供应商政策

尽管如此,还是有相当多的例子同时结合了GPU和CPU的功能。通常,算法的顺序或高度分散的部分将在CPU上运行,而同质、计算密集的部分则在GPU上运行。其他应用程序使用CPU将输入数据预处理为更适合GPU处理的格式(例如,更改数据布局)。最后,还有一些以纯性能为目标的应用程序,它们确实在CPU上做了大量工作,比如MAGMA项目

总而言之,答案是,如果真的有可能,或者设计一种混合算法以充分利用CPU-GPU系统作为一个整体是否值得,这实际上取决于算法的细节


关于您当前方法的绩效

我认为你应该把问题分为两部分:

  • 这是我的GPU内核效率
  • 我在GPU上实际工作了多少时间
关于第一个问题,您没有提供关于GPU内核的任何信息,因此我们无法真正帮助您,但一般的优化方法适用于:

  • 它是您的计算内存/计算范围吗
  • 您离GPU峰值内存带宽有多远
  • 您需要从这些问题开始,以了解应该应用哪种优化/算法。请看下面的图片

    至于第二个问题,尽管您没有详细说明,但您的应用程序似乎在小型内存传输上花费了太多时间(请看一下如何优化内存传输)。仅发送几个字就启动PCIe的开销将扼杀您从使用GPU设备中获得的任何性能优势。因此,通常情况下,发送一堆小的缓冲区,而不是将大量的内存块打包在一起,并不是一种好办法

    如果您在寻找性能,您可能希望重叠计算和内存传输。阅读了解更多信息


    作为一般建议,在实施任何优化之前,请花一些时间分析您的应用程序。这将为您节省大量时间。

    谢谢您的时间!我更新了我的问题,也许你可以再看一次,让我知道你是怎么想的。我的问题不是关于我的程序和我的性能的,而是关于暴力GPU算法的常见实现。不客气。我不知道你的算法具体是什么。尽管我提供了一些想法,但还是值得为您的问题添加一些特定的标签。