这是我的场景。我在 Windows 机器上编写 CUDA 应用程序。我使用 putty 在远程 Linux (Debian) 服务器上编译并运行这个应用程序(没有图形输出)。
我想问调试和分析我的应用程序的最佳方法是什么。我读到了一些有关 Nvidia 产品 Parallel Nsight 和 Parallel Nsight Monitor 的内容。这是(唯一的)方法吗?
如何让线程块中的每个线程都有自己的共享内存指针?我找到了一些此类指针声明的示例:
int __shared__ *p;
__shared__ int array[256];
p = &array[threadId];
Run Code Online (Sandbox Code Playgroud)
这是正确的还是有其他方法?
我有一个带模板参数的全局内核函数:
template<int ARG> __global__ void kernel(array[]) {
int threadID = blockDim.x*blockIdx.x + threadIdx.x;
if(...) {...}
}
Run Code Online (Sandbox Code Playgroud)
函数的行为和特殊的if语句条件在考虑模板参数时略有不同,但是主体保持不变.让我们说:
ARG == 0
if语句如下:if(expr1){body}
ARG == 1
if语句如下:if(expr2){body}
ARG == 2
if语句如下:if(expr1 && expr2){body}
我的问题是提供这种方法的最佳方式(在可读性和性能方面)是什么?
编辑:
表达式expr1
和函数expr2
调用__device__ boolean
,例如fnc1(array[threadID])
和fnc2(array[threadID])
.