常数存储器实例

#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<stdio.h>
__constant__ char p_HelloCUDA[11];
__constant__ int t_HelloCUDA[11]={0,1,2,3,4,5,6,7,89,10};
__constant__ int num=11;

__global__ static void HelloCUDA(char* result){
    int i=0;
    for(i=0;i<num;i++)
        result[i]=p_HelloCUDA[i]+t_HelloCUDA[i];
}

int main(int argc,char* argv[]){
    char helloCUDA[]="Hdjik CUDA!";
    char *device_result=0;
    char host_result[12]={0};
    cudaMalloc((void**)&device_result,sizeof(char)*11);
    cudaMemcpyToSymbol(p_HelloCUDA,helloCUDA,sizeof(char)*11);
    HelloCUDA<<<1,1,0>>>(device_result);
    cudaMemcpy(&host_result,device_result,sizeof(char)*11,cudaMemcpyDeviceToHost);
    printf("%s\n",host_result);
    cudaFree(device_result);
    return 0;
}

  

常数存储器的两种定义方法:

一、直接在定义时直接初始化常数存储器,然后再kkernel里面直接使用就可以了

_ _constant_ _int t_HelloCUDA[11]={0.1.2.3.4.5.6.7.8.9.10}

_ _constant_ _int num=11;

二、定义一个constant数组,然后使用函数进行赋值

_ _constant_ _char P_HelloCUDA[11];

cudaMemcpyToSymbol(p)HelloCUDA,helloCUDA,sizeof(char)*11);

时间: 2024-08-02 15:12:58

常数存储器实例的相关文章

CUDA开发存储器运用(包括存储器之间的转存)

主机端内存(host memory) 主机端叶锁定内存(pinned memory) 显存 寄存器(register) 局部存储器(local memory) 共享存储器(shared memory) 全局存储器(global memory) 常数存储器(constant memory) 纹理存储器(texture memory)

CUDA和OpenCL异同点比较

CUDA和OpenCL异同点比较 一.概述 对CUDA和opencl有一定的编程经验,但是细心的人可以发现,OPENCL就是仿照CUDA来做的.既然两个GPU的编程框架如此相像,那么他们究竟有什么不同呢?下面就一一道来. 二.数据并行的模型 OpenCL采用的数据并行模型就是采用CUDA的数据并行模型.下面的表格反应了CUDA和opencl并行模型之间的映射关系. OpenCL CUDA Kernel函数 Kernel函数 主机程序 主机程序 N-DRange 网格 工作项 线程 工作组 线程块

【转】CUDA程序优化要点

CUDA程序优化应该考虑的点:精度:只在关键步骤使用双精度,其他部分仍然使用单精度浮点以获得指令吞吐量和精度的平衡: 目前 GPU 的单精度性能要远远超过双精度性能,整数乘法.求模.求余等运算的指令吞吐量也较为有限.在科学计算中,由于需要处理的数据量巨大,往往采用双精度或者四精度才能获得可靠的结果,目前的 Tesla 架构还不能很好的满足高精度计算的需要.如果你的计算需要很高的精度,或者需要进行很多轮的迭代,最好考虑在关键的步骤中使用双精度,而在其他部分仍然使用单精度浮点以获得指令吞吐量和精度的

并行程序设计---cuda memory

CUDA存储器模型: GPU片内:register,shared memory: host 内存: host memory, pinned memory. 板载显存:local memory,constant memory, texture memory, texture memory,global memory; register: 訪问延迟极低: 基本单元:register file (32bit/each) 计算能力1.0/1.1版本号硬件:8192/SM. 计算能力1.2/1.3版本号硬

Java NIO之缓冲

一.前言 在笔者打算学习Netty框架时,发现很有必要先学习NIO,因此便有了本博文,首先介绍的是NIO中的缓冲. 二.缓冲 2.1 层次结构图 除了布尔类型外,其他基本类型都有相对应的缓冲区类,其继承关系层次图如下. 其中,Buffer是所有类的父类,Buffer中也规定了所有缓冲区的共同行为. 2.2 缓冲区基础 缓冲区是包在一个对象内的基本数据元素数组,其有四个重要属性 容量( Capacity):缓冲区能够容纳的数据元素的最大数量,容量在缓冲区创建时被设定,并且永远不能被改变. 上界(L

CUDA学习和总结1

一. 基本概念 1. CUDA 2007年,NVIDIA推出CUDA(Compute Unified Device Architecture,统一计算设备架构)这个编程模型,目的是为了在应用程序中充分利用CPU和GPU各自的优点,实现CPU/GPU联合执行.这种联合执行的需要已经在最新的集中编程模型(OpenCL,OpenACC,C++ AMP)中体现出来了. 2. 并行编程语言和模型 使用比较广泛的是为可扩展的集群计算设计的消息传递接口(Message Passing Interface,MP

2.2CUDA-Memory(存储)

在CUDA基本概念介绍有简单介绍CUDA memory.这里详细介绍: 每一个线程拥有自己的私有存储器,每一个线程块拥有一块共享存储器(Shared memory):最后,grid中所有的线程都可以访问同一块全局存储器(global memory).除此之外,还有两种可以被所有线程访问的只读存储器:常数存储器(constant memory)和纹理存储器(Texture memory),它们分别为不同的应用进行了优化.全局存储器.常数存储器和纹理存储器中的值在一个内核函数执行完成后将被继续保持,

CUDA内存拷贝

原文链接1.cudaMemcpy()<--> cudaMalloc()  //线性内存拷贝 1 //线性内存拷贝 2 cudaMalloc((void**)&dev_A, data_size); 3 cudaMemcpy(dev_A, host_A, data_size, cudaMemcpyHostToDevice); 2.cudaMemcpy2D()<-->cudaMallocPitch() //线性内存拷贝 cudaError_t cudaMemcpy2D( void

CUDA memory

原文链接 CUDA存储器类型: 每个线程拥有自己的register and loacal memory; 每个线程块拥有一块shared memory; 所有线程都可以访问global memory; 还有,可以被所有线程访问的只读存储器:constant memory and texture memory 1.  寄存器Register 寄存器是GPU上的高速缓存器,其基本单元是寄存器文件,每个寄存器文件大小为32bit. Kernel中的局部(简单类型)变量第一选择是被分配到Register