用户
 找回密码
 立即注册
ice 来自手机
31#
发表于 2013-10-12 00:45:34
补充一下,一般CPU的算法需要在算法等价的前提下对具体实现充分进行针对GPU特性的修改,这样才能发挥出GPU的威力,或者说体现出程序员的价值。

直接套用,或者简单修改,常常无法发挥GPU的性能。
使用道具 举报 回复 支持 反对
发表于 2013-10-13 10:23:51
ice 发表于 2013-10-12 00:45
补充一下,一般CPU的算法需要在算法等价的前提下对具体实现充分进行针对GPU特性的修改,这样才能发挥出GPU ...

我正在参考sample里面的一维haar小波变换,但是例子里每个block用了512个线程,我的电脑运行不了。无法跟踪数据,很难看出程序的思路。
有两个指令看不明白

定义的data0,data1是float型变量,而等号后面的是一个共享存储器空间,把一个空间里那么多数据赋值给一个变量,这怎么理解呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
使用道具 举报 回复 支持 反对
发表于 2013-10-13 10:51:05
翊君 发表于 2013-10-13 10:23
我正在参考sample里面的一维haar小波变换,但是例子里每个block用了512个线程,我的电脑运行不了。无法跟 ...

楼主您好,

如果有类似:
float data = set[n];
的代码,则是将set[]中的第n个元素赋值给data变量。而不是您原本认为的“将一堆元素给一个变量”,希望您能理解。

感谢来访。
使用道具 举报 回复 支持 反对
发表于 2013-10-13 10:51:42
翊君 发表于 2013-10-13 10:23
我正在参考sample里面的一维haar小波变换,但是例子里每个block用了512个线程,我的电脑运行不了。无法跟 ...

LZ您好:

1:我无法为您解释CUDA Samples中的小波变换的例子,我不懂小波变换,CUDA Samples根据授权协议,也不享受任何支持的。

2:任何计算能力版本的NVIDIA GPU都至少支持每个block内部有512线程的,因而您不能用这个理由来说明您的问题,我将视之为某种搪塞或者直接无视此句。

3:原先的写法是正确的,您的问题我无法理解。请问您真的是C语言的程序员么?(以下省略若干字)

祝您好运~
使用道具 举报 回复 支持 反对
发表于 2013-10-13 11:03:53
横扫千军 发表于 2013-10-13 10:51
楼主您好,

如果有类似:

tid=threadsIdx.x;
N个线程并行运算,tid不就是同时为0~N吗,data至少有N个float单元吧。
使用道具 举报 回复 支持 反对
发表于 2013-10-13 11:07:19
ice 发表于 2013-10-13 10:51
LZ您好:

1:我无法为您解释CUDA Samples中的小波变换的例子,我不懂小波变换,CUDA Samples根据授权协 ...

我没有说过我是程序员,我只是校园里二级C水平的入门菜鸟。如果请教的问题过于简单,请原谅。
使用道具 举报 回复 支持 反对
发表于 2013-10-13 11:07:26
翊君 发表于 2013-10-13 11:03
tid=threadsIdx.x;
N个线程并行运算,tid不就是同时为0~N吗,data至少有N个float单元吧。 ...

N个线程里有N个,你可以当作一个线程只有一个。

而一个线程里只有一个确定的下标,从而有一个确定的值,是不是你就容易理解了。
使用道具 举报 回复 支持 反对
发表于 2013-10-13 11:13:53
横扫千军 发表于 2013-10-13 11:07
N个线程里有N个,你可以当作一个线程只有一个。

而一个线程里只有一个确定的下标,从而有一个确定的值, ...

那么说DATA是每个线程的私有寄存器?而且每个私有寄存器里都有一个同名为data0的变量?
使用道具 举报 回复 支持 反对
发表于 2013-10-13 11:15:43
翊君 发表于 2013-10-13 11:07
我没有说过我是程序员,我只是校园里二级C水平的入门菜鸟。如果请教的问题过于简单,请原谅。 ...

LZ您好:

写程序的人都是程序员,无论是专业的还是业余的,无论是资深的还是入门的。

之所以问你是不是c语言的程序员,用以在于,在其他的一些语言中(比如fortran),可以直接一个矩阵对一个矩阵进行运算,而不用像C语言里面那样拆开控制元素运算。

如果您之前是fortran程序员,可能会受到这个习惯的影响,从而产生错误的理解或者一时的误解。因而提醒您注意一下。

此句的具体原因,横扫斑竹已经详细解释了,不再赘述。

祝您好运~
使用道具 举报 回复 支持 反对
发表于 2013-10-13 11:25:55
翊君 发表于 2013-10-13 11:13
那么说DATA是每个线程的私有寄存器?而且每个私有寄存器里都有一个同名为data0的变量? ...

LZ您好:

在kernel里面定义的变量和数组都是每个线程私有的,除了__shraed__ 声明的,这个是整个block共有的。

您可以将“一个线程”简单看做“一个十分微小但是全功能的计算机”,他们之间用线程编号区分,以及每个“计算机”自己会跑一份kernel代码,那么自己代码中定义的变量当然是私有的,和其他“计算机”无关。

大致如此,祝您好运~
使用道具 举报 回复 支持 反对
1234
发新帖
您需要登录后才可以回帖 登录 | 立即注册