随笔分类 -  CUDA编程

摘要:线程束 在一个线程束(warp)中的线程执行指令的方式是SIMT,即单指令多线程,单指令表明线程束中的线程执行相同的指令,如果因为条件语句导致线程束内的线程选择了不同分支,就会出现线程束分化。 warp是并行执行的一个独立单位,warp内所有线程是在同一个时钟周期内执行指令的。 Bank Confl 阅读全文
posted @ 2025-07-30 01:34 TimeLimit 阅读(28) 评论(0) 推荐(1)
摘要:以求n数之和为例,讲述规约问题。 串行规约 即直接遍历,时间复杂度为\(O(n)\)。 int sum = 0; for (int& x : v) { sum += x; } 并行规约 可以采用分治策略,例如计算[1, 2, 3, 4]的和,可以一个线程计算1+2,另一个线程计算3+4,再把结果进行 阅读全文
posted @ 2025-07-13 14:13 TimeLimit 阅读(22) 评论(0) 推荐(0)
摘要:本篇总结一下之前提到但没有进一步展开的内存访问问题和共享内存问题。 __device__关键字与内存访问 #include <iostream> __device__ int cnt1 = 1, cnt2 = 1; // GPU上的全局变量 __global__ void kernal(int ty 阅读全文
posted @ 2025-07-13 13:18 TimeLimit 阅读(28) 评论(0) 推荐(0)
摘要:本篇讲述同步问题。 互斥访问 #include <iostream> __device__ int cnt1 = 0, cnt2 = 0; // GPU上的全局变量 __global__ void kernal(int type) { if (type == 0) { printf("int par 阅读全文
posted @ 2025-07-10 01:08 TimeLimit 阅读(22) 评论(0) 推荐(1)
摘要:本篇讲述如何使用CUDA编程并行计算两个向量的加法。 并行结构 这是CUDA编程的并行结构。 Grid是最高层级的单位,由多个Block(线程块)组成; 每个Block由许多Thread(线程)组成,同一个Grid内的所有Block共享相同的全局内存空间; 而Thread是CUDA编程中最小的执行单 阅读全文
posted @ 2025-06-19 11:10 TimeLimit 阅读(41) 评论(0) 推荐(0)
摘要:CUDA是什么 英伟达为自家显卡开发的工具,方便程序员进行与显卡相关的编程。平时我们的程序如果没有使用类似CUDA的工具,都是在CPU上运行的,想让程序在GPU上运行就需要专门编程来实现。 准备工作 搭建CUDA编程环境。在Windows环境中,安装CUDA后可以用VS创建CUDA项目,直接用nvc 阅读全文
posted @ 2025-06-18 00:14 TimeLimit 阅读(66) 评论(0) 推荐(1)