Tag: cuda

如何使用远程桌面运行cuda代码?

我正在使用远程桌面连接连接到具有Nvidia卡(兼容CUDA)的桌面。 我这样做是因为我目前没有显示器! 因此,我暂时使用笔记本电脑连接到我的桌面并运行我的CUDA代码。 它接缝远程桌面无法识别Nvidia卡。 cudaGetDeviceCount()返回一个非常大的数字。 我的电脑上只有1个Nvidia 460。 我该如何解决这个问题? 我应该使用其他远程软件吗?

如何使用cuda沿行方向对大型二维矩阵进行缩减? (每行的最大值和最大值索引)

我正在尝试沿2D矩阵的行方向实现缩减。 我从stackoverflow上找到的代码开始(非常感谢Robert!) thrust :: max_element比较cublasIsamax慢 – 更有效的实现? 上面的链接显示了一个在单行上执行缩减的自定义内核。 它将输入行分为多行,每行有1024个线程。 效果很好。 对于2D情况,除了现在有一个网格尺寸之外,一切都是一样的。 所以每个块的y维度仍然是1.问题是当我尝试将数据写入每个块内的共享内存(在代码中的“max_idx_kernel_reduction_within_block”内核中)时,需要很长时间(超过(#行) *(在1行上执行减少所需的时间。我宁愿运行for循环)。我知道我有很多元素但是我期待比这更快的东西。 我不认为内存访问模式是一个问题,但我听说TOTAL共享内存量可能是限制? : CUDA:合并全局内存访问速度比共享内存快吗? 另外,分配大型共享内存arrays会减慢程序的速度吗? 任何使我的代码更快的建议(第一个内核是瓶颈)? 非常感谢,非常感谢!! #include #include #include #include #include #define NCOLS 163317 // number of columns #define NROWS 8 // number of rows #define nTPB 1024 // Threads per Block. nTPB should be a power-of-2 #define MAX_BLOCKS_X ((NCOLS/nTPB)+1) // # […]

cudaMalloc的结构和相同结构的元素

我想知道当我分配一个结构然后分配(?)并复制相同结构的指针元素时,设备上会发生什么(内存方面)。 我是否还需要元素* a的 cudaMalloc ? 示例代码: typedef struct { int *a; … } StructA; int main() { int row, col, numS = 10; // defined at runtime StructA *d_A = (StructA*)malloc(numS * sizeof(StructA)); int *h_A = d_a->a; cudaMalloc( (void**)&(d_A), numS * sizeof(StructA) ); cudaMalloc( &(d_A->a), row*col*sizeof(int) ); // no (void**) needed? cudaMemcpy( d_A->a, h_A, row*col*sizeof(int), […]

如何获得cuda设备中的核心数量?

我正在寻找一个计算我的cuda设备核心数量的function。 我知道每个微处理器都有特定的核心,我的cuda设备有2个微处理器。 我经常搜索一个属性函数来计算每个微处理器的核心数,但我不能。 我使用下面的代码,但我仍然需要核心数量? cuda 7.0 程序语言C. 视觉工作室2013 码: void printDevProp(cudaDeviceProp devProp) { printf(“%s\n”, devProp.name); printf(“Major revision number: %d\n”, devProp.major); printf(“Minor revision number: %d\n”, devProp.minor); printf(“Total global memory: %u”, devProp.totalGlobalMem); printf(” bytes\n”); printf(“Number of multiprocessors: %d\n”, devProp.multiProcessorCount); printf(“Total amount of shared memory per block: %u\n”,devProp.sharedMemPerBlock); printf(“Total registers per block: %d\n”, devProp.regsPerBlock); printf(“Warp size: %d\n”, devProp.warpSize); […]

Cuda函数指针

我试图在CUDA中做出像这样的somtehing(实际上我需要编写一些集成函数) 我尝试了这个,但它没有用 – 它只是造成的。 错误:sm_1x中不支持函数指针和函数模板参数。 float f1(float x) { return x; } __global__ void tabulate(float lower, float upper, float p_function(float), float*result){ for (lower; lower < upper; lower++) { *result = *result + p_function(lower); } } int main(){ float res; float* dev_res; cudaMalloc( (void**)&dev_res, sizeof(float) ) ; tabulate<<>>(0.0, 5.0, f1, dev_res); cudaMemcpy(&res, dev_res, sizeof(float), cudaMemcpyDeviceToHost ) […]

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

我有几个块,每个块都有一个大小为512的共享内存数组中的整数。如何检查每个块中的数组是否包含零作为元素? 我正在做的是创建一个驻留在全局内存中的数组。 此数组的大小取决于块的数量,并初始化为0.因此,如果共享内存数组包含零,则每个块写入a[blockid] = 1 。 我的问题是当我在一个块中同时写入多个线程时。 也就是说,如果共享内存中的数组包含多个零,那么多个线程将写入a[blockid] = 1 。 这会产生任何问题吗? 换句话说, 如果2个线程将完全相同的值写入全局内存中完全相同的数组元素 ,那会不会有问题?

定时CUDA操作

我需要计算一次CUDA内核执行时间。 最佳实践指南说我们可以使用事件或标准计时function,如Windows中的clock() 。 我的问题是使用这两个函数给我一个完全不同的结果。 事实上,事件给出的结果与实际的实际速度相比似乎是巨大的。 我真正需要的是通过首先在较小的数据集上运行它的简化版本来预测计算的运行时间。 不幸的是,这个基准测试的结果是完全不现实的,要么过于乐观( clock() ),要么过于悲观(事件)。

Cuda内核返回向量

我有一个单词列表,我的目标是在一个非常长的短语中匹配每个单词。 我在匹配每个单词方面没有问题,我唯一的问题是返回包含每个匹配信息的结构向量。 在代码中: typedef struct { int A, B, C; } Match; __global__ void Find(veryLongPhrase * _phrase, Words * _word_list, vector * _matches) { int a, b, c; […] //Parallel search for each word in the phrase if(match) //When an occurrence is found { _matches.push_back(new Match{ A = a, B = b, C = c […]

使用CUDA减少矩阵行

Windows 7, NVidia GeForce 425M. 我写了一个简单的CUDA代码来计算矩阵的行和。 矩阵具有单维表示(指向浮点的指针)。 代码的串行版本如下(它有2循环,如预期的那样): void serial_rowSum (float* m, float* output, int nrow, int ncol) { float sum; for (int i = 0 ; i < nrow ; i++) { sum = 0; for (int j = 0 ; j < ncol ; j++) sum += m[i*ncol+j]; output[i] = sum; } } […]

Cuda C – 链接器错误 – 未定义的引用

我很难编译一个只包含两个文件的简单cuda程序。 main.c看起来像这样: #include “my_cuda.h” int main(int argc, char** argv){ dummy_gpu(); } cuda.h看起来像这样: #ifndef MY_DUMMY #define MY_DUMMY void dummy_gpu(); #endif 并且my_cuda.cu文件像这样松散: #include #include “my_cuda.h” __global__ void dummy_gpu_kernel(){ //do something } void dummy_gpu(){ dummy_gpu_kernel<<>>(); } 但是,如果我编译我总是收到以下错误: gcc -I/usr/local/cuda/5.0.35/include/ -c main.c nvcc -c my_cuda.cu gcc -L/usr/local_rwth/sw/cuda/5.0.35/lib64 -lcuda -lcudart -o md.exe main.o my_cuda.o main.o: In function `main’: main.c:(.text+0x15): undefined […]