
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们今天尝试写一个GPU压力测试程序,如果我们写一个CPU压力测试程序,我们知道我们需要让CPU进行繁重的计算,那么对于GPU压力测试程序该怎么做呢?
首先我们应该会想到,该如何让我们的代码运行在GPU上?一些图形库API会进行硬件加速,如Direct3D和OpenGL。一些异构编程框架如CUDA与OpenCL可以指定代码在GPU上运行。然而这些库使用起来并不简单, 我们可能需要很长时间的学习。那么有没有一种简单并且方便编程的库呢?微软给我们提供了一个选择:C++ AMP(Accelerated Massive Parallelism)库。C++ AMP是一个异构编程框架,使用者可以很方便的利用GPU进行并行计算。C++ AMP库类似于C++ STL库,在Visual Studio中我们只要包含相应的头文件就可以使用它。关于C++ AMP库的详细使用方法,请参考MSDN链接:https://msdn.microsoft.com/zh-cn/library/hh265136。
曼德勃罗特集
解决了使用C++ AMP在GPU上进行计算的问题?现在我们该思考让GPU计算什么的问题。我们的目标是实现一个GPU压力测试程序,所以我们得保证我们的计算足够复杂。我们知道GPU有大量的计算核心,所以我们可能需要进行并行计算,这样才能让GPU产生压力。曼德勃罗特集是易并行计算的一个典型例子,并且该集合以图像的方式呈现后很有意思,该集合在有些位置可以进行无限放大,如下图:
曼德勃罗特(Mandelbrot)集是一种复平面上的点集。对任意复数C,我们有如下公式:
所有使得无限迭代后的结果能保持有限数值的C的集合,就构成曼德勃罗特集。在计算机中对于无限迭代我们只能取一个固定的值例如256,意思就是最大计算到Z256Z256,有限数值指的是复数ZnZn的模小于某个指定的值例如2,对于不同的C有的C可能迭代几次后ZnZn模就大于2,有的C可能迭代256次后ZnZn的模还在范围内。我们可以记录下不同的C的迭代值。例如我们可以计算(-2, 2),(2, 2),(2, -2),(-2, -2)这4个点范围内等比例划分的500*500的不同的C的迭代值,将迭代值[0~256]映射到颜色空间上,将C对应到图片的像素点位置,我们就可以得到500*500的绚丽图片。
需要注意的是使用C++ AMP库有如下限制:
●只能在Windows平台下使用Visual Studio进行编程
Windows最低版本Windows 7
Visual Studio最低版本Visual Studio 2012
●只能运行在最低支持DirectX11的显卡上(独立显卡或核心显卡)
免责声明:本文由佛山it培训小编转载自网络,旨在分享提供阅读,版权归原作者所有,如有侵权请联系我们进行删除。