自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(118)
  • 资源 (21)
  • 收藏
  • 关注

原创 【论文阅读】OpsEval

信息技术(IT)运营(Ops),特别是用于IT运营的人工智能(AlOps),是保持现有信息系统有序和稳定运行的保证。根据Gartner的预测,将人工智能技术用于自动化IT运营已成为一种新趋势。大型语言模型(LLM)在NLP相关任务中表现出非凡的能力,在AlOps领域显示出巨大的潜力,例如在故障的根本原因分析、操作和维护脚本的生成以及警报信息的总结等方面。尽管如此,当前LLM在运营任务中的表现尚未确定。需要一个全面的基准来优化为Ops(OpsLLM)量身定制的LLM。

2024-03-10 13:55:44 1078

原创 Multi-Head Attention详解

文中大部分内容以及图片来自:https://medium.com/@hunter-j-phillips/multi-head-attention-7924371d477a当使用 multi-head attention 时,通常d_key = d_value =(d_model / n_heads),其中n_heads是头的数量。研究人员称,通常使用平行注意层代替全尺寸性,因为该模型能够“关注来自不同位置的不同表示子空间的信息”。

2024-02-29 21:49:22 1039

原创 Transformer之Residuals & Decoder

我们需要提到的编码器架构中的一个细节是,每个编码器中的每个子层(self-attention,,ffnn)周围都有一个残余连接,然后是 layer-normalization 步骤。如果我们要可视化向量和与 self attention 相关的 layer-norm 运算,它看起来是这样的这也适用于解码器的子层。如果我们考虑一个由2个堆叠的编码器和解码器组成的Transformer,它看起来就像这样。

2024-02-29 12:15:54 1134

原创 Transformer之Positional Encoding

正如我们到目前为止所描述的那样,模型中缺少的一件事是解释输入序列中单词顺序的方法。为了解决这个问题,transformer 在每个输入嵌入中添加一个矢量。这些向量遵循模型学习的特定模式,这有助于它确定每个单词的位置,或序列中不同单词之间的距离。这里的直觉是,将这些值添加到嵌入中,一旦它们投射到Q/K/V矢量中,并在点积 attention 期间,嵌入向量之间会提供有意义的距离。如果我们假设嵌入的维数为4,那么实际的位置编码将是这样的这个模式会是什么样子呢?

2024-02-29 11:18:18 411

原创 Transformer之multi-head

当我们对“it”这个词进行编码时,一个注意力头主要关注“animal”,而另一个注意力头主要关注“tired”——从某种意义上说,模型对“it”这个词的表征融合了“动物”和“累”的一些表征。我意识到这是相当多的矩阵。既然我们已经触及了注意头,让我们回顾一下之前的例子,看看当我们在例句中对单词 “it” 进行编码时,不同的注意头集中在哪里。如果我们做同样的 self-attention 计算,只是8次不同的权重矩阵,我们最终会得到8个不同的Z矩阵。我们连接矩阵,然后将它们乘以一个附加的权重矩阵WO。

2024-02-29 10:50:14 370

原创 Transformer之self-attention

注意力是一个有助于提高神经机器翻译应用程序性能的概念。在这篇文章中,我们将看看Transformer,一个使用注意力来提高这些模型训练速度的模型。Transformer在特定任务中优于谷歌神经机器翻译模型。在这篇文章中,我们将尝试简化一些内容,并逐一介绍概念,希望能够让没有深入了解主题的人更容易理解。

2024-02-28 23:56:53 804

原创 用GGUF和Llama.cpp量化Llama模型

GGML是一个专注于机器学习的C语言库。它是由Georgi Gerganov创建的,这是GG的首字母缩写。这个库不仅提供了机器学习的基本元素,如张量,而且还提供了一种独特的二进制格式来分发llm。该格式最近更改为GGUF。这种新格式被设计为可扩展的,因此新特性不会破坏与现有模型的兼容性。它还将所有元数据集中在一个文件中,例如特殊 tokens、RoPE缩放参数等。简而言之,它解决了历史上的一些痛点,而且应该经得起未来的考验。欲了解更多信息,您可以在此地址阅读规范。

2024-02-26 14:26:00 1763 1

原创 使用GPTQ进行4位LLM量化

当一些权重被中间更新推到网格之外时,这种效果可能会恶化。一个简单的启发式应用来防止这种情况:异常值一出现就被量化。这个过程可能需要大量的计算,特别是对于LLMs。为了解决这个问题,OBQ方法使用了一种技巧,避免在每次简化权重时重新进行整个计算。量化权重后,它通过删除与该权重相关的行和列(使用高斯消去)来调整计算中使用的矩阵(Hessian矩阵)。该方法还采用向量化的方法,一次处理多行权矩阵。尽管OBQ的效率很高,但随着权值矩阵的增大,OBQ的计算时间也会显著增加。

2024-02-26 12:17:31 1257

原创 LLM权重量化

我们可以计算尺度是255/(3.2+3.0) = 41.13,zero point为 -round(41.13•-3.0)-128 = 123- 128 = -5,因此我们之前的0.1权重将被量化为round(41.13 * 0.1 - 5)= -1。然而,它们的局限性,特别是在处理异常值时,导致了LLM.int8(),这种技术也保留了模型的性能。通常,模型的大小是通过将**参数的数量(大小)乘以这些值的精度(数据类型)**来计算的。现在我们的模型已经被量化了,我们想要检查这个过程的影响。

2024-02-25 01:21:13 899

原创 7.3 CONSTANT MEMORY AND CACHING

因此,当warp中的所有线程访问相同的恒定内存变量时,就像M的情况一样,缓存可以提供大量的带宽来满足线程的数据需求。为了减轻内存瓶颈的影响,现代处理器通常使用片上缓存存储器或缓存,以减少需要从主存储器(DRAM)访问的变量数量,如图7.9所示。更好的是,所有线程都以相同的顺序访问M元素,从M[0]开始,并通过图7.6.中for循环的迭代一次移动一个元素。请注意,这是一个特殊的内存复制函数,它通知CUDA运行时,在内核执行期间,复制到常量内存的数据不会更改。然后,变量的值将从缓存中提供,无需访问DRAM。

2024-01-09 17:47:36 354

原创 7.2 1D PARALLEL CONVOLUTION—A BASIC ALGORITHM

为了简单起见,我们假设Mask_Width是一个奇数,卷积是对称的,即Mask_Width是2*n + 1,其中n是整数。因此,在if声明中,它们都将是一些不同的决定。计算P[0]的线程将跳过大约一半的乘法累积语句,而计算P[1]的那个会少跳过一次,以及以此为由。我们假设1D卷积内核收到五个参数:指向输入数组N的指针,指向输入掩码M的指针,指向输出数组P的指针,掩码Mask_Width的大小,以及输入和输出数组宽度的大小。

2024-01-09 17:01:10 386

原创 Parallel patterns: convolution —— An introduction to stencil computation

应该清楚的是,P[0]的计算将涉及两个缺失的N个元素,在本例中,这两个元素都将被假定为0。我们使用5元素掩码M的事实意味着每个P元素是由对应位置的N个元素的加权和生成的,左边是两个N个元素,右边是两个N个元素。例如, P[2] 的值生成为 N[0](即 N[2-2])到N[4](即N[2+2])的加权和。在图7.1中,P[i] 的计算可以看作是从 N[i-2] 开始的N子数组和M数组之间的内积。也就是说,P[3] 的值是N[1](即N[3-2])通过N[5](即N[3 + 2])的加权和。

2024-01-09 16:29:25 1034

原创 CUDA并行计算对精度的影响

并行归约(Parallel Reduction): 在并行计算中,例如在进行归约操作时,如果不小心处理浮点数相加可能导致累积误差。在一些科学计算应用中,数值精度是非常关键的,因此在选择并行算法和优化技术时需要仔细考虑。在这个简单的向量相加的CUDA内核中,如果输入数组 a 和 b 中包含极小或极大的浮点数,那么在并行计算中可能会由于浮点数舍入误差而引入一些微小的差异。数据依赖性: 并行计算中,如果存在数据依赖性,即某个计算的结果依赖于其他计算的结果,可能会导致数值不稳定性。虽然这在串行计算中也存在,但。

2024-01-09 15:24:17 433

原创 5.5 THREAD GRANULARITY

如图5.17所示,相邻 tile 中两个P元素的计算使用相同的 M 行。使用原始的 tile 算法,相同的M行被分配给生成这两个P tile 的两个块冗余加载。有时,在每个线程中投入更多工作并使用更少的线程是有利的。图5.17说明了矩阵乘法的这种机会。图5.6中的tile算法,使用一个线程来计算输出P矩阵的一个元素。正如我们在上一节中讨论的,可以在每个SM上运行的块数量可能会减少。在实践中,组合多达四个相邻的水平块来计算相邻的水平tile,显著提高了大型(2048x2048或更多)矩阵乘法的性能。

2024-01-09 14:07:39 366

原创 5.4 DYNAMIC PARTITIONING OF RESOURCES

如果每个线程块包含256个线程,则对1536个线程插槽进行分区并分配给6个线程块。他们可以执行许多线程块,每个线程很少,也可以执行几个线程块,每个线程有很多线程。如果每个线程块由512个线程组成,则1536个线程插槽被分区并分配给三个块。阅读器参考CUDA占用计算器[NVIDIA],这是一个可下载的Excel工作表,根据内核对资源的使用情况,计算每个SM上运行的线程的实际数。通过在块之间动态分区寄存器,如果需要很少的寄存器,SM可以容纳更多的块,如果需要更多的寄存器,则可以容纳更多的块。

2024-01-09 13:57:25 364

原创 5.3 WARPS AND SIMD HARDWARE

我们现在把注意力转向线程执行中可能限制性能的方面。回想一下,启动CUDA内核会生成一个线程网格,该网格被组织为两级层次结构。在顶层,网格由一维、二维或三维块阵列组成。在底层,每个块依次由一维、二维或三维线程阵列组成。在第3章,可扩展并行执行中,我们看到块可以以任何相对的顺序执行,这允许跨不同设备的透明可扩展性。然而,我们没有过多说明每个块内线程的执行时间。从概念上讲,人们应该假设块中的线程可以相互之间以任何顺序执行。在具有相位的算法中,每当我们想确保所有线程在开始下一阶段之前都已完成执行的通用阶段时,就应

2024-01-09 12:50:14 820

原创 5.2 MORE ON MEMORY PARALLELISM

例如,如果有更多的元素,M[16]和M[17]将存储在通道0的0bank中,M[18]和M[19]将存储在通道1的0 bank中,等等。通道和bank的地址是,阵列的前八字节(M[0]和M[1])存储在通道0的bank0中,接下来的八字节(M[2]和M[3])存储在通道1的bank0中,接下来的八字节(M[4]和M[5])存储在通道2的bank0中,接下来的八字节(M[6]和M[7])存储在通道3的bank0中。也就是说,在进入通道1的0bank之前,我们只分配足够的元素来充分利用通道0的DRAM突发。

2024-01-09 11:29:35 758

原创 *5.1 Global Memory Bandwidth

并行程序的执行速度可能因计算硬件的资源限制而有很大差异。虽然管理并行代码和硬件资源约束之间的交互对于在几乎所有并行编程模型中实现高性能很重要,但这是一种实用技能,最好通过为高性能设计的并行编程模型中的实践练习来学习。在本章中,**我们将讨论CUDA设备中的主要资源约束类型,**以及它们如何影响内核执行性能[Ryoo 2008JICUDA C最佳实践]。为了实现他/她的goals,程序员通常必须找到达到高于应用程序初始版本所需性能水平的方法。。

2024-01-09 10:17:24 359

原创 4.8 SUMMARY && 4.9 EXERCISES

总之,在现代处理器中,。为了很好地利用CUDA设备的执行吞吐量,应该在内核代码中获得高计算与全局内存访问率。如果获得的比率很低,则内核受内存约束;。CUDA定义了寄存器、共享内存和常量内存。这些存储器比全局存储器小得多,但可以以更高的速率访问。有效使用这些记忆需要重新设计算法。我们使用矩阵乘法来说明平铺,这是一种广泛使用的技术,可以增强数据访问的局部性,并有效地使用共享内存。

2024-01-09 00:12:22 887

原创 4.7 MEMORY AS A LIMITING FACTOR TO PARALLELISM

然后,应用程序可以将这个数字除以驻留在每个SM中的目标线程数,以确定可以在kerel中使用的寄存器数量。因此,从1536开始,下一个较小的线程数量将是1024,这表明可以同时驻留在每个SM中的线程减少1/3。为了说明内核的寄存器使用与设备可以支持的并行性水平之间的交互,假设在当前一代设备D中,每个SM可以容纳多达1536个线程和16,384个寄存器。通常,每个线程需要的资源越多,每个SM中可以驻留的线程就越少,同样,在整个设备中并行运行的线程也就越少。不幸的是,图4.16中的内核不支持这一点。

2024-01-08 23:39:00 867

原创 4.6 BOUNDARY CHECKS

通过更改图4.14中的示例至3×3 M、N和P矩阵,图4.18创建了矩阵的宽度为3,不是tile宽度(2)的倍数。我们看到thread1,0和thread1,1试图访问不存在的M元素Ms3,0和Ms3.1,而thread0.1和thread1,1试图访问N0,3和N1,3,它们不存在。通过使用共享内存,可以显著减少对全局内存的访问次数,从而减少内存延迟,并提高整体的内存带宽效率。的选择是一个权衡的结果,它需要考虑硬件的限制、内存的效率和算法的并行性。:更小的瓷砖允许更细粒度的线程管理和更高的线程并行度。

2024-01-08 23:24:29 882

原创 4.5 A TILED MATRIX MULTIPLICATION KERNEL

Thready.tx的循环进度如图4.17所示,M和N元素沿箭头的访问方向,箭头标有k,第12行的循环变量。第14行中的屏障__syncthreads()确保所有线程在进入下一个迭代并从下一个tile加载元素之前,所有线程都已完成使用共享内存中的M和N元素。这很重要,因为块中的所有线程都必须能够访问加载的M和N元素由同行进入Mds和Nds,以便他们可以使用这些值来满足他们的输入需求。图4.16中的第8行。.回顾图4.14中的例子,由block1,0的线程1.0计算的P元素的y索引,”为1*2+ 0=2。

2024-01-08 23:01:45 966

原创 4.4 TILING FOR REDUCED MEMORY TRAFFIC

在每个阶段,一个块中的所有线程都协作,将M的tile和N的tile加载到共享内存中。在第1阶段开始时,block0.0的四个线程协同将M的tile加载到共享内存中:threde0.0将M0.0加载到MdS0,0,thread0.1加载M0.1到Mds0.1,thread1.o加载M1,o加载到Mds1.0,thread1,1将M1.1加载到Mds1,1,如图4.15中第二列所示。在每个阶段,相同的Mds和Nds用于在相位中保存M和N元素的子集,从而允许更小的共享内存为global内存的大部分访问提供服务。

2024-01-08 20:26:43 869

原创 3.9 EXERCISES

如果该学生声称他们使用32×32线程块来执行1024×1024矩阵的乘法,并且每个线程块中的每个线程都计算结果矩阵的一个元素,那么他们的配置与CUDA设备的硬件限制不符。具体来说,他们的线程块设置超过了每个块允许的最大线程数,因为32×32等于1024,而设备的限制是每个块最多512个线程。由于您想要使用正方形的线程块,因此您应该选择一个线程块的尺寸,其边长是1024的平方根。这个信息对于理解内核如何在多个SM上调度是有用的,但它并不影响线程块大小的选择,只要线程块的大小遵守了每个块的最大线程数限制。

2024-01-08 19:54:30 884

原创 *4.3 CUDA MEMORY TYPES

CUDA设备包含几种类型的内存,可以帮助程序员提高计算到全局内存的访问率,从而实现高执行速度。图4.6显示了这些CUDA设备内存。全局内存和恒定内存出现在图片的底部。主机可以通过调用API函数来写入(W)和读取(R)这些类型的内存。我们已经在第2章中引入了全局内存,数据并行计算。设备可以写入和读取全局内存。恒定内存支持设备短延迟、高带宽只读访问。寄存器和共享内存,如图4.6所示,是片上内存。驻留在这些类型内存中的变量可以以高度并行的方式以非常高速的方式访问。寄存器分配给单个线程;每个线程只能访问自己的寄

2024-01-08 19:13:17 843

原创 4.2 MATRIX MULTIPLICATION

因此,块(0,0)中的线程(0,0)成功计算了M的0行和N的0列之间的内积,并将结果存入P0.0。循环的每个迭代都从M的行访问一个元素,从N的Coith列访问一个元素,将两个元素乘以一起,并将乘积累积到Pvalue中。我们现在把注意力转向N。如图4.3所示,第Col列的开头元素是第0行的第Col元素,即N[Col]。回想一下,M被线性化成一个等价的1D数组,其中M的行一个接一个地放置在内存空间中,从0行开始。(P中的小方块)是由M的Row行(在M中显示为水平条带)和由N的Col列(在N中显示为垂直条带)

2024-01-08 18:14:38 558

原创 4.1 Importance of Memory Access Efficiency

虽然我们涵盖的范围是一个非常好的开始,但到目前为止,我们学到的CUDA内核可能只能实现底层硬件潜在速度的一小部分。我们可以通过计算图3.8中图像模糊内核代码中执行次数最多的部分的预期性能水平来说明内存访问效率的影响。计算与全局内存比为1.0时,图像模糊内核的执行将受到操作数(例如,in[] 的元素)传递到GPU的速度的限制。总的来说,在过去的几代设备中,所需的比率一直在增加,因为计算吞吐量比内存带宽增长得更快。在当今的高端设备中,在本章中,您将学习使用不同的内存类型来提高CUDA内核的执行效率。

2024-01-08 16:57:12 799

原创 3.8 SUMMARY

Kerel执行配置参数定义了grid及其块的尺寸。blockldx和threadldx中的唯一坐标允许网格的线程识别自己及其数据域。程序员有责任在内核函数中使用这些变量,以便线程能够正确识别要处理的数据部分。对于每个内核,其中一个或多个资源限制可以成为同时驻留在CUDA设备中的线程数量的限制因素。**线程被分配给SM,以便逐个块执行。**每个CUDA设备对每个SM的可用资源量施加了潜在的不同限制。,从而实现CUDA应用程序的透明可扩展性。一旦一个块被分配给一个SM,它就会被进一步分割成warp。

2024-01-08 16:36:26 337

原创 3.7 THREAD SCHEDULING AND LATENCY TOLERANCE

这个数字在8块限制范围内,是一个很好的配置,因为它将允许我们在每个SM中拥有完整的线程容量,并允许围绕长延迟操作调度最大数量的warp。warps的大小是特定于实现的。为了使内核保持透明的可扩展性,不同块中的线程相互同步的简单方法是终止内核,并在同步点后为活动启动一个新的内核。一个合理的问题是,如果一个SM在任何时候都只能执行一小部分,那么为什么我们需要在SM中有这么多的warp。正如我们将在第4章“内存和数据局部性”中解释的那样,在确定最合适的块尺寸时,还必须考虑寄存器和共享内存等其他资源的使用。

2024-01-08 16:21:12 897

原创 3.6 QUERYING DEVICE PROPERTIES

该应用程序通常需要查询底层硬件的可用资源和功能,以便利用能力更强的系统,同时补偿能力较差的系统。这些GPU是默认的图形单元,提供基本的功能和硬件资源,为现代基于Windows的用户界面执行最小的图形功能。这一弱点将是主机代码遍及所有可用设备,查询其资源和功能,并选择具有足够资源的设备来令人满意地执行应用程序的原因。正如我们之前所讨论的,一些设备只有少量的SM(例如tWO),有些设备的SM数量要多得多(例如30)。此外,设备的时钟频率在。因此,应该查询可用的设备,并确定每个块中允许足够数量线程的设备。

2024-01-08 15:53:00 746

原创 3.5 RESOURCE ASSIGNMENT

在同时执行8个块所需的一种或多种资源类型短缺的情况下,CUDA运行时会自动减少分配给每个SM的块数量,直到其合并资源使用量低于限制。由于可以分配给每个SM的SM数量有限,并且可以分配给每个SM的块数量有限,因此可以在CUDA设备中主动执行的块数量也有限。大多数网格包含的块比这个数字多得多。这可以是6个块,每个256个线程,3个块,每个512个线程,以此为由之。如果CUDA设备有30个SM,并且每个SM可以容纳多达1536个线程,则该设备可以同时拥有多达46,080个线程,同时驻留在CUDA设备中进行执行。

2024-01-08 15:36:23 370

原创 3.4 SYNCHRONIZATION AND TRANSPARENT SCALABILITY

他们都可以去不同的商店买自己的衣服。对于if-then-else语句,如果每个路径都有_syncthreads()语句,则块中的所有线程要么执行then-path,要么所有线程都执行else-path。例如,移动处理器可能会以极低的功耗缓慢执行应用程序,而桌面处理器可能会以更高的速度但更高的功耗执行相同的应用程序。在一个只有少数执行资源的低成本系统中,人们可以同时执行少量块,在图3.11的左侧被描绘成一次执行两个块。在具有更多执行资源的高端实现中,可以同时执行大量块,在图3.11的右侧一次显示为四个块。

2024-01-08 15:08:03 821

原创 3.3 IMAGE BLUR: A MORE COMPLEX KERNEL

在案例1中,左上角的像素被模糊了。在执行嵌套循环期间,九次迭代的CurRow和CurCol值为(-1,-1)、(-1,0)、(-1,1)、(0,-1)、(0,0,)、(0,1)、(1,-1)、(1,0)和(1,1)。举例来说,计算(25,50)输出像素的九个像素的坐标是(24,49),(24,50),(24,51),(25,49),(25,50),(25,51),(26,49),(26,50)和(26,51)。在本章中,我们将使用简化的方法,取周围像素的NxN补丁的简单平均值,包括我们的目标像素。

2024-01-08 14:12:44 908

原创 3.2 MAPPING THREADS TO MULTIDIMENSIONAL DATA

我们需要x方向的5个块和y方向的4个块,结果是5个x 4=20个块,如图3.2所示,沉重的线条标志着block的边界。请注意,我们在x方向有4个额外的线程,在y方向有2个额外的线程——也就是说,我们将生成80×64个线程来处理76×62像素。与此同时,网格的尺寸取决于图片的尺寸。为了处理2000×1500(3百万像素)的图片,我们将生成11,750个块——x方向的125个,y方向的94个。图3.3说明了4×4矩阵M如何线性化为16个元素的一维数组,首先是0行的所有元素,然后是第1行的四个元素,以此为例。

2024-01-08 13:00:55 802

原创 3.1 CUDA Thread Organization

与主机代码中的dim3变量不同,内核函数中这些变量的名称是CUDA C规范的一部分,不能更改——即内核中的gridDim和blockDim总是反映网格和块的维度。在块中,blockldx.x值从0到gridDim.x-1,blockldx.y值从O到gridDim.y-1,blockldx.z值从O到gridDim.z-1。熟悉C中结构使用的读者会意识到,这种1D配置的“速记”惯例利用了x字段是dim3结构gridDim(x,y,z)和blockDimlx,y,z)的第一个字段这一事实。

2024-01-07 23:37:52 812

原创 2.8 EXERCISES

如果我们想从主机数组h_A(h_A是源数组元素0的指针)复制3000字节的数据到设备数组d_A(d_A是目标数组元素0的指针),那么CUDA中此数据副本的适当APl调用是什么?如果我们想分配一个由n个浮点元素组成的数组,并有一个foating-point指针变量d_A来指向分配的内存,那么cudaMalloc()调用的第一个参数的适当表达式是什么?如果我们想在CUDA设备全局内存中分配一个v整数元素的数组,对于cudaMalloc调用的第二个参数,适当的表达式是什么?这可以减少一些重复性的代码声明。

2024-01-07 18:37:53 785

原创 2.7 SUMMARY

本章提供了CUDA C编程模型的快速、简化的概述。CUDA扩展C语言以支持并行计算。在本章中,我们讨论了这些扩展的基本子集。

2024-01-07 17:48:23 319

原创 2.6 KERNEL LAUNCH

2.12和2.15共同说明了一个简单的CUDA程序,该程序由主机代码和设备内核组成。该代码是硬接的,每个线程块使用256个线程。然而,使用的线程块的数量取决于向量(n)的长度。请注意,所有线程块都在矢量的不同部分上运行。这为CUDA内核提供了硬件执行速度的可扩展性,也就是说,相同的代码在小型GPU上以较低的速度运行,并且在较大的GPU上速度更高。真正的应用程序通常有内核,与处理的数据量相比,需要更多的工作,这使得额外的开销是值得的。重要的是要再次指出,使用向量加法示例是为了它的简单性。

2024-01-07 17:40:41 350

原创 2.5 KERNEL FUNCTIONS AND THREADING

一般来说,线程的数量由于硬件效率的原因,线程块每个维度的线程应该是32的倍数。每个块中的第一个线程在其threadldx.x变量中具有值 0,第二个线程具有值1,第三个线程具有值2,等。对于给定的网格,块中的线程数在内置的blockDim变量中可用。在图2.11中,第一个块中的所有线程在其blockldx.x变量中都有值0,第二个线程块中的值为1,以此等。这种内核函数将在设备上执行,并且只能从主机代码调用,除非在支持动态并行的CUDA系统中,正如我们将在第13章CUDA动态并行性中解释的那样。

2024-01-07 17:23:07 1040

原创 2.4 DEVICE GLOBAL MEMORY AND DATA TRANSFER

相反的方向也是如此。然后,它从设备内存中释放d_A、d_B和d_C的内存,这是通过调用cudaFree函数完成的。第四个参数表示副本中涉及的内存类型:**从主机内存到主机内存,从主机内存到设备内存,从设备内存到主机内存,以及从设备内存到设备内存。在图2.6中,vecAdd函数的第1部分和第3部分需要使用CUDA API函数为A、B和C分配设备内存,将A和B从主机内存传输到设备内存,在矢量添加结束时将C从设备内存传输到主机内存,并为A、B和C释放设备内存。d_A、d_B和d_C中的地址是设备内存中的地址。

2024-01-07 16:41:08 780

基于 DDPG 智能体的四足机器人运动控制

MATLAB强化学习实战(十四) 基于 DDPG 智能体的四足机器人运动控制 https://blog.csdn.net/wangyifan123456zz/article/details/109679138#comments_16710443

2021-05-30

TrainMultipleAgentsToPerformCollaborativeTaskExample.zip

MATLAB强化学习实战(八) 训练多个智能体执行协作任务 代码

2021-05-25

TrainMultipleAgentsForAreaCoverageExample.zip

MATLAB强化学习实战(九) 多智能体的区域探索 源码

2021-05-06

TrainBipedRobotToWalkUsingReinforcementLearningAgentsExample.zip

MATLAB强化学习实战(十三) 使用强化学习智能体训练Biped机器人行走 代码

2021-02-21

TrainMultipleAgentsForPathFollowingControlExample.zip

多智能体的路径跟随控制matlab代码

2021-02-21

tensorflowlite 图像分类 安卓app

tensorflowlite 图像分类 安卓app 可直接安装 实时分类

2020-12-25

tensorflowlite 实例分割 安卓app

tensorflowlite 实例分割 安卓app 可直接安装

2020-12-25

tensorflow lite 目标检测 安卓app

tensorflow lite 目标检测 安卓app 使用github源码导出 可在安卓手机安卓 实时目标检测

2020-12-25

TrainMultipleAgentsForPathFollowingControlExample.zip

多智能体路径跟踪MATLAB 博文:https://blog.csdn.net/wangyifan123456zz/article/details/109633715

2020-12-24

使用Deep Network Designer创建智能体并使用图像观察进行训练--博客模型

MATLAB强化学习实战(六) 使用Deep Network Designer创建智能体并使用图像观察进行训练 https://blog.csdn.net/wangyifan123456zz/article/details/109579918 这篇博客的模型文件 需要的话可以下载

2020-11-09

Microsoft.PowerShell_profile.ps1

将脚本文件放入默认路径下 以管理员权限打开powershell 开始自动安装 powershell美化

2020-11-06

强化学习python代码-notebook

强化学习python代码,notebook 各个强化学习热门代码实现 q-learning sarsa dqn dpg 算法详解 仅供参考 ~~~~

2020-10-26

一种用于水下机器人分布式编队控制的自适应自组织神经网络方法pdf

一种用于水下机器人分布式编队控制的自适应自组织神经网络方法 论文pdf下载 ----------------------侵删----------------------- ~~~ ~~~

2020-10-23

YouCompleteMe.tar.xz YCM 完整包

YouCompleteMe 完整安装包 -------------YCM-------------------- ~~~~~~~~~~下载~~~~~~~~~~~~~

2020-09-07

.vimrc vim配置文件

.vimrc 文件 vim配置文件 字体、颜色 各类插件 ------------ 具体配置步骤找寻相关博客 仅供参考

2020-09-06

RTL8822CE_WiFi_linux_v5.9.0_36003_COEX20191120-1515.20200220-master.zip

RTL8822CE_WiFi_linux_v5.9.0 无线网卡驱动 1.解压 2.sudo sh ./install.sh ---------------------ok------------------

2020-09-06

卷积神经网络jupyter notebook详解,代码+图示

卷积神经网络(CNN)代码+图示详解,注解详细,深度解析CNN原理,手写数字识别代码+数据---------

2020-03-23

双电机MOS驱动工程(双面板+四层板)智能车驱动

恩智浦智能车双电机MOS驱动,双层板+四层板工程文件,元件库齐全,可直接打板焊接,电路稳定。--------------------

2020-03-23

全桥MOS驱动,双电机驱动

双电机MOS驱动,曾用于飞思卡尔智能车,亲身实践。体积灵巧,便于安放。

2018-11-16

恩智浦智能车摄像头组国赛3米1程序

摄像头十二届国赛程序,速度稳定,可提升空间很大,实验室速度更快,注释详细,适合新手,新C车模

2018-11-05

恩智浦智能车摄像头组国赛程序

恩智浦智能车竞赛十二届国赛程序,稳定速度3.2m,实验室速度更快,根据个人水平,提升空间还很大。注释详细,适合新手,同样适合老鸟。

2018-11-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除