随笔分类 - cuda编程
摘要:使用了共享内存和向量化传输,目前为止效果最好的一个实现 __global__ void transposeSmemVec(float* input, float* output, const int X, const int Y){ __shared__ float smem[32 * 4 * 32
阅读全文
摘要:首先在cpu上进行计算 #include <iostream> #include <chrono> #define DATA_LEN (100 * 1024 * 1024) inline int rnd(float x) { return static_cast<int>(x * rand() /
阅读全文
摘要:常量内存是在变量前面加上 __constant__,常量内存用于保存核函数执行期间不会发生变化的数据,NVIDIA向硬件提供了 64KB 的常量内存,在通常情况下,使用常量内存代替全局内存能有效的缩减内存带宽 常量内存的赋值使用 cudaMemcpyToSymbol() 函数 示例代码中我创建了一个
阅读全文
摘要:cuda程序在教程中多是用nvcc来进行编译,但是实际项目中cuda程序往往是和c++混在一起的,所以用cmake编译会更方便 cmake目前可以较好的支持cuda编译,本文只列出其中一种方法,仅供参考 CMakeLists.txt cmake_minimum_required(VERSION 3.
阅读全文
摘要:cuda大部分库函数的返回值都是cudaError_t,所以可以用一个函数来接收其他库函数的返回值,从而判断该库函数是否正常执行 这个函数可以用宏来实现 #define CHECK(call) \ do \ { \ const cudaError_t error_code = call; \ if
阅读全文
摘要:int gpu_count = -1; cudaGetDeviceCount(&gpu_count); std::cout << "gpu count: " << gpu_count << std::endl; 多显卡环境中设置显卡 cudaSetDevice(0) 多显卡环境下当cuda运算结束后
阅读全文
摘要:类似于这个例子 #include <iostream> using namespace std; void sw(int a,int b) { int tmp=a; a=b; b=tmp; } void sw1(int* a,int* b) { int tmp; tmp=*a; *a=*b; *b=
阅读全文
摘要:原文链接 https://developer.nvidia.com/blog/how-overlap-data-transfers-cuda-cc/ 在我们上一篇 CUDA C/C++ 文章中,我们讨论了如何在主机和设备之间有效地传输数据。在这篇文章中我们将讨论数据传输与host端计算和device
阅读全文
摘要:原文地址(host端就是cpu,device端就是gpu) https://developer.nvidia.com/blog/how-optimize-data-transfers-cuda-cc/ 在本系列的前三篇文章中,我们为该系列的主旨打下基础:如何优化cuda c代码。在这一篇和下一篇文章
阅读全文
摘要:原文地址 https://developer.nvidia.com/blog/how-query-device-properties-and-handle-errors-cuda-cc/ 在cuda c/c++系列的第三篇博文中,我们讨论了各种支持cuda的gpu的各种特性,如何从cuda c/c+
阅读全文
摘要:原文链接 https://developer.nvidia.com/blog/how-implement-performance-metrics-cuda-cc/ 在上一篇文章中,我们通过cuda c实现SAXPY来了解了cuda c的一些基本知识。在这篇文章中我们将讨论如何分析此代码和其他cuda
阅读全文
摘要:原文地址,纯翻译 https://developer.nvidia.com/blog/easy-introduction-cuda-c-and-c/ 这是cuda并行计算平台 c和c++接口系列的第一篇文章。学习前要求熟练掌握c,针对cuda fortran编程的帖子也会同步更新。这两个系列将涵盖c
阅读全文