tag 标签: cuda

相关博文
  • 热度 12
    2019-8-6 15:57
    6054 次阅读|
    3 个评论
    【零基础】搞懂GPU为什么比CPU“快”
    一、前言   近几年深度学习在各领域大显神威,而”GPU加速"也得到了越来越多的篇幅,似乎任何程序只要放到GPU上运行那速度就是杠杠的。GPU代替CPU计算已成了大势所趋?我先告诉你结论”那是不可能滴“,然后咱们再来说说”GPU为什么比CPU快“。 二、图形处理,GPU的源起   GPU是显卡的计算单元,就好比CPU是电脑的计算核心,有时我们直接就把GPU称为显卡。显而易见,GPU从诞生之初就是用来处理图像的。下面我们讲一个简单的例子来说明下为什么图像处理需要用到GPU,而CPU的缺点是什么。   我们讲一个画面”立体“,其实讲的是画面中对于光影的运用,下图就是一个简单的”圆“。   当我们给这个圆加上”光影“之后,它就变成了一个球。我们说球要比圆立体的多,这就是光影的作用。   光影的原理很简单,你需要想象一个远处的”光“,然后在画面上模拟出光照在物体上的明暗变化,计算机中这些明暗变化都是通过”计算“得到的。编程人员只需要输入光源的距离、亮度、被照体的位置,然后通过逐步计算、光影叠加就能得到图像中每一个像素应该显示什么颜色、什么亮度,一个立体画面也就跃然纸上了。   那么现在问题来了,假设屏幕分辨率为1920*1080,即2073600(207.36万)个像素,游戏中每个像素都需要根据光影参数来计算显示的颜色和明暗。假设一个常见的Intel I5 CPU主频为3.2GHz,即最多每秒可做32亿次运算。但这里的一次运算只是做了一次简单的二进制加减法或数据读取,一个像素的光影计算我们可以假设需要100次运算(关于CPU的运算原理可以看这篇文章https://mbb.eet-china.com/blog/3887969-407226.html),即CPU一秒约处理3200万次像素运算,大概15张图片,用专业点的说法,这个游戏流畅度大概是每秒15帧的样子。   可见使用CPU全力进行图形运算是有点吃力的,更何况CPU还要处理很多键盘指令、游戏后台计算等等。是CPU还不够快吗?假设现在速度翻倍,即每秒64亿次运算似乎也是不够的。其实CPU面临的主要问题是,虽然每一次光影计算都非常简单,但经不住像素太多啦,还都得排队一个一个做。然后工程师们想到“其实任何一个像素的计算与其他像素的计算结果关系不大”,那为啥不多整几个计算核心“并行”计算呢,于是GPU就出现了。   一个典型的显卡GTX1060,主频是1.5GHz大概是Intel I5一半左右,但是它具备1280个计算核心。每个计算核心每秒可做15亿次运算,1280个核心每秒就是19200亿次运算,那一秒可以处理192亿次像素计算,大概925张图片,是CPU计算能力的61倍!但GPU的特性只能应用于图形计算这种可以并行的任务,若是做普通的串行任务其速度远远不如CPU。 三、核心越多越好?   通过前面的叙述我们都知道了GPU速度“快于”CPU的奥秘在于它有很多的“核”,那能不能这样,我们给CPU也装上1000多个核,那速度岂不是快到飞起?答案是“不得行”。由于制造工艺的原因,CPU内核越多其频率也就越低。其实很容易想到,同步10个人的动作和同步1000个人的动作其难度肯定是不一样的。其次,电脑中大部分的运算都是串行的,即下一个运算要等到上一个运算完毕才能继续,这时候单次运算的速度才是最重要的。   所以相当长时间以内,CPU+GPU的搭配才是最佳方案。 四、GPU与并行计算   深度学习与图形处理有一些相通的地方,它需要大量的数据来“训练”模型。比如一个猫图识别AI,你需要提供数以万计的猫图供其“学习”。而每一张猫图的学习又与其他猫图没有先后关系,即你可以同时并行100、1000张猫图的学习,所以GPU在深度学习领域大放异彩。   实际上GPU编程一直是近年来的热点,作为高效程序员又怎么能不了解一二呢?CUDA是NVIDIA推出的并行计算框架,它囊括了GPU并行计算中所有你需要的组件,只需要简单安装(当然你电脑得是N卡)就可以在C代码中使用它提供的接口进行GPU编程了,当然对于非从业人员来说了解下相关知识也是极好的。    现在关注公众号“零基础爱学习”回复“GPU”就能获得下面的资料:    1、GPU高性能编程CUDA实战(中英文版+实例源码)    2、GPGPU编程技术 从GLSL、CUDA到OpenCL
  • 热度 16
    2016-2-29 18:11
    1309 次阅读|
    0 个评论
    24 February 2016, 德国纽伦堡: Toradex 发布基于具备强大CUDA计算功能的NVIDIA Tegra K1的最新计算机模块产品,这一产品进一步丰富了Toradex 基于ARM计算机模块产品家族。Apalis TK1是用来开发需要高性能图像处理同时又具备高速互联要求的高端嵌入式设备的理想选择,大多数目标应用为视觉和GPU加速并行运算。   Apalis TK1和现有Apalis系列基于NVIDIA Tegra 3 和 NXP i.MX 6 Quad/Dual计算机模块保持管脚兼容,其关键特性如下:     -基于NVIDIA TK1     -四核 ARM Cortex-A15, 主频高达 2.2GHz     -支持CUDA 6.5     -2GB RAM, 16GB on-board Flash     -接口: USB 3.0, PCIe, SATA, GbE, CAN, PWM, I2C, SPI 等 -多媒体: HDMI, LVDS, Digital Audio, Touch 等   “非常高兴可以提供这一基于NVIDIA TK1的新产品给我们的工业客户,让开发工程师们可以利用先进的CUDA 6.5来使他们的应用达到前所未见的高性能和并行运算水平。这一产品是Toradex和NVIDIA长久良好合作的证明,同时也进一步丰富了我们现有的基于NVIDIA Tegra 2 和 3的产品线。正是双方的合作伙伴关系使两家公司可以在嵌入式市场共同发展。” 来自于Stephan Dubach, CEO, Toradex。 ”Apalis TK1 的发布是NVIDIA和Toradex多年长久合作的结果。随着嵌入式市场越来越多的需要更高性能的解决方案,我们非常高兴Toradex开发了这样一款支持CUDA 6.5 全功能的模块产品,扩大了这个具备极高并行计算能力Jetson TK1平台的影响力,使得无论社区还是行业开发者都可以利用这一技术和产品开发更智能化的和有创造性的产品。“来自于Serge Palaric, Senior Director, EMEA Embedded OEMs Sales。 技术规格和供货 详细技术规格细节请见这里 https://www.toradex.com/computer-on-modules/apalis-arm-family/nvidia-tegra-k1 。我们将于Q2 2016开始供货。 产品展示 Toradex已经在Embedded World 2016, Feb 23-25展示了Apalis TK1产品。稍晚同样会于即将举行的GPU Technology Conference, April 04-07 展示此产品,展位529。详情请见 https://www.toradex.cn/events/gpu-technology-conference-usa-2016 。   关于 Toradex Toradex 是一家领先的 ARM 系统模块厂商,其模块可以广泛用于嵌入式产品应用领域。通过采用 Freescale i.MX 6 Vybrid, NVIDIA Tegra 以及其他先进的处理器,系统模块产品系列在性能、功耗和接口方面提供丰富的选择。 凭借超过 10 年的超长产品生命周期、终生免费的产品维护、可扩展性能的引脚兼容产品系列、直接高级技术支持,Toradex 在嵌入式计算市场脱颖而出。成立于 2003 年,总部位于瑞士霍尔夫,Toradex 公司网络已经遍布全球,在美国、越南、中国、印度、日本和巴西均设有办事处。更多的信息,请访问: https://www.toradex.cn。
  • 热度 22
    2016-2-29 18:11
    1383 次阅读|
    0 个评论
    24 February 2016, 德国纽伦堡: Toradex 发布基于具备强大CUDA计算功能的NVIDIA Tegra K1的最新计算机模块产品,这一产品进一步丰富了Toradex 基于ARM计算机模块产品家族。Apalis TK1是用来开发需要高性能图像处理同时又具备高速互联要求的高端嵌入式设备的理想选择,大多数目标应用为视觉和GPU加速并行运算。   Apalis TK1和现有Apalis系列基于NVIDIA Tegra 3 和 NXP i.MX 6 Quad/Dual计算机模块保持管脚兼容,其关键特性如下:     -基于NVIDIA TK1     -四核 ARM Cortex-A15, 主频高达 2.2GHz     -支持CUDA 6.5     -2GB RAM, 16GB on-board Flash     -接口: USB 3.0, PCIe, SATA, GbE, CAN, PWM, I2C, SPI 等 -多媒体: HDMI, LVDS, Digital Audio, Touch 等   “非常高兴可以提供这一基于NVIDIA TK1的新产品给我们的工业客户,让开发工程师们可以利用先进的CUDA 6.5来使他们的应用达到前所未见的高性能和并行运算水平。这一产品是Toradex和NVIDIA长久良好合作的证明,同时也进一步丰富了我们现有的基于NVIDIA Tegra 2 和 3的产品线。正是双方的合作伙伴关系使两家公司可以在嵌入式市场共同发展。” 来自于Stephan Dubach, CEO, Toradex。 ”Apalis TK1 的发布是NVIDIA和Toradex多年长久合作的结果。随着嵌入式市场越来越多的需要更高性能的解决方案,我们非常高兴Toradex开发了这样一款支持CUDA 6.5 全功能的模块产品,扩大了这个具备极高并行计算能力Jetson TK1平台的影响力,使得无论社区还是行业开发者都可以利用这一技术和产品开发更智能化的和有创造性的产品。“来自于Serge Palaric, Senior Director, EMEA Embedded OEMs Sales。 技术规格和供货 详细技术规格细节请见这里 https://www.toradex.com/computer-on-modules/apalis-arm-family/nvidia-tegra-k1 。我们将于Q2 2016开始供货。 产品展示 Toradex已经在Embedded World 2016, Feb 23-25展示了Apalis TK1产品。稍晚同样会于即将举行的GPU Technology Conference, April 04-07 展示此产品,展位529。详情请见 https://www.toradex.cn/events/gpu-technology-conference-usa-2016 。   关于 Toradex Toradex 是一家领先的 ARM 系统模块厂商,其模块可以广泛用于嵌入式产品应用领域。通过采用 Freescale i.MX 6 Vybrid, NVIDIA Tegra 以及其他先进的处理器,系统模块产品系列在性能、功耗和接口方面提供丰富的选择。 凭借超过 10 年的超长产品生命周期、终生免费的产品维护、可扩展性能的引脚兼容产品系列、直接高级技术支持,Toradex 在嵌入式计算市场脱颖而出。成立于 2003 年,总部位于瑞士霍尔夫,Toradex 公司网络已经遍布全球,在美国、越南、中国、印度、日本和巴西均设有办事处。更多的信息,请访问: https://www.toradex.cn。
相关资源
  • 所需E币: 0
    时间: 2023-11-13 17:24
    大小: 3.59KB
    TensorRT部署手把手教您,跟我一起来学习。这东西就是NVidia在自家显卡上做了一个深度学习inference加速的框架,只要你把训练好的模型参数和结构告诉他,他就能自动帮你优化(硬件相关),以达到最快速度。这涉及两个问题:应该以什么模型格式把模型喂给TensorRT?如何使用TensorRT优化后的模型?对于第一个问题:现在的深度学习框架非常多,不止常用的pytorch/tensorflow,而即使是同一种框架还可以使用不同的编程语言实现。让TensorRT对每一个框架都直接支持,显然是不可能的。TensorRT只需要知道网络的结构和参数即可,它支持三种转换入口:TF-TRT,要求是TensorFlow模型ONNX模型格式使用TensorRTAPI手动把模型搭起来,然后把参数加载进去第一种不够灵活,第三种比较麻烦,所以最省事方便的就是第二种方法。本文介绍第二种。ONNX就是一个通用的神经网络格式,一个.onnx文件内包含了网络的结构和参数。甭管是用什么深度学习框架写的网络,只要把模型导出成ONNX格式,就跟原本的代码没有关系了。转成ONNX格式还没有被优化,需要再使用TensorRT读取它并优化成TensorRTEngine。优化参数也在这一步指定。对于第二个问题:得到的TensorRTEngine是硬件相关的,之后跑模型只需要运行这个Engine即可。调用TensorRTEngine需要使用TensorRTRuntimeAPI。所以整个逻辑就是:把你的模型导出成ONNX格式。把ONNX格式模型输入给TensorRT,并指定优化参数。使用TensorRT优化得到TensorRTEngine。使用TensorRTEngine进行inference。屏蔽nouveau驱动nouveau是系统自带的一个显示驱动程序,需要先将其禁用,然后再进行下一步操作,否则在安装显卡驱动时,会提示:YouappeartoberunninganXserver…,然后安装失败。分别打开如下两个文件(如果没有就创建一个),并在其中输入如下两句,然后保存。#vim/etc/modprobe.d/nvidia-installer-disable-nouveau.conf#vim/lib/modprobe.d/nvidia-installer-disable-nouveau.conf...blacklistnouveauoptionsnouveaumodeset=0重做initramfs镜像重做镜像之后启动才会屏蔽驱动,否则无效,重做时应先rm已有驱动,否则会提示无法覆盖。这一步需要确保boot文件目录的空间足够,否则会失败。建议大于400MB#cp/boot/initramfs-$(uname-r).img/boot/initramfs-$(uname-r).img.bak#dracut/boot/initramfs-$(uname-r).img$(uname-r)--force#rm/boot/initramfs-$(uname-r).img.bak;这一步可不执行如果想用YOLOv5对图像做目标检测,在将图像输入给模型之前还需要做一定的预处理操作,预处理操作应该与模型训练时所做的操作一致。YOLOv5的输入是RGB格式的3通道图像,图像的每个像素需要除以255来做归一化,并且数据要按照CHW的顺序进行排布。所以YOLOv5的预处理大致可以分为两个步骤:将原始输入图像缩放到模型需要的尺寸,比如640x640。这一步需要注意的是,原始图像是按照等比例进行缩放的,如果缩放后的图像某个维度上比目标值小,那么就需要进行填充。举个例子:假设输入图像尺寸为768x576,模型输入尺寸为640x640,按照等比例缩放的原则缩放后的图像尺寸为640x480,那么在y方向上还需要填充640-480=160(分别在图像的顶部和底部各填充80)。来看一下实现代码:cv::Matinput_image=cv::imread("dog.jpg");cv::Matresize_image;constintmodel_width=640;constintmodel_height=640;constfloatratio=std::min(model_width/(input_image.cols*1.0f),               model_height/(input_image.rows*1.0f));//等比例缩放constintborder_width=input_image.cols*ratio;constintborder_height=input_image.rows*ratio;//计算偏移值constintx_offset=(model_width-border_width)/2;constinty_offset=(model_height-border_height)/2;cv::resize(input_image,resize_image,cv::Size(border_width,border_height));cv::copyMakeBorder(resize_image,resize_image,y_offset,y_offset,x_offset,          x_offset,cv::BORDER_CONSTANT,cv::Scalar(114,114,114));//转换为RGB格式cv::cvtColor(resize_image,resize_image,cv::COLOR_BGR2RGB);格式转化要将tensorflow的pb文件转化为uff格式的文件,首先找到convert_to_uff文件,看自己用的是哪个版本的python,如果是python3,则在/usr/lib/python3.5/dist-packages/uff/bin文件夹下,如果是python2,则在/usr/lib/python2.7/dist-packages/uff/bin文件夹下我们在终端中进入end_to_end_tensorflow_mnist,运行以下指令首先使用Pytorch实现一个和上文一致的模型,即只对输入做一次池化并输出;然后将Pytorch模型转换成ONNX模型;最后将ONNX模型转换成TensorRT模型。这里主要使用了TensorRT的OnnxParser功能,它可以将ONNX模型解析到TensorRT的网络中。最后我们同样可以得到一个TensorRT模型,其功能与上述方式实现的模型功能一致。importtorch importonnx importtensorrtastrt   onnx_model='model.onnx'  classNaiveModel(torch.nn.Module):   def__init__(self):     super().__init__()     self.pool=torch.nn.MaxPool2d(2,2)    defforward(self,x):     returnself.pool(x)  device=torch.device('cuda:0')  #generateONNXmodel torch.onnx.export(NaiveModel(),torch.randn(1,3,224,224),onnx_model,input_names=['input'],output_names=['output'],opset_version=11) onnx_model=onnx.load(onnx_model)  #createbuilderandnetwork logger=trt.Logger(trt.Logger.ERROR) builder=trt.Builder(logger) EXPLICIT_BATCH=1<<(int)(   trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH) network=builder.create_network(EXPLICIT_BATCH)  #parseonnx parser=trt.OnnxParser(network,logger)  ifnotparser.parse(onnx_model.SerializeToString()):   error_msgs=''   forerrorinrange(parser.num_errors):     error_msgs+=f'{parser.get_error(error)}\n'   raiseRuntimeError(f'Failedtoparseonnx,{error_msgs}')  config=builder.create_builder_config() config.max_workspace_size=1<<20 profile=builder.create_optimization_profile()  profile.set_shape('input',[1,3,224,224],[1,3,224,224],[1,3,224,224]) config.add_optimization_profile(profile) #createengine withtorch.cuda.device(device):   engine=builder.build_engine(network,config)  withopen('model.engine',mode='wb')asf:   f.write(bytearray(engine.serialize()))   print("generatingfiledone!") 
  • 所需E币: 1
    时间: 2020-6-11 20:23
    大小: 681.13KB
    上传者: 指的是在下
    2012H264decoderCUDA
  • 所需E币: 1
    时间: 2020-5-3 09:12
    大小: 286.58KB
    上传者: 指的是在下
    CUDA是NVIDIA发明的一种并行计算平台和编程模型。它通过利用图形处理器(GPU)的处理能力,可大幅提升计算性能。本例程中包括了使用CUDA9.2版本完成FFT,矩阵相乘等操作。