最新帖子

页: [1] 2 3 ... 10
1
好的,谢谢,我在斟酌斟酌,
2
感谢回复,经过检查,发现之前统一申请内存,待所有计算完成后统一释放,改为计算完毕后,立即释放变量,这样莫名其妙就OK了,因为是新手,还是不明就里

这个和每次计算完成立刻释放内存, 和所有计算完成后统一释放无关.

需要指出的是, 频繁的每次立刻申请释放是典型的不良行为(因为cudaMalloc*()/Free()的代价高昂).

你的问题可能依然在其他地方, 只是你这样做被掩盖了.
3
感谢回复,经过检查,发现之前统一申请内存,待所有计算完成后统一释放,改为计算完毕后,立即释放变量,这样莫名其妙就OK了,因为是新手,还是不明就里
4
CUDA / Re: 未参与投票的线程使用__ballot_sync()返回值的后果
« 最后发表 作者 屠戮人神 四月 12, 2021, 05:12:46 pm »
源代码:
#include<stdio.h>
__global__ void k1(){
    int x=threadIdx.x%2;
    unsigned a =__ballot_sync(0x0000ffff,x);
    printf("id:%d a:%x\n",threadIdx.x,a);
}
int main(){
    k1<<<1,32>>>();
    printf("%s\n",cudaGetErrorString(cudaDeviceSynchronize()));
    return 0;
}

运行结果:
cuda-memcheck ./wallVoteFunction
========= CUDA-MEMCHECK
id:0 a:aaaa
id:1 a:aaaa
id:2 a:aaaa
id:3 a:aaaa
id:4 a:aaaa
id:5 a:aaaa
id:6 a:aaaa
id:7 a:aaaa
id:8 a:aaaa
id:9 a:aaaa
id:10 a:aaaa
id:11 a:aaaa
id:12 a:aaaa
id:13 a:aaaa
id:14 a:aaaa
id:15 a:aaaa
id:16 a:aaaa
id:17 a:aaaa
id:18 a:aaaa
id:19 a:aaaa
id:20 a:aaaa
id:21 a:aaaa
id:22 a:aaaa
id:23 a:aaaa
id:24 a:aaaa
id:25 a:aaaa
id:26 a:aaaa
id:27 a:aaaa
id:28 a:aaaa
id:29 a:aaaa
id:30 a:aaaa
id:31 a:aaaa
no error
========= ERROR SUMMARY: 0 errors

未参与投票的线程使用__ballot_sync()返回值会有什么问题吗?

你好, 不在mask中的线程, 请:
(1)不要参与ballot.
(2)不要使用ballot的结果.
(例如, 被某种条件给分支掉或者predicated off的线程)

否则可能会产生未定义的结果(例如你这个代码). 该未定义行为可能在部分条件下, 和部分计算能力的卡上, 产生某种特定的看似"有意义"的结果, 但这种结果很可能在, 以后别的条件下, 或者别的计算能力的卡上, 变得无意义.
5
如题,求教如下:
 
    float* d_x;
    float* d_y;
    float* d_px;
    float* d_py;
    float* d_input;
    float* d_output;

    Kernel << <BlocksPerGrid, ThreadsPerBlock>> > (d_x, d_y,d_px, d_py,d_input, d_output);

该核函数中的前四个数据传递到核函数中,其数值都发生了改变,而第五个参数d_input很正确的传递了进去,请问这是什么原因,有朋友遇到过吗?

楼主你好, 根据你的代码, 你的这5个参数, 均是指针. 只有对指针的进一步提领(de-reference), 才能得到具体的float数值. 所以你的描述, 前4个参数本身"接近于0.0", 这种描述是无意义的.

可能的原因是, 你对这些指针的使用有误(例如错误的偏移量或者地址值变换), 从而访问到错误的数据.

请重新检查情况, 如果有必要, 重新描述问题.
6
如题,求教如下:
 
    float* d_x;
    float* d_y;
    float* d_px;
    float* d_py;
    float* d_input;
    float* d_output;

    Kernel << <BlocksPerGrid, ThreadsPerBlock>> > (d_x, d_y,d_px, d_py,d_input, d_output);

该核函数中的前四个数据传递到核函数中,其数值都发生了改变,而第五个参数d_input很正确的传递了进去,请问这是什么原因,有朋友遇到过吗?

7
CUDA / 未参与投票的线程使用__ballot_sync()返回值的后果
« 最后发表 作者 Dragon_ 四月 08, 2021, 08:23:25 pm »
源代码:
#include<stdio.h>
__global__ void k1(){
    int x=threadIdx.x%2;
    unsigned a =__ballot_sync(0x0000ffff,x);
    printf("id:%d a:%x\n",threadIdx.x,a);
}
int main(){
    k1<<<1,32>>>();
    printf("%s\n",cudaGetErrorString(cudaDeviceSynchronize()));
    return 0;
}

运行结果:
cuda-memcheck ./wallVoteFunction
========= CUDA-MEMCHECK
id:0 a:aaaa
id:1 a:aaaa
id:2 a:aaaa
id:3 a:aaaa
id:4 a:aaaa
id:5 a:aaaa
id:6 a:aaaa
id:7 a:aaaa
id:8 a:aaaa
id:9 a:aaaa
id:10 a:aaaa
id:11 a:aaaa
id:12 a:aaaa
id:13 a:aaaa
id:14 a:aaaa
id:15 a:aaaa
id:16 a:aaaa
id:17 a:aaaa
id:18 a:aaaa
id:19 a:aaaa
id:20 a:aaaa
id:21 a:aaaa
id:22 a:aaaa
id:23 a:aaaa
id:24 a:aaaa
id:25 a:aaaa
id:26 a:aaaa
id:27 a:aaaa
id:28 a:aaaa
id:29 a:aaaa
id:30 a:aaaa
id:31 a:aaaa
no error
========= ERROR SUMMARY: 0 errors

未参与投票的线程使用__ballot_sync()返回值会有什么问题吗?
8
OpenCL / 关于image2d和buffer相互转换的问题
« 最后发表 作者 zzyyhsy 三月 28, 2021, 01:05:50 am »
大家好,最近本人在做一些高通GPU的开发,一开始采用的是buffer的全局内存进行kernel的处理,得知高通GPU上采用image2d将会有更好的性能打算尝试,因此好奇,这两种数据结构有没有0开销互相转换的方式?我注意到有一个拓展:cl_khr_image2d_from_buffer,先不考虑我的设备是否支持此拓展,假设支持此拓展,我应该如何编写程序来转换image2d和buffer?主机端和kernel部分分别应该如何操作呢?我知道主机端可以通过分别调用clCreateBuffer和clCreateImage两种方式分别创建不同的对象来互相拷贝转换,但是这显然会有额外开销。
9
Deestream开发 / 是否可以使用deepstream将视频解码,并且将关键帧保存为图片
« 最后发表 作者 float风 三月 16, 2021, 03:59:53 pm »
咨询一个问题,我需要将rtsp来源的视频,采用gpu来解码,并且将关键帧保存为图片,deepstream是否能做到呢? 大概需要如何操作。目前不需要添加推理步骤,只想实现解码功能。
10
CUDA / Re: GPU程序一次循环后怎么清空显存?
« 最后发表 作者 屠戮人神 三月 15, 2021, 04:22:58 pm »
我的程序在main这有一个大循环,循环5次后提示内存不足,用nvidia-smi查看时发现每次循环的过程中显存都在累加,我想在每次循环后清空显存,有什么办法嘛?

根据你的上下文, 你需要用完资源后释放.

请搜索cudaFree()字样以学习如何释放不再需要的显存.
页: [1] 2 3 ... 10