小编lin*_*ina的帖子

分配共享内存

我试图通过使用常量参数但获得错误来分配共享内存.我的内核看起来像这样:

__global__ void Kernel(const int count)
{
    __shared__ int a[count];
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误说

错误:表达式必须具有常量值

伯爵是常量!为什么我收到此错误?我怎么能绕过这个?

c c++ cuda gpu-shared-memory

36
推荐指数
4
解决办法
4万
查看次数

我是否应该使用'if'语句统一两个类似的内核,从而有降低性能的风险?

我有2个非常相似的内核函数,在某种意义上代码几乎相同,但略有不同.目前我有2个选择:

  • 写出2种不同的方法(但非常相似)
  • 编写单个内核并在if/else语句中放置不同的代码块

if语句对我的算法性能有多大影响?
我知道没有分支,因为所有块中的所有线程都将输入if或else.
如果内核函数被多次调用,那么单个if语句会降低我的性能吗?

c c++ optimization cuda gpgpu

34
推荐指数
1
解决办法
9293
查看次数

如何释放c 2d阵列

我有以下代码:

int **ptr = (int **)malloc(sizeof(int*)*N); 
for(int i=0;i<N;i++) 
     ptr[i]=(int*)malloc(sizeof(int)*N));
Run Code Online (Sandbox Code Playgroud)

我怎样才能免费使用ptr free?我应该循环ptr和free ptr [i]吗?或者只是做

free(ptr) 
Run Code Online (Sandbox Code Playgroud)

和ptr将被释放?

c memory-management

19
推荐指数
4
解决办法
5万
查看次数

并发写入相同的全局内存位置

我有几个块,每个块都有一个大小为512的共享内存数组中的整数.如何检查每个块中的数组是否包含零作为元素?

我正在做的是创建一个驻留在全局内存中的数组.此数组的大小取决于块的数量,并初始化为0.因此,a[blockid] = 1如果共享内存数组包含零,则每个块都会写入.

我的问题是当我在一个块中同时写几个线程时.也就是说,如果共享内存中的数组包含多个零,则会写入多个线程a[blockid] = 1.这会产生任何问题吗?

换句话说,如果2个线程将完全相同的值写入全局内存中完全相同的数组元素,那会不会有问题?

c c++ cuda

16
推荐指数
2
解决办法
6876
查看次数

每个块的最大线程数

我有以下信息:

Maximum number of threads per block:           512
Maximum sizes of each dimension of a block:    512 x 512 x 64
Run Code Online (Sandbox Code Playgroud)

这是否意味着2d线程块中的最大线程数是512x512,这给了我每个块中262144个线程?
如果是,那么在一个至少256个块的内核中拥有这么多线程是一个好习惯吗?

cuda gpu

9
推荐指数
1
解决办法
1万
查看次数

CUDA:在数组中获取最大值及其索引

我有几个块,每个块在整数数组的单独部分上执行.例如:阻塞一个从数组[0]到数组[9],阻塞二从数组[10]到数组[20].

我可以获得每个块的数组最大值索引的最佳方法是什么?

示例块a a [0]到[10]具有以下值:
5 10 2 3 4 34 56 3 9 10

所以56是指数6的最大值.

我无法使用共享内存,因为数组的大小可能非常大.因此它不适合.是否有任何图书馆允许我这么快?

我知道减少算法,但我认为我的情况不同,因为我想得到最大元素的索引.

cuda

5
推荐指数
1
解决办法
3864
查看次数

使用nsight进行调试

我正在使用NSight来调试我的CUDA代码,我有一个疑问:如何为特定的线程和块设置断点?

当我在内核上放置一个断点时,调试器总是在块0的线程0处停止.

c c++ cuda nsight

2
推荐指数
1
解决办法
1479
查看次数

VS中的malloc异常

我正在尝试使用c为2维数组分配内存,我在visual studio 2008中得到一个例外.

int Count=16383,N=14;
char **result=(char**)malloc(sizeof(char)*Count);
for(int i=1;i<=Count;i++)       
    result[i] = (char*)malloc(sizeof(char)*N);  

Unhandled exception at 0x012e1692 in combination.exe: 0xC0000005: 
Access violation writing location 0x00590000
Run Code Online (Sandbox Code Playgroud)

当我是11272并且我无法理解为什么时会发生异常!

c c++

1
推荐指数
1
解决办法
1571
查看次数