3\gg> $ 试试看。
你会看到 Hello, world! 打印了三遍!
- 原来,三重尖括号里的第二个参数决定着启动 kernel 时所用 GPU 的线程数量。
- GPU 是为
并行而生的,可以开启很大数量的线程,用于处理大吞吐量的数据。
 :
并行的最小单位
• 板块 (block) : 包含若干个线程
• 网格 (grid):指整个任务,包含若干个板块
• 从属关系:线程 < 板块 < 网格
• 调用语法:<<
0 码力 |
142 页 |
13.52 MB
| 2 年前 3
## 并行不悖 – OLAP 在互联网公司的实践与思考
## 赵飞祥
一 数据仓库体系架构
二 Greenplum体系架构
三 Greenplum现状说明
四 Greenplum运维体系
五 Greenplum开发规范
六 Greenplum扩展规划
## 业务数据与数据使用归类
时间维度:过去 - 现在 - 未来 (数据的生命周期)
“现在”的数据 —— OLTP
“过去”的数据 执行查询计划及数据存储管理
外部数据源并行装载或导出

## greenplum体系架构
## greenplum的体系结构
## • greenplum的架构特点
MPP ShareNothing 海量并行处理+完全无共享
➢ cpu计算能力 避免直接在Greenplum执行消耗session会话的操作
➢ 尽量不创建索引
## • 上线与调度规范
上线的程序,必须要经过测试,才可以生产使用
调度程序需考虑每个任务的前后关系,时间富裕
避免因为过于追求并行度,对多个任务造成相互影响
一 数据仓库体系架构
二 Greenplum体系架构
三 Greenplum现状说明
四 Greenplum运维体系
五 Greenplum开发规范
0 码力 |
43 页 |
9.66 MB
| 2 年前 3
0 码力 |
90 页 |
8.76 MB
| 2 年前 3
build 目录
• 切换到 build 目录
• 在 build 目录运行 cmake < 源码目录> 生成 Makefile
- 执行本地的构建系统 make 真正开始构建(4 进程并行)
- 让本地的构建系统执行安装步骤
回到源码目录
## 现代 CMake 提供了更方便的 -B 和 --build 指令,不同平台,统一命令!
• cmake -B build // 在源码目录用 cmake libmylib.a main Makefile
bate@archer ~/Codes/course/11/00 (master) $
改进:mylib 作为一个动态库
CMakeLists.txt main.cpp | mylib.cpp
1 add_library(mylib SHARED mylib.cpp)
3 add_executable(main
4 printf("main function\n")
5 }
mylib initialized
main function
## 虽然动态库也可以避免剔除没引用的对象文件,但引入了运行时链接的麻烦
CMakeLists.txt
1 add_library(mylib SHARED mylib.cpp)
main.cpp mylib
0 码力 |
166 页 |
6.54 MB
| 2 年前 3
## cpu-bound 与 memory-bound
- 通常来说,并行只能加速计算的部分,不能加速内存读写的部分。
- 因此,对 fill 这种没有任何计算量,纯粹只有访存的循环体,并行没有加速效果。称为内存瓶颈(memory-bound)。
- 而 sine 这种内部需要泰勒展开来计算,每次迭代计算量很大的循环体,并行才有较好的加速效果。称为计算瓶颈(cpu-bound)。
|Ben }
}
BENCHMARK(BM_parallel_sine);
## 浮点加法的计算量
- 冷知识:并行地给浮点数组每个元素做一次加法反而更慢。
因为一次浮点加法的计算量和访存的超高延迟相比实在太少了。
• 计算太简单,数据量又大,并行只带来了多线程调度的额外开销。
• 小彭老师经验公式:1 次浮点读写 ☐ 8 次浮点加法
- 如果矢量化成功(SSE):1 次浮点读写 invalidation)|10K - 1M|
|Disk read|400K+|
## 多少计算量才算多?
- 看右边的 func,够复杂了吧?也只是勉勉强强超过一点内存的延迟了,但在 6 个物理核心上并行加速后,还是变成 mem-bound 了。
• 加速比:1.36 倍
• 应该达到 6 倍(物理核心数量)才算理想加速比。
|Benchmark|Time|CPU|Iterations|
|---|---|---|---|
0 码力 |
147 页 |
18.88 MB
| 2 年前 3
[Image](/uploads/documents/b/9/2/9/b92965fc278f6399099ce51dd8119d4d/p1_2.jpg)
## 高性能并行编程与优化 - 课程大纲
• 分为前半段和后半段,前半段主要介绍现代 C++,后半段主要介绍并行编程与优化。
1. 课程安排与开发环境搭建:cmake 与 git 入门
2. 现代 C++ 入门:常用 STL 容器,RAII 内存管理
3. 编译器如何自动优化:从汇编角度看 C++
5. C++11 起的多线程编程:从 mutex 到无锁并行
6. 并行编程常用框架:OpenMP 与 Intel TBB
7. 被忽视的访存优化:内存带宽与 cpu 缓存机制
8. GPU 专题:wrap 调度,共享内存,barrier
9. 并行算法实战:reduce,scan,矩阵乘法等
10. 存储大规模三维数据的关键:稀疏数据结构
11 12.C++ 在 ZENO 中的工程实践:从 primitive 说起
13.结业典礼:总结所学知识与优秀作业点评
## 硬件要求:
64 位(32 位时代过去了)
至少 2 核 4 线程(并行课...)
英伟达家显卡(GPU 专题)
软件要求:
Visual Studio 2019 ( Windows 用户 )
GCC 9 及以上(Linux 用户)
CMake 3.12 及以上(跨平台作业)
0 码力 |
32 页 |
11.40 MB
| 2 年前 3