1.1_方法

1.1 方法

写一本以CUDA为主题的书籍是件困难的事情。并行程序设计需要涉及的因素很多,即使暂不考虑操作系统因素(Windows、Linux和 MacOS)、平台因素(特斯拉与费米,集成显卡与独立显卡,多GPU)、CPU/GPU并发因素以及CUDA的特定因素(例如,决定是使用CUDA运行时还是驱动程序API编写代码),也是相当复杂的。当你还需要考虑如何最好地组织CUDA内核程序时,其复杂程度可能让人窒息。

本书为了应对这一复杂性,在介绍多数主题时从不同角度不止一次地进行解释。“纹理映射硬件做哪些事情?”这一问题跟“怎样写一个进行纹理映射操作的内核程序?”是不同的。本书分别在不同章节回答这两个问题。异步内存复制操作可以在几处不同的主题下来解释:软件的抽象(例如,参与的主机内存必须分配为锁页内存)、不同的硬件实现、支持该功能的API以及优化策略之间的相互作用。读者有时不妨查阅索引,然后选取相应主题下的多处文本来阅读。

性能优化指南通常组织得像咨询栏目。很多时候,它们给出的指导缺乏足够的实际应用场景,而且往往前后矛盾。上述观点不是为了斥责它们,它们只是问题复杂性的一个症状而已。优化CPU的金律,是经历了至少20年的持续探索,而GPU是更难进行编写程序的,所以期望CUDA的优化建议很简单就有点不切实际了。

此外,GPU计算是新生事物,即使是GPU架构师仍在学习最佳的编程方式,更不用说开发人员了。对CUDA开发人员而言,终极决定因素是性能,而性能通常采用系统时间来衡量!网格和线程块大小、何时以及如何使用共享内存、每个线程应该计算多少次运算以及占用率的数值,都可能影响性能。只有通过实现多种方法并测量每个方法的实际表现,才能给出切实的推荐。

1.1_方法 - The CUDA Handbook | OpenTech