热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CUDA学习入门2

1.nvidia提供了一个c的类库thrust用来简化编程,在安装cudatoolkit时候已经包含了thrust这个库全是头文件,不需要添加任何库文件

1. nvidia提供了一个c++的类库thrust用来简化编程,在安装cuda toolkit时候已经包含了thrust
这个库全是头文件,不需要添加任何库文件的依赖
测试程序

#include
#include

#include

#include

#include

#include

#include
///cpu
#include
#include
template <class T>
void cpu_sort(T begin, T end)
{std::sort(begin, end);
}
void gpu_sort(thrust::host_vector<int> &h_vec)
{
// transfer data to the devicethrust::device_vector<int> d_vec &#61; h_vec;// sort data on the device (846M keys per second on GeForce GTX 480)
thrust::sort(d_vec.begin(), d_vec.end());// transfer data back to host
thrust::copy(d_vec.begin(), d_vec.end(), h_vec.begin());
}
#define CHK_TIME(x) {int t1&#61;GetTickCount();x;int t2&#61;GetTickCount();printf(#x ": %d\n", t2-t1);}int main(void)
{
// generate 32M random numbers seriallythrust::host_vector<int> h_vec(32 <<20);std::generate(h_vec.begin(), h_vec.end(), rand);thrust::host_vector<int> h_vec_1(h_vec);CHK_TIME(cpu_sort(h_vec_1.begin(), h_vec_1.end()));thrust::host_vector<int> h_vec_2(h_vec);CHK_TIME(gpu_sort(h_vec_2));return 0;
}

View Code

 

notes
a&#xff09;文件要保存为.cu格式以便使用nvcc编译
b&#xff09;如果不知道vcproj如何设置&#xff0c;最简单的是把代码直接拷贝到一个example里面&#xff0c;利用其现成的工程来编译
c&#xff09;compile的时间实在太长了
d&#xff09;生成的文件太大了&#xff08;15MB&#xff09;

这是俺的测试结果&#xff08;注意&#xff0c;这里cpu是单线程&#xff0c;如果利用上多核的话&#xff0c;cpu性能会好很多&#xff09;

&#xff08;debug version&#xff09;
cpu_sort(h_vec_1.begin(), h_vec_1.end()):
94609
gpu_sort(h_vec_2):
3312
&#xff08;release version&#xff09;
cpu_sort(h_vec_1.begin(), h_vec_1.end()):
2828
gpu_sort(h_vec_2):
594

View Code

2. 关于cuda的sort算法&#xff0c;用的是 radix sort

http://stackoverflow.com/questions/6502151/parallel-sorting-on-cuda
Many GPU sorting implementations are variants of the bitonic sort, which is pretty well known and described in most reasonable texts on algorithms published in the last 25 or 30 years.The "reference" sorting implementation for CUDA done by Nadathur Satish from Berkeley and Mark Harris and Michael Garland from NVIDIA (paper here) is a radix sort, and forms the basis of what is in NPP and Thrust.

View Code

 



3. NPP是nvidia的信号处理函数库&#xff0c;类似于ipp&#xff0c;包含了很多基本的处理算法
https://developer.nvidia.com/npp

Eliminates unnecessary copying of data to/from CPU memoryProcess data that is already in GPU memoryLeave results in GPU memory so they are ready for subsequent processingData Exchange and InitializationSet, Convert, Copy, CopyConstBorder, Transpose, SwapChannelsArithmetic and Logical OperationsAdd, Sub, Mul, Div, AbsDiff, Threshold, CompareColor ConversionRGBToYCbCr, YcbCrToRGB, YCbCrToYCbCr, ColorTwist, LUT_LinearFilter FunctionsFilterBox, Filter, FilterRow, FilterColumn, FilterMax, FilterMin, Dilate, Erode, SumWindowColumn, SumWindowRowJPEGDCTQuantInv, DCTQuantFwd, QuantizationTableJPEGGeometry TransformsMirror, WarpAffine, WarpAffineBack, WarpAffineQuad, WarpPerspective, WarpPerspectiveBack , WarpPerspectiveQuad, ResizeStatistics FunctionsMean_StdDev, NormDiff, Sum, MinMax, HistogramEven, RectStdDev

View Code

4.  另外&#xff0c;还有一些额外的库比如NVIDIA cuFFT&#xff0c;NVIDIA cuBLAS &#xff08;6x to 17x faster performance than the latest MKL BLAS.&#xff09;&#xff0c;EM Photonics CULA Tools&#xff08;linear algebra library&#xff09;&#xff0c; NVIDIA cuSPARSE&#xff0c;NVIDIA CUDA Math Library    
https://developer.nvidia.com/gpu-accelerated-libraries



推荐阅读
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 本文介绍了使用Rust语言编写、保存和编译程序的简单步骤。首先,打开记事本文件并编写程序代码,然后将代码保存到一个以.rs为扩展名的文件中。接下来,使用rustc命令来编译运行程序。最后,通过命令行运行编译后的程序,得到输出结果。如果遇到编译错误,可以下载Build Tools for Visual Studio 2017来解决。 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • [转载]从零开始学习OpenGL ES之四 – 光效
    继续我们的iPhoneOpenGLES之旅,我们将讨论光效。目前,我们没有加入任何光效。幸运的是,OpenGL在没有设置光效的情况下仍然可 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • [翻译]PyCairo指南裁剪和masking
    裁剪和masking在PyCairo指南的这个部分,我么将讨论裁剪和masking操作。裁剪裁剪就是将图形的绘制限定在一定的区域内。这样做有一些效率的因素࿰ ... [详细]
author-avatar
为爱进地狱天堂_954
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有