标签: nvidia

CUDA基本矩阵加法 - 大矩阵

我正在尝试添加两个4800x9600矩阵,但遇到了困难......

这是一个简单的C = A + B操作......

这是内核:

__global__ void matAdd_kernel(float* result,float* A,float* B,int size)
{
        int x=blockIdx.x*blockDim.x+threadIdx.x;
        int y=blockIdx.y*blockDim.y+threadIdx.y;
        int idx=x*y+x;

        if(idx<size)
        {
                result[idx]=A[idx]+B[idx];
        }
}
Run Code Online (Sandbox Code Playgroud)

这是代码:

void matAdd(Matrix C,Matrix A,Matrix B)
{
        int N=A.w*A.h;
        dim3 dimBlock=dim3(22,22);
        int yBlocks=A.w/dimBlock.y+((A.w%dimBlock.y)==0?0:1);   //yBlocks is 219 for dimBlock(22,22) and 9600x4800
        int xBlocks=A.h/dimBlock.x+((A.h%dimBlock.x)==0?0:1);   //xBlocks is 437 for dimBlock(22,22) and 9600x4800
        dim3 dimGrid=dim3(xBlocks,yBlocks);
        matAdd_kernel<<<dimGrid,dimBlock>>>(C.data,A.data,B.data,N);
        cutilCheckMsg("kernel launch failure");
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Matrix如下:

typedef struct{
        int w;
        int h;
        float* data;
}Matrix;
Run Code Online (Sandbox Code Playgroud)

这是我打印前10行和后10行时的输出:

top-10 rows A:
-0.023930 0.047744 -0.074694 0.053555 …
Run Code Online (Sandbox Code Playgroud)

c cuda nvidia matrix addition

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

NVidia CUDA:Tesla T10处理器与Tesla M2090处理器的区别

我有一个执行有限差分计算的CUDA代码.该代码在Tesla M2090处理器上运行良好,没有错误.相同的代码会导致Tesla T10处理器出现大量错误.我的结果中得到了很多零.

有谁知道这两种架构之间的区别以及如何解决问题的解决方案

cuda nvidia tesla

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

将2D阵列复制到已知可变宽度的GPU

我正在研究如何将每行的可变宽度的2D数组复制到GPU中.

int rows = 1000;
int cols;
int** host_matrix = malloc(sizeof(*int)*rows);
int *d_array;
int *length;

...
Run Code Online (Sandbox Code Playgroud)

每个人host_matrix[i]可能都有不同的长度,我知道length[i],问题就出在那里.我想避免复制虚拟数据.有没有更好的方法呢?

根据这个帖子,这不是一个聪明的方法:

cudaMalloc(d_array, rows*sizeof(int*));  
for(int i = 0 ; i < rows ; i++)    {  
    cudaMalloc((void **)&d_array[i], length[i] * sizeof(int)); 
}  
Run Code Online (Sandbox Code Playgroud)

但我想不出任何其他方法.有没有其他更聪明的方法呢?可以使用cudaMallocPitch和cudaMemCpy2D进行改进吗?

cuda gpu gpgpu nvidia

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

部署linux CUDA应用程序

我使用NVIDIA CUDA 5工具包在我的笔记本电脑上编译了一个cu程序.一个非常基本的接口,仅使用终端输出.然后我继续测试它在我的台式PC上运行的方式(两者都安装了Ubuntu 12.04 LTS).

在桌面PC上我收到此错误消息:

加载共享库时出错:libcudart.so.5.0:无法打开共享对象文件:没有这样的文件或目录

好的,我明白了,有些lib没有安装.但是我真的需要在每台我想要编译代码的PC上安装CUDA工具包吗?

deployment cuda nvidia

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

L1缓存的CUDA银行冲突?

在NVIDIA的2.x架构中,每个warp都有64kb的内存,默认情况下分为48kb的共享内存和16kb的L1缓存(服务globalconstant内存).

我们都知道访问共享内存的银行冲突 - 内存分为32个大小为32位的存储区,允许所有32个线程同时独立访问.另一方面,全局内存虽然慢得多,但不会遇到银行冲突,因为内存请求在整个warp中合并.

问题: 假设来自全局或常量内存的一些数据缓存在L1缓存中以用于给定的warp.访问此数据是否存在银行冲突,例如共享内存(因为L1缓存和共享内存实际上是相同的硬件),还是以全局/常量内存的方式无冲突?

cuda gpu nvidia opencl bank-conflict

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

__CUDA_ARCH__宏的行为

在主机代码中,__CUDA_ARCH__宏似乎不会生成不同的代码路径,相反,它将生成代码以确保当前设备的代码路径.

但是,如果__CUDA_ARCH__在设备代码中,它将为编译选项(/ arch)中指定的不同设备生成不同的代码路径.

谁能证实这是正确的?

cuda gpu nvidia

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

CUDA流销毁和CudaDeviceReset

我使用CUDA流实现了以下类

class CudaStreams
{
    private:
        int             nStreams_;
        cudaStream_t*   streams_;
        cudaStream_t    active_stream_;

    public:

        // default constructor
        CudaStreams() { }

        // streams initialization
        void InitStreams(const int nStreams = 1) {
            nStreams_ = nStreams;
            // allocate and initialize an array of stream handles
            streams_ = (cudaStream_t*) malloc(nStreams_*sizeof(cudaStream_t));
            for(int i = 0; i < nStreams_; i++) CudaSafeCall(cudaStreamCreate(&(streams_[i]))); 

            active_stream_ = streams_[0];}

        // default destructor
        ~CudaStreams() {     
            for(int i = 0; i<nStreams_; i++) CudaSafeCall(cudaStreamDestroy(streams_[i])); }

}; 
Run Code Online (Sandbox Code Playgroud)

如果我现在运行这个简单的代码

void main( int argc, char** argv) 
{
    streams.InitStreams(1);
    streams.~CudaStreams(); …
Run Code Online (Sandbox Code Playgroud)

c++ cuda gpgpu class nvidia

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

是否可以通过新CUDA6中的简单指针从CPU-Cores访问GPU-RAM?

现在,如果我使用此代码尝试在GeForce GTX460SE(CC2.1)中使用CUDA5.5从CPU-Cores访问GPU-RAM,那么我会收到异常"访问冲突":

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <iostream>

int main()
{
    unsigned char* gpu_ptr = NULL;
    cudaMalloc((void **)&gpu_ptr, 1024*1024);

    *gpu_ptr = 1;

    int q; std::cin >> q;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但我们知道,有UVA(统一虚拟寻址).还有一些新的:

是否可以通过使用新CUDA6中的简单指针从CPU-Cores访问内存GPU-RAM?

cuda gpgpu nvidia virtual-address-space

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

任何人都有成功开发NVIDIA盾牌的CUDA程序?

有没有人设法获得一个CUDA计划来处理NVidia盾牌?特别是让精彩的NVidia分析工具运行起来?

mobile cuda gpu nvidia

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

Directx是否将cUDA库用于nvidia显卡?

就像标题所说的那样,directx是否会以任何方式使用引擎盖下的nvidia卡的CUDA库/扩展?

基本上,引导下的directx库实际上是通过CUDA库调用CUDA内核吗?

directx cuda nvidia libraries

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