学到了cudaMemcpyToSymbol竟然还有将数据从host拷贝到global的功能,以前只用过这个函数拷贝到constant memory。拷贝方式的不同是由目的内存申请的方式决定的。

申请的是device内存,cudaMemcpyToSymbol拷贝就是从host拷贝到global memory。

申请的是constant内存,cudaMemcpyToSymbol拷贝就是从host拷贝到constant memory。

__device__ float g_damp_x[MAX_DIM];
__constant__ float c_damp_y[MAX_DIM];

main.cu

#include "error.cuh"
#include <stdio.h>
__device__ int d_x = 1;
__device__ int d_y[2];void __global__ my_kernel(void)
{d_y[0] += d_x;d_y[1] += d_x;printf("d_x = %d, d_y[0] = %d, d_y[1] = %d.\n", d_x, d_y[0], d_y[1]);
}int main(void)
{int h_y[2] = {10, 20};CHECK(cudaMemcpyToSymbol(d_y, h_y, sizeof(int) * 2));my_kernel<<<1, 1>>>();CHECK(cudaDeviceSynchronize());CHECK(cudaMemcpyFromSymbol(h_y, d_y, sizeof(int) * 2));printf("h_y[0] = %d, h_y[1] = %d.\n", h_y[0], h_y[1]);return 0;
}
#pragma once
#include <stdio.h>#define CHECK(call)                                   \
do                                                    \
{                                                     \const cudaError_t error_code = call;              \if (error_code != cudaSuccess)                    \{                                                 \printf("CUDA Error:\n");                      \printf("    File:       %s\n", __FILE__);     \printf("    Line:       %d\n", __LINE__);     \printf("    Error code: %d\n", error_code);   \printf("    Error text: %s\n",                \cudaGetErrorString(error_code));          \exit(1);                                      \}                                                 \
} while (0)

参考:

https://blog.csdn.net/u014800094/article/details/53994933?utm_source=blogxgwz5

cudaMemcpyToSymbol使用相关推荐

  1. CUDA运行时 Runtime(一)

    CUDA运行时 Runtime(一) 一. 概述 运行时在cudart库中实现,该库通过静态方式链接到应用程序库cudart.lib和 libcudart.a,或动态通过cudart.dll或者lib ...

  2. CUDA+OpenCV实现光线追踪(有无constant)

    常量内存是NVIDIA提供的一个64KB大小的内存空间,它的处理方式和普通的全局内存和共享内存都不一样,是有cuda专门提供的. 线程束的概念:线程束是指一个包含32个线程的集合,在程序中的每一行,线 ...

  3. CUDA Samples: Ray Tracking

    以下CUDA sample是分别用C++和CUDA实现的生成光线跟踪图像,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第六章,CUDA各实现 ...

  4. 《GPU高性能编程CUDA实战》中代码整理

    CUDA架构专门为GPU计算设计了一种全新的模块,目的是减轻早期GPU计算中存在的一些限制,而正是这些限制使得之前的GPU在通用计算中没有得到广泛的应用. 使用CUDA C来编写代码的前提条件包括:( ...

  5. GPU硬件结构和程序具体参数设置

    目录 1.CUDA程序Thread的基本结构 3.单指令多线程架构(SIMT, Single Instruction Multi Thread) 4.硬件多线程(Hardward Multithrea ...

  6. CUDA学习日志:常量内存和纹理内存

    标签: cuda常量内存纹理内存LinJM 2014-11-29 21:53 2143人阅读 评论(0) 收藏 举报 分类: 图像处理与分析(24) 版权声明:本文为博主原创文章,未经博主允许不得转载 ...

  7. CUDA内存类型memory

    CUDA内存类型memory 2013-09-30 10:34 4224人阅读 评论(1) 收藏 举报 分类: CUDA(106) http://www.cnblogs.com/traceorigin ...

  8. CUDA编程指南阅读笔记

    随着多核CPU和众核GPU的到来,并行编程已经得到了业界越来越多的重视,CPU-GPU异构程序能够极大提高现有计算机系统的运算性能,对于科学计算等运算密集型程序有着非常重要的意义.这一系列文章是根据& ...

  9. CUDA学习(六十三)

    内存声明: 设备和常量内存: 使用__device__或__constant__内存空间说明符在文件范围内声明的内存在使用设备运行时时具有相同的行为. 所有内核都可以读取或写入设备变量,无论内核是由主 ...

最新文章

  1. 查缺补漏 | Python自定义函数
  2. poj2594(最小可相交覆盖路径问题)
  3. 腾讯最大股东收购了 Stack Overflow,以后“抄代码”都要付费了么?
  4. 我犯的错误--关于主键
  5. Android开发面试题Service之startService和bindService之间的区别
  6. ES6-11 Symbol、iterator、forOf、typeArray
  7. 云+X案例展 | 传播类:九州云 SD-WAN 携手上海电信,助力政企客户网络重构 换新颜
  8. umask:默认权限分配的命令
  9. git 远程删除分支之后 本地分支更新后还在
  10. Linux直接复制eclipse也可以使用
  11. JAVA实现UDP通信
  12. Otsu最大类间方差法
  13. java swfupload 302_SWFUpload 302
  14. 虚拟服务器需要备案吗,虚拟主机需要备案吗
  15. Spring核心功能之控制反转(IOC)
  16. cmake:cmake_policy命令
  17. 无法重命名,文件不可信,后台被自动关闭,“Notebook Untitled.ipynb is not trusted jupyter”
  18. WEBLOGIC服务器管理
  19. 揭秘手机游戏厂商怎么赚钱的。
  20. 内网渗透:八、CVE-2020-1472 NetLogon 域内提权漏洞(域控密码置空)

热门文章

  1. 语义网络分析图怎么做_怎么去分辨化工壶,光说可能大家还是会有疑惑,所以做了几个图...
  2. shell 停止tomcat_Linux停止tomcat运行
  3. python做一个窗口样式_python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法...
  4. java 同步锁_死磕 java同步系列之自己动手写一个锁Lock
  5. cad钣金展开插件_户外垃圾桶顶盖钣金拆分展开方法
  6. centos7开启vnc服务_阿里云CentOS 7搭建VNC远程桌面服务步骤方法
  7. vs xaml 语句完成 自动列出成员_数据传输 | mysqldiff/mysqldbcompare 实现 DTLE 自动化测试...
  8. 原来C语言和其他高级语言的最大的区别是这个...
  9. 【LeetCode笔记】148. 排序链表(Java、归并排序、快慢指针、双重递归)
  10. 武未转变服务器tp,未转变者怎么tp别人 | 手游网游页游攻略大全