《CUDA C编程权威指南》——3.8节习题

3.8 习题
1.当在CUDA中展开循环、数据块或线程束时,可以提高性能的两个主要原因是什么?解释每种展开是如何提升指令吞吐量的。
2.参考核函数reduceUnrolling8和实现核函数reduceUnrolling16,在这个函数中每个线程处理16个数据块。将该函数的性能与reduceUnrolling8内核性能进行比较,通过nvprof使用合适的指标与事件来解释性能差异。
3.参考核函数reduceUnrolling8,替换以下的代码段:

比较每次的性能并解释使用nvprof指标的差异。
4.参考核函数reduceCompleteUnrollWarps8。不要将vmem声明为volatile修饰符,而是使用__syncthreads。注意__syncthreads必须被线程块里的所有线程调用。比较两个核函数的性能并使用nvprof来解释所有的差异。
5.用C语言实现浮点数s的求和归约。
6.参考核函数reduceInterleaved和reduceCompleteUnrollWarps8,实现每个浮点数s的版本。比较它们的性能,选择合适的指标与/或事件来解释所有差异。它们相比于操作整数数据类型有什么不同吗?
7.被动态地产生孩子的全局数据进行更改,这种改变什么时候能保证对其父亲可见?
8.参考文件nestedHelloWorld.cu,用图3-30所示的方法实现一个新的核函数。
9.参考文件nestedHelloWorld.cu,实现一个新的核函数,使其可以用给定深度来限制嵌套层。

时间: 2024-10-24 06:36:20

《CUDA C编程权威指南》——3.8节习题的相关文章

《CUDA C编程权威指南》——3.1节CUDA执行模型概述

3.1 CUDA执行模型概述 一般来说,执行模型会提供一个操作视图,说明如何在特定的计算架构上执行指令.CUDA执行模型揭示了GPU并行架构的抽象视图,使我们能够据此分析线程的并发.在第2章里,已经介绍了CUDA编程模型中两个主要的抽象概念:内存层次结构和线程层次结构.它们能够控制大规模并行GPU.因此,CUDA执行模型能够提供有助于在指令吞吐量和内存访问方面编写高效代码的见解. 在本章会重点介绍指令吞吐量,在第4章和第5章里会介绍更多的关于高效内存访问的内容.3.1.1 GPU架构概述 GPU

《CUDA C编程权威指南》——1.2节异构计算

1.2 异构计算 最初,计算机只包含用来运行编程任务的中央处理器(CPU).近年来,高性能计算领域中的主流计算机不断添加了其他处理元素,其中最主要的就是GPU.GPU最初是被设计用来专门处理并行图形计算问题的,随着时间的推移,GPU已经成了更强大且更广义的处理器,在执行大规模并行计算中有着优越的性能和很高的效率. CPU和GPU是两个独立的处理器,它们通过单个计算节点中的PCI-Express总线相连.在这种典型的架构中,GPU指的是离散的设备从同构系统到异构系统的转变是高性能计算史上的一个里程

《CUDA C编程权威指南》——1.4节使用CUDA C编程难吗

1.4 使用CUDA C编程难吗CPU编程和GPU编程的主要区别是程序员对GPU架构的熟悉程度.用并行思维进行思考并对GPU架构有了基本的了解,会使你编写规模达到成百上千个核的并行程序,如同写串行程序一样简单.如果你想编写一个像并行程序一样高效的代码,那么你需要对CPU架构有基本的了解.例如,数据局部性在并行编程中是一个非常重要的概念.数据局部性指的是数据重用,以降低内存访问的延迟.数据局部性有两种基本类型.时间局部性是指在相对较短的时间段内数据和/或资源的重用.空间局部性是指在相对较接近的存储

《CUDA C编程权威指南》——1.2 异构计算

1.2 异构计算 最初,计算机只包含用来运行编程任务的中央处理器(CPU).近年来,高性能计算领域中的主流计算机不断添加了其他处理元素,其中最主要的就是GPU.GPU最初是被设计用来专门处理并行图形计算问题的,随着时间的推移,GPU已经成了更强大且更广义的处理器,在执行大规模并行计算中有着优越的性能和很高的效率. CPU和GPU是两个独立的处理器,它们通过单个计算节点中的PCI-Express总线相连.在这种典型的架构中,GPU指的是离散的设备从同构系统到异构系统的转变是高性能计算史上的一个里程

《CUDA C编程权威指南》——导读

###前 言 欢迎来到用CUDA C进行异构并行编程的奇妙世界! 现代的异构系统正朝一个充满无限计算可能性的未来发展.异构计算正在不断被应用到新的计算领域-从科学到数据库,再到机器学习的方方面面.编程的未来将是异构并行编程的天下! 本书将引领你通过使用CUDA平台.CUDA工具包和CUDA C语言快速上手GPU(图形处理单元)计算.本书中设置的范例与练习也将带你快速了解CUDA的专业知识,助你早日达到专业水平! 目 录 第1章 基于CUDA的异构并行计算 1.1 并行计算 1.1.1 串行编程和

《CUDA C编程权威指南》——1.4 使用CUDA C编程难吗

1.4 使用CUDA C编程难吗 CPU编程和GPU编程的主要区别是程序员对GPU架构的熟悉程度.用并行思维进行思考并对GPU架构有了基本的了解,会使你编写规模达到成百上千个核的并行程序,如同写串行程序一样简单. 如果你想编写一个像并行程序一样高效的代码,那么你需要对CPU架构有基本的了解.例如,数据局部性在并行编程中是一个非常重要的概念.数据局部性指的是数据重用,以降低内存访问的延迟.数据局部性有两种基本类型.时间局部性是指在相对较短的时间段内数据和/或资源的重用.空间局部性是指在相对较接近的

《CUDA C编程权威指南》——3.2节理解线程束执行的本质

3.2 理解线程束执行的本质 启动内核时,从软件的角度你看到了什么?对于你来说,在内核中似乎所有的线程都是并行地运行的.在逻辑上这是正确的,但从硬件的角度来看,不是所有线程在物理上都可以同时并行地执行.本章已经提到了把32个线程划分到一个执行单元中的概念:线程束.现在从硬件的角度来介绍线程束执行,并能够获得指导内核设计的方法.3.2.1 线程束和线程块 线程束是SM中基本的执行单元.当一个线程块的网格被启动后,网格中的线程块分布在SM中.一旦线程块被调度到一个SM上,线程块中的线程会被进一步划分

《CUDA C编程权威指南》——3.3节并行性的表现述

3.3 并行性的表现为更好地理解线程束执行的本质,将使用不同的执行配置分析下述的sumMatrixOn-GPU2D核函数.使用nvprof配置指标,可以有助于理解为什么有些网格/块的维数组合比其他的组合更好.这些练习会提供网格和块的启发式算法,这是CUDA编程人员必备的技能.二维矩阵求和的核函数如下所示: 在接下来的部分,将使用生成的sumMatrix对块和网格配置执行试验.3.3.1 用nvprof检测活跃的线程束首先,需要生成一个参考结果作为性能基准.为此,要先测试一组基础线程块的配置,尤其

《CUDA C编程权威指南》——2.1节CUDA编程模型概述

2.1 CUDA编程模型概述 CUDA编程模型提供了一个计算机架构抽象作为应用程序和其可用硬件之间的桥梁.图2-1说明了程序和编程模型实现之间的抽象结构的重要.通信抽象是程序与编程模型实现之间的分界线,它通过专业的硬件原语和操作系统的编译器或库来实现.利用编程模型所编写的程序指定了程序的各组成部分是如何共享信息及相互协作的.编程模型从逻辑上提供了一个特定的计算机架构,通常它体现在编程语言或编程环境中. 除了与其他并行编程模型共有的抽象外,CUDA编程模型还利用GPU架构的计算能力提供了以下几个特

《CUDA C编程权威指南》——1.1节并行计算

1.1 并行计算 在过去的几十年间,人们对并行计算产生了越来越多的兴趣.并行计算的主要目标是提高运算速度. 从纯粹的计算视角来看,并行计算可以被定义为计算的一种形式,在这种形式下,计算机可以同时进行许多运算,计算原则是一个大的问题往往可以被划分为很多可以同时解决的小问题. 从程序员的角度来说,一个很自然的疑问,就是如何将并发计算映射到计算机上.假设你有许多计算资源,并行计算可以被定义为同时使用许多计算资源(核心或计算机)来执行并发计算,一个大的问题可以被分解成多个小问题,然后在不同的计算资源上并