CUDA Samples 之 Simulations 之 Particles源码学习(1)

   自己用C++编程做颗粒堆积,但效率很低,所以想将程序并行,所以开始接触CUDA。但是完全不知道如何搭一个并行程序框架,所以想先学习CUDA的示例程序,刚好里面有一个颗粒离散元模拟的程序。从主函数开始阅读,主函数在particles.cpp文件中。![主函数](https://img-blog.csdnimg.cn/2020120523454047.png)1.首先,**主函数根据命令行参数给颗粒数量、网格数量、迭代次数赋初值**,命令行参数检测和赋值的函数没有细看。2.下面是**初始化OpenGL**【initGL(&argc, argv)】和 初始化cuda【cudaInit(argc, argv)】,这两个函数还未细看,OpenGL暂时用不到,初始化cuda在particleSystem_cuda.cu文件中,这个文件中都是处理颗粒的GPU函数。3.下面到**函数initParticleSystem**,这个函数是初始化颗粒系统的函数,直接跳转到函数定义。参数为颗粒数量,grid尺寸,和bUseOpenGL。这里开始对psystem赋值,并进行一系列操作,psystem是ParticleSystem类的地址。下面跳转阅读ParticleSystem类的头文件particleSystem.h。**public部分,未细看。**(1)构造函数,参数是uint numParticles, uint3 gridSize, bool bUseOpenGL。(2)析构函数。(3)枚举型变量enum ParticleConfig,这个应该是指明初始颗粒排列的方式。(4)枚举型变量enum ParticleArray,这里有两个枚举值,POSITION和VELOCITY,位置和速度。(5)函数void update(float deltaTime);参数是时间步长,更新参数、颗粒位置、速度、网格哈希值等。(6)函数void reset(ParticleConfig config);参数是枚举型变量ParticleConfig,这是重设颗粒排列方式。(7)函数float *getArray(ParticleArray array);获取数组。(8)函数void  setArray(ParticleArray array, const float *data, int start, int count);设置数组。(9)下面的函数都是获取或设置ParticleSystem类的数据。(10) void dumpGrid();void dumpParticles(uint start, uint count);从设备端获取网格和颗粒信息的函数。(11)函数addSphere,可视化窗口里的加球操作。**protected部分,未细看。**(1)无参数构造函数。(2)生成VBO函数,**这个完全不懂**。(3)初始化和结束函数。(4)初始化网格函数,具体操作没看。**数据部分,protected**,英文注释为源程序注释(1)bool m_bInitialized, m_bUseOpenGL;是否初始化,是否使用OpenGL。(2) uint m_numParticles;颗粒数量(3)**// CPU data**float *m_hPos;颗粒位置float *m_hVel; 颗粒速度uint  *m_hParticleHash;颗粒哈希值,**这里还没懂**uint  *m_hCellStart;网格初始颗粒编号uint  *m_hCellEnd;(4)**// GPU data**float *m_dPos;float *m_dVel;float *m_dSortedPos;float *m_dSortedVel;(5)**// grid data for sorting method**uint  *m_dGridParticleHash; // grid hash value for each particleuint  *m_dGridParticleIndex;// particle index for each particleuint  *m_dCellStart;        // index of start of each cell in sorted listuint  *m_dCellEnd;          // index of end of celluint   m_gridSortBits;uint   m_posVbo;            // vertex buffer object for particle positionsuint   m_colorVBO;          // vertex buffer object for colorsfloat *m_cudaPosVBO;        // these are the CUDA deviceMem Posfloat *m_cudaColorVBO;      // these are the CUDA deviceMem Colorstruct cudaGraphicsResource *m_cuda_posvbo_resource; // handles OpenGL-CUDA exchangestruct cudaGraphicsResource *m_cuda_colorvbo_resource; // handles OpenGL-CUDA exchange(6)参数 // paramsSimParams m_params;uint3 m_gridSize;uint m_numGridCells;(7)StopWatchInterface *m_timer;(8) uint m_solverIterations;**回到初始化颗粒系统的函数** initParticleSystempsystem = new ParticleSystem(numParticles, gridSize, bUseOpenGL);//new内存,初始化psystem->reset(ParticleSystem::CONFIG_GRID);//颗粒初始排列,这里是网格排列,这里还给其他数据赋值,如颗粒半径、位置、初速度等if (bUseOpenGL)//这里应该是OpenGL的渲染可视化{renderer = new ParticleRenderer;renderer->setParticleRadius(psystem->getParticleRadius());renderer->setColorBuffer(psystem->getColorBuffer());}sdkCreateTimer(&timer);//CUDA计时器第一部分先写到这,2020.12.6 00:46。

CUDA Samples 之 Simulations 之 Particles (1)相关推荐

  1. CUDA Samples: 获取设备属性信息

    通过调用CUDA的cudaGetDeviceProperties函数可以获得指定设备的相关信息,此函数会根据GPU显卡和CUDA版本的不同得到的结果也有所差异,下面code列出了经常用到的设备信息: ...

  2. CUDA Samples: matrix multiplication(C = A * B)

    以下CUDA sample是分别用C++和CUDA实现的两矩阵相乘运算code即C= A*B,CUDA中包含了两种核函数的实现方法,第一种方法来自于CUDA Samples\v8.0\0_Simple ...

  3. CUDA Samples:Vector Add

    以下CUDA sample是分别用C++和CUDA实现的两向量相加操作,参考CUDA 8.0中的sample:C:\ProgramData\NVIDIA Corporation\CUDA Sample ...

  4. 安装cuda后却没有CUDA Samples怎么办?

    Cuda 11.6版本之后将不再编译cuda,所以必须自己从github下载后自行编译, 下载网址为 cuda samples 对于windows用户, Windows示例是使用Visual Stud ...

  5. CUDA Samples

    最近准备再挖个坑,翻译下cuda_samples,给入门想看代码又不知道看点啥的小同学提供一些指引(顺便指引下自己).本文简要介绍samples里的项目的主要功能. 简介 Simple Referen ...

  6. CUDA Samples目录

    简介 Simple Reference  基础CUDA示例,适用于初学者, 反映了运用CUDA和CUDA runtime APIs的一些基本概念. Utilities Reference  演示如何查 ...

  7. run cuda samples ubuntu_NVIDIA cuDNN v8 deb方法安装教程(Linux/Ubuntu)

    0 deb和tar方法 为什么推荐使用deb方法呢,因为下面三点: 使用tar方法安装不会有cudnn_samples_v8这个文件,无法使用官方的安装完成验证方式. 查看cuDNN的方法已经过时了, ...

  8. CUDA Samples: Image Process: BGR to BGR565

    图像像素格式BGR565是每一个像素占2个字节,其中Blue占5位,Green占6位,Red占5位.在OpenCV中,BGR到BGR565的每一个像素的计算公式是: unsigned short ds ...

  9. CUDA Samples: Image Process: BGR to Gray

    在图像处理中,颜色变换BGR到Gray,常见的一般有两种计算方式,一种是基于浮点数计算,一种是基于性能优化的通过移位的整数计算. 浮点数计算公式为: gray = 0.1140 * B  + 0.58 ...

最新文章

  1. c语言程序找出500以内的所有素数,c语言求出给定范围内的所有质数
  2. 深入浅出WPF之Binding的使用(二)
  3. 目前我们再用的即时通讯软件
  4. Golang笔记——map
  5. Shell实现MySQL分库备份
  6. 多人操作sqlite3数据库冲突问题解决方法
  7. 幂的后三位相同 详解(C++)
  8. 逻辑回归算法深度思考-优点和缺点
  9. 国产替代:T630 USB3.0接口芯片替换Cypress CYUSB3014
  10. python实现真正的多线程
  11. ryzen linux 搭配显卡,AMD Ryzen 2600CPU搭配什么显卡比较合理?
  12. 需求分析文档_多多果园小游戏需求分析文档
  13. R代码学习(1)——算术运算、关系运算、逻辑运算
  14. 智能控制导论 # 模糊控制 1 理论及实例
  15. 金融爬虫python网贷,互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门)
  16. element ui实现分页时候如何不从1序号开始
  17. 微信小程序预览word,doc,excel文件
  18. 红黑树 (Red-Black Tree) – 介绍
  19. 创新工厂汪华建言移动创业团队发展
  20. Windows10自动安装打印机步骤

热门文章

  1. biee java_转:BIEE11g 集成开源CAS实现SSO
  2. 使用Promise解决请求先后次序问题
  3. 初识Linux:第五篇
  4. 三个月5位老员工离职!苹果健康团队被曝内部分歧严重,员工扎堆儿离开
  5. 飞机绕地飞行一周问题
  6. dockerfile拉取私库镜像_从私有仓库拉取镜像
  7. Android性能系列-运算篇
  8. AE学习01:AE完整项目总结
  9. APP天气预报图标素材下载
  10. js实现敏感词汇屏蔽和去除HTML标签