C_and_CPP 板


LINE

开发平台(Platform): (Ex: Win10, Linux, ...) Linux GPGPU-Sim 问题(Question): 目前正在测试dependent kernel kernel A 负责两个阵列相加存到result array kernel B 把kernel A的reult + 1 再将结果与CPU运算结果比对 一般的写法是: 1.Memcpy两个阵列的data到device 2.launch kernel A 3.将result复制回host 4.把result传到device 5.launch kernel B 6.将运算结果复制回host 7.比对 但我把第三四步骤省略 比对结果也是正确的 请问是为什麽呢? 是因为kernel B需要的data与kernel A的result array记忆体位置相同? 或是有其他原因? 程式码如下 https://gist.github.com/anonymous/5d8b6c58ce7ecd0407f6595d41fd8a2c 後来我改变他的data_size 例如200(原本是100) 结果前100个正确 後100个错误 这又是为什麽? --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.118.155.192
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1499851515.A.90A.html
1F:→ Schottky: 第三和第四步骤 (36,37 两行) 本来就是多余的 07/12 17:41
2F:→ wheatdog: 3和4感觉没有必要,可以直接把gpu的pointer传给下个ker 07/12 17:44
3F:→ wheatdog: nel 07/12 17:44
4F:→ Schottky: 错误的原因... 你问我我问谁... 07/12 17:45
5F:→ Schottky: VectorAdd2 到底实际作用是什麽只有你知道 07/12 17:45
6F:→ Schottky: 但我觉得 17 行那个 idx 值可能跟你想的不一样 07/12 17:46
7F:→ Schottky: 试试 int idx = blockIdx.x*blockDim.x + threadIdx.x; 07/12 17:46
为什麽3,4是多余的? 是遇到要使用相同的data就可以不用这两个步骤的意思? VectorAdd2作用是把VectorAdd1的结果再加一 整个程式目的是要测试不做3,4会不会影响结果 改成blockIdx.x*blockDim.x + threadIdx.x确实是正确了 不过我block只有一个 那麽blockIdx.x为0 跟原本只用threadIdx.x有差别吗? 还是我哪里误会了?
8F:→ Schottky: 你的 block size 是不是高於 100 却不到 200 07/12 18:46
你是指VectorAdd2<<<1, size>>>(....) ^^^这个吗 我block size设跟data size相同 原本100 结果正确 换成200後错一半
9F:→ Schottky: 这麽说好了,你把 blockDim.x 存进 result array 07/12 19:05
10F:→ Schottky: 再 printf 出来看看和你想的一样不一样... 07/12 19:05
blockIdx.x 印出来是0 blockDim.x 印出来是200 也就是data_size threadIdx.x 印出来是0~199 跟我想的一样.... 现在有点搞混了 我把idx那行改回我最原本那样 结果是正确的 我再看清楚我到底改了哪里 -------------------------------------- 我比较想了解的地方是 有相依的kernel间的data 可以不用回传? 请问原理是什麽?
11F:→ Schottky: 这个问题嘛,只是你脑筋打结而已... 07/12 19:57
12F:→ Schottky: device memory 又还没有 free 掉,本来就不会平白消失 07/12 19:57
13F:→ Schottky: 跟前後 kernel 有没有相依一点关系也没有 07/12 19:58
14F:→ Schottky: 是说你害我很想买新显示卡..... 07/12 20:01
0.0 哈哈 犒赏自己 买下去! 不过回到我问的 记忆体没有free掉 所以意思是他存取同个地方罗 那麽 会存取同位址 是为什麽? 这个可以解释一下吗
15F:→ Schottky: 位址不就存在 dev_A, dev_B ... 里面,位址值有变吗? 07/12 21:20
16F:→ Schottky: 没变的话为什麽不是存取同位址 07/12 21:20
你的意思是 因为都是dev_C 记忆体位置就是那里 所以我launch VectorAdd2 後面带参数dev_C 那麽他就会去读这个记忆体位址 所以就会拿到正确的资料 是这样吗?
17F:→ Schottky: 而且 device 和 host 之间的 memcpy 非常之慢 07/12 21:24
18F:→ Schottky: 资料可以直接留给下一个 kernel 何必再传回来传过去 07/12 21:27
很慢我知道 只是我不知道原来可以这样做
19F:→ Schottky: 是的,从 allocate 到 free 之间那块记忆体都固定给你用 07/13 08:45
20F:→ Schottky: 所以你负责记住那个位址(放在dev_C)并且用完要负责free 07/13 08:45
21F:→ Schottky: 跟平常写 C 语言使用 host memory 的状况是一样的 07/13 08:46
22F:→ Schottky: kernel 凭着 dev_C 的位址就可以存取到同一块记忆体 07/13 08:48
好的 这部分我了解了 感谢你 ※ 编辑: v00623 (140.118.155.204), 07/13/2017 10:16:46
23F:推 jun0325: 加个cudaThreadSynchronize();确保GPU和CPU之间的 07/16 14:04
24F:→ jun0325: data consistency。你变成data size变成200,有可能是GPU 07/16 14:05
25F:→ jun0325: 算太久,你又没保证data consistency,所以CPU读到不正确 07/16 14:06
26F:→ jun0325: 的资料 07/16 14:06







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP