Tag: gpu

无法使用cuda进入__global__函数

我在Nsight上编写了一个编译并可以执行的代码但是第一次启动无法完成。 奇怪的是,当我在调试模式下运行时,它运行得很好,但速度太慢了。 在进入访问GPU的函数之前,这是代码的一部分(我认为有一个我无法找到的错误): void parallelAction (int * dataReturned, char * data, unsigned char * descBase, int range, int cardBase, int streamIdx) { size_t inputBytes = range*128*sizeof(unsigned char); size_t baseBytes = cardBase*128*sizeof(unsigned char); size_t outputBytes = range*sizeof(int); unsigned char * data_d; unsigned char * descBase_d; int * cardBase_d; int * dataReturned_d; cudaMalloc((void **) &data_d, inputBytes); cudaMalloc((void […]

cuda中的count3是非常慢的

我在CUDA中编写了一个小程序,它计算C数组中有多少3个并打印出来。 #include #include #include #include __global__ void incrementArrayOnDevice(int *a, int N, int *count) { int id = blockIdx.x * blockDim.x + threadIdx.x; //__shared__ int s_a[512]; // one for each thread //s_a[threadIdx.x] = a[id]; if( id < N ) { //if( s_a[threadIdx.x] == 3 ) if( a[id] == 3 ) { atomicAdd(count, 1); } } } […]

编译时需要CUDA硬件吗?

是否需要安装支持CUDA的图形卡(在Linux中)用于使用nvcc编译CUDA程序? 或者可以在任何地方编译程序并仅在此类系统上运行?

CUDA矩阵乘法中断了大型矩阵

我有以下矩阵乘法代码,使用CUDA 3.2和VS 2008实现。我在Windows server 2008 r2 enterprise上运行。 我正在运行Nvidia GTX 480.以下代码适用于“宽度”(矩阵宽度)的值高达约2500左右。 int size = Width*Width*sizeof(float); float* Md, *Nd, *Pd; cudaError_t err = cudaSuccess; //Allocate Device Memory for M, N and P err = cudaMalloc((void**)&Md, size); err = cudaMalloc((void**)&Nd, size); err = cudaMalloc((void**)&Pd, size); //Copy Matrix from Host Memory to Device Memory err = cudaMemcpy(Md, M, size, […]

CUDA的__shared__内存何时有用?

有人可以帮我一个关于如何使用共享内存的一个非常简单的例子吗? Cuda C编程指南中包含的示例似乎与无关的细节混杂在一起。 例如,如果我将一个大型数组复制到设备全局内存并想要对每个元素求平方,那么如何使用共享内存来加速这个? 或者在这种情况下没用?

如何直接访问显卡的输出?

显卡通常会将输出写入我可以访问的内存中的某个位置吗? 我必须使用驱动程序吗? 如果是这样,我可以使用OpenGL吗? 我想知道是否有可能“捕获”Linux上可直接访问GPU的VM的输出,并且正在运行Windows。 理想情况下,我可以直接访问内存中的输出,而无需触及GPU,因为此代码可以在Linux主机上运行。 另一个选择是编写一个Windows驱动程序,它读取GPU的输出并将其写入内存中的某个位置。 然后,在Linux端,程序可以读取此内存。 这似乎有点不可能,因为我不确定如何让主机上的进程与guest虚拟机上的进程共享内存。 是否可以执行选项1并简单地从内存中读取输出?

2d char数组到CUDA内核

我需要帮助将char [] []传递给Cuda内核。 这是我的代码: __global__ void kernel(char** BiExponent){ for(int i=0; i<500; i++) printf("%c",BiExponent[1][i]); // I want print line 1 } int main(){ char (*Bi2dChar)[500] = new char [5000][500]; char **dev_Bi2dChar; …//HERE I INPUT DATA TO Bi2dChar size_t host_orig_pitch = 500 * sizeof(char); size_t pitch; cudaMallocPitch((void**)&dev_Bi2dChar, &pitch, 500 * sizeof(char), 5000); cudaMemcpy2D(dev_Bi2dChar, pitch, Bi2dChar, host_orig_pitch, 500 […]

如何在CUDA / cublas中转置矩阵?

假设我在GPU上有一个尺寸为A*B的矩阵,其中B (列数)是假设C样式的前导维度。 在CUDA(或Cublas)中是否有任何方法将此矩阵转换为FORTRAN样式,其中A (行数)成为主要维度? 如果它可以在host->device传输期间进行转置,同时保持原始数据不变,那就更好了。