From dc98a253871b2d8a6fa40c389ffd11508952a3f7 Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 19 Dec 2021 21:22:40 +0800 Subject: [PATCH] feat(capter13): working on molecular dynamics model --- ReadMe.md | 1 + capter13/ReadMe.md | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 capter13/ReadMe.md diff --git a/ReadMe.md b/ReadMe.md index 894d4b8..ccfcfb8 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -16,6 +16,7 @@ CUDA gpu 编程学习,基于 《CUDA 编程——基础与实践》(樊哲 10. [线程束基本函数与协作组](./capter10/ReadMe.md) 11. [CUDA 流](./capter11/ReadMe.md) 12. [使用同一内存编程]() +13. [分子动力学模型](./capter13/ReadMe.md) 14. [CUDA 标准库](./capter14/ReadMe.md) diff --git a/capter13/ReadMe.md b/capter13/ReadMe.md new file mode 100644 index 0000000..b69da6d --- /dev/null +++ b/capter13/ReadMe.md @@ -0,0 +1,25 @@ +# 分子动力学模型 + +1. 将静态函数放在头文件中,则该函数就有可能被编译为内联函数,从而提高效率。 +适用于于需要被多个编译单元反复调用的函数。 +开发cuda程序时,也应该尽量优化对应的c++程序。 + +2. 半步长推进。 +粒子在t+dt时刻的坐标仅依赖t时刻的坐标、速度和力;但是t+dt时刻的速度依赖 +t时刻的坐标、速度和t+dt时刻的力。 +所以首先,以t时刻的状态计算t+dt/2时刻的速度;然后计算t+dt时刻的坐标,同时 +更新t时刻的力到t+dt时刻;最后,以t+dt/2时刻的速度和t+dt时刻的力计算t+dt +时刻的速度。 + +3. 常量内存比全局内存高速。 +如果数据量在编译期就确定且不大(明显小于4KB),在核函数中仅被读取,而且 +一个线程束中的所有线程在某个时刻访问同一个地址, +则该数据适合用传参的方式使用常量内存。 + +4. 逐步分析程序的性能瓶颈,逐步优化。 +将一个c++程序用cuda加速时,一般首先确定其中最耗时的部分并将其用cuda加速,从而 +快速提高程序性能。 +要得到最好的加速效果,需要尽可能多的将程序中可并行的计算用cuda加速。当然, +在大数情况下,我们需要在付出和收获间找到一个平衡点。 + +