《GPU高性能运算之CUDA》勘误表

来源:互联网 发布:unity小游戏源码 编辑:程序博客网 时间:2024/05/01 22:39

这是我们《GPU高性能运算之CUDA》一书的勘误表,多谢读者朋友的反馈与分享~~

 

 

 

1.        前言中的致谢部分:

讨论群中的陈国峰、

修改为:

讨论群中的刘伟峰、刘国峰、

2.        前言中的致谢部分:

以及NVIDIA深圳有限公司的Terrence Hong, Jerry Zhou,Jonny Qiu, Blues Yu, Jerry Jia, Donaven Chen, Sandy Zou等同事的支持;

修改为: 

以及NVIDIA深圳有限公司的Terence horng, Jerry Zhou,Johnny Qiu, Blues Yu, Jerry Jia, Donovan Chen, Sandy Zou等同事的支持;

3.        3

现代CPU的分支预测正确率已经达到了99%以上

修改为:

现代CPU的分支预测正确率已经达到了95%以上

4.        19页代码中的:

"s_data[128] = A[bid *128 +tid]"

修改为:

"s_data[tid] = A[bid *128 +tid]"

5.        30

“整个grid中最多也只能定义65535block"

修改为:

 “整个grid中最多能定义65535 * 65535block"

 

Db.xDb.y最大值为512Db.z最大为4

修改为:

"Db.xDb.y最大值为512Db.z最大为64"

6.        32

gridDimgrid dimension,用于说明整个网格的维度与尺寸,与host<<<>>>中的Ng相对应;gridDim.xgridDim.y分别与Ng.x,Ng.y相等

修改为:

gridDimgrid dimension,用于说明整个网格的维度与尺寸,与host<<<>>>中的Dg相对应;gridDim.xgridDim.y分别与Dg.x,Dg.y相等

 

blockDimblock Dimension,用于说明每个block的维度与尺寸,与host<<<>>>中的Nb对应;blockDim.x, blockDim.y, blockDim.z分别与Nb.x, Nb.y, Nb.z相等。

应为:

blockDimblock Dimension,用于说明每个block的维度与尺寸,与host<<< >>>中的Db对应;blockDim.xblockDim.yblockDim.z分别与Db.xDb.yDb.z相等。

 

7.        31页图2-8

右边的block标号应为(1,0)

见附件图

图2-8,图2-17

8.        44页图2-17

右边的block标号应为(1,0)

见附件图

9.        66

output[y * width + x] = tex2D[tex,tu, ty];”

修改为:

 output[y * width + x] =tex2D[texRef, tu, ty];”

10.    72

执行__thradfence_block()__threadfence()__syncthreads()

修改为:

执行__threadfence()__threadfence_block()、或__syncthreads()

11.    80

cudaStreamDestroy(&stream[i]);

修改为:

cudaStreamDestroy(stream[i]);

12.    81

 

For (int i = 0; i < 2; ++i)

 

cudamemcpyasync(inputdevptr + i * size, hostptr + i * size,size,cudamemcpyhosttodevice, stream);

For (int i = 0; i < 2; ++i)

 

mykernel<<<100, 512, 0, stream>>>(outputdevptr + i* size, inputdevptr + i * size, size);

For (int i = 0; i < 2; ++i)

 

cudamemcpyasync(hostptr + i * size, outputdevptr + i * size,size,cudamemcpydevicetohost, stream);

Cudathreadsynchronize();

 

修改为:

 

for (int i = 0; i < 2; ++i)

 

cudamemcpyasync(inputdevptr + i * size/sizeof(float), hostptr + i *size/sizeof(float) ,size, cudamemcpyhosttodevice, stream);

for (int i = 0; i < 2; ++i)

 

mykernel<<<100, 512, 0, stream>>>(outputdevptr + i* size, inputdevptr + i * size, size);

For (int i = 0; i < 2; ++i)

 

cudamemcpyasync(hostptr + i * size/sizeof(float), outputdevptr + i *size/sizeof(float),size, cudamemcpydevicetohost, stream);

Cudathreadsynchronize();

13.    133

关于增加active blockactive warp数量优化程序性能的讨论,请见本书4.6.24.6.34.6.4节。

修改为:

关于增加active blockactive warp数量优化程序性能的讨论,请见本书4.3.2节。

14.    137

       对图3-10的修改


3-10 双发射时序示意图(不代表实际实现)

15.    197

“如果⊙为..

修改为:

 “如果⊕为..

16.    238 规则添加里的第(3)条

3)重启VS环境。

修改为:

3)在工程名上右键,选择custom build rules->Find Existing,选中cuda.rules,点击ok

 

17.    作者简介

张舒,电子科技大学信息与通信工程专业硕士,现任NVIDIA深圳有限公司系统设计验证工程师,CUDA技术顾问。曾实现基于CUDA的神经网络、聚类分析、主分量分析等模式识别算法,以及信号仿真、密码破解、字符串匹配等应用。

褚艳利,西安电子科技大学计算机系硕士在读,从事高性能计算、模型验证、软件测试与自演化技术的研发工作,喜欢并精于算法设计与数据结构,多次参加ACM/ICPC程序设计大赛与数模竞赛。CUDA编程及优化经验丰富,GPU高性能计算技术推广者。

赵开勇,本科毕业于北京理工大学飞行器总体设计专业,曾任CCUR(美国并行计算机公司)亚太区技术支持,现就读于香港浸会大学计算机系,主要从事高性能计算与网络编码技术的研究。在CSDN论坛中担任CUDA和高性能计算两个板块的大版主,积极推广高性能计算。同时担任浪潮集团GPU高性能开发顾问,提供各种应用的GPU高性能计算解决方案。任2009Nvidia CUDA校园程序设计大赛评委。http://www.hpctech.com网站创始人之一。

张钰勃,长期从事数值计算,计算流体力学,计算机图形学及可视化等领域的研究,拥有丰富的GPU并行计算经验。曾在浙江大学CAD&CG国家重点实验室参与国家973研究项目并在国内外会议期刊发表多篇优秀论文。本科与硕士分别毕业于浙江大学数学系和香港浸会大学数学系,现于加州大学戴维斯分校攻读计算机博士学位。