- 博客(26)
- 收藏
- 关注
原创 __shared__、__managed__、__device__修饰的内存
虚拟内存,底层映射到GPU、CPU内存。CPU通过CUDA API来访问。CPU、GPU数据共享。
2025-03-06 14:47:37
68
原创 只写char是有符号还是无符号呢
在C语言标准中,**`char` 的符号性(是否有符号)是由实现定义的**,这意味着它可以是 `signed char` 或 `unsigned char`,具体取决于编译器和目标平台。- 在 **x86/x64 架构** 上,大多数编译器(如 GCC、MSVC)将 `char` 定义为 **有符号的**(`signed char`)。- 在 **ARM 架构** 上,通常将 `char` 定义为 **无符号的**(`unsigned char`)。### **1. 默认 `char` 的符号性**
2025-02-22 10:56:49
211
原创 GPU和FPGA的区别
GPU(Graphics Processing Unit,图形处理器)和 FPGA(Field-Programmable Gate Array,现场可编程门阵列)不是同一种硬件。我的理解是,虽然都可以用于并行计算,但是GPU是纯计算的硬件,FPGA是控制+计算的可编程的硬件。FPGA有点像CPU,区别在于,CPU的硬件是固定的,而FPGA的硬件是可编程的。如若理解有偏差,烦请指出,多谢!
2025-02-19 14:48:59
867
原创 《A Philosophy of Software Design》(《软件设计的哲学》)适合成熟的软件开发工程师阅读,增长功力
**避免信息泄漏**:防止模块之间共享不必要的信息,避免一个模块的实现细节影响到其他模块。- **简单而清晰的接口**:接口应该简洁明了,只提供必要的功能,避免过多的参数和复杂的调用方式。- **复杂度的来源**:详细阐述了复杂度可能来源于不必要的依赖关系、重复代码、不清晰的接口设计等。- **增量式设计**:提倡采用增量式的设计方法,逐步构建系统,而不是一开始就试图设计出一个完美的系统。- **复杂度的定义**:书中将复杂度定义为“任何使得软件系统难以理解和修改的因素”,包括代码的耦合性、模糊性等。
2025-02-17 16:37:36
262
原创 C 编程语言时使用的特定术语和概念的定义
它们经过翻译成为可执行程序,在操作系统调用其主函数时执行(除非它本身就是操作系统或其他独立程序,在这种情况下,入口点是由实现定义的)。每个标识符(宏除外)只在程序中称为其作用域的部分有效,并属于四种名称空间之一。有些标识符具有链接性,当它们出现在不同的作用域或翻译单元中时,会指向相同的实体。其他词可以用作标识符,用来标识对象、函数、结构体、联合体或枚举标记、其成员、类型定义名称、标签或宏。函数的定义包括语句和声明序列,其中一些还包括表达式,它们指定了程序要执行的计算。
2025-02-10 16:00:40
151
原创 cuda的maxBlockPerMP是什么?
maxBlockPerMP` 是一个重要的参数,用于指导 CUDA 程序的优化和资源管理。通过理解这个参数的含义和作用,开发者可以更好地设计内核,使其在硬件上高效运行。
2024-11-26 18:00:13
292
原创 【自用】底层driver debug case的方法
(1)如果是crash,从堆栈找到对应出错的地方,一级一级往上找到case或driver不对的地方;(2)如果是hang,暂停之后会停在hang的地方,加环境变量打印已有的调试手段,学着去分析log;(3)如果是fail,对比golden值和输出值,从后往前追case+driver。第一步,单步跟case,记录case测试的核心内容;
2024-11-25 17:27:02
108
原创 CUDA有哪些 `__attribute__` 修饰符?
CUDA 提供了多种 `__attribute__` 修饰符,用于控制编译器行为、优化代码、定义内存类型和限制内核启动配置。这些修饰符可以帮助开发者更好地控制和优化 CUDA 代码的性能和行为。CUDA(Compute Unified Device Architecture)提供了多种 `__attribute__` 修饰符,用于控制编译器行为和优化,以及在特定情况下提供额外的信息。
2024-11-22 17:21:54
851
原创 CUDA的<<<>>>是什么意思
在 CUDA 编程中,`>` 语法用于。这个语法指定了 CUDA 内核的执行配置(execution configuration),包括线程块的数量(blocks)、每个线程块中的线程数量(threads per block)、共享内存大小(shared memory size)和流(stream)。通过正确配置这些参数,可以有效地利用 GPU 的并行计算能力来加速计算任务。
2024-11-18 17:24:41
329
原创 我发现我对CUDA的Unified Memory有误解
不像通常的计算机,用户只能单独访问GPU内存或CPU内存,GPU和CPU之间的数据传输需要靠PCIE等手段。CUDA的Unified memory是CPU和GPU都能访问到的,就不需要数据传输的手段了!之前理解Unified Memory的时候,一直以为UVM分为device memory和host memory,也就是GPU memory和CPU memory,但其实不是的。Unified Memory是一个CUDA特有的feature。
2024-10-11 14:51:20
189
原创 linux上用cmake遇到的build问题解决方案(自用)
一、首先,找到出现红色字体"Error"的地方。三、关于cmake的更多信息,可以查询官网。二、其次,阅读报错信息。
2024-09-05 13:38:24
446
原创 CUDA:kernel函数中,计算线程在数据中的全局索引的标准公式解析(后期理解更深入了再加内容)
在 CUDA 编程中,处理一维、二维或三维线程网格时,blockIdxblockDim和threadIdx变量用于计算每个线程的唯一标识符。对于二维或三维网格,你需要扩展计算公式,以适应多个维度。
2024-09-03 16:03:39
257
原创 句柄(Handle)的简单理解
1. 文件句柄:当你打开一个文件(example.txt)时,操作系统返回一个句柄(FILE*),你可以通过它来读取或写入文件,而不需要知道文件在磁盘上的确切位置。在数据库编程中,数据库连接句柄用于管理与数据库的连接。句柄就是一个让你可以间接操作资源的“代号“,用于管理和操作系统资源。通过句柄,程序可以方便地访问文件、窗口、线程、数据库连接等资源,而不需要关心底层的细节。2. 窗口句柄:在编写图形用户界面程序时,每个窗口都有一个唯一的句柄。你通过这个句柄来标识和操作窗口,比如改变窗口大小或关闭窗口。
2024-07-22 17:57:09
511
原创 结构体一定要用指针来引用吗?结构体用指针来引用的好处。
在 C 语言中,使用指针来引用结构体是一种常见的做法,主要是为了提高函数调用的效率、方便修改结构体内容以及处理动态分配的内存。虽然可以直接传递结构体本身,但在实际应用中,指针提供了更好的性能和灵活性。
2024-07-17 10:10:05
423
原创 内核kernel和core是两个相关但不完全相同的概念
因此,内核是操作系统的重要组成部分,而核心可以在不同上下文中表示不同的概念,通常与硬件的处理能力或软件的主要执行部分相关联。2. 核心(Core)在硬件层面可以指处理器的独立计算单元,在软件层面可以指程序的主要执行部分或模块。1. 内核(Kernel)是操作系统的基础软件部分,管理系统的资源和提供服务给应用程序。
2024-07-15 11:03:31
989
原创 error:stray “##“in program;error:expected initializer before string constant
3. 第三次尝试:请教同事,他一眼丁真,我用Visual Studio2019打开的code不知道为什么自动给每一行代码中间空了一行,这个空行遇到了宏定义,就让宏定义为空,导致error。1. 第一次尝试:我首先写了类似的短一点的嵌套,清chatgpt解析,没问题。2. 第二次尝试:手写调用该宏的函数,逐层手动写下去,去查看是否正确,没问题。这导致VS打开工程的时候,code显示的style可能不对。(因涉及别人的知识产权,故此处纯描述,不粘贴代码。是版本控制软件p4v在设置的时候,
2024-07-12 16:39:44
625
原创 CUDA是什么?
计算正在从CPU"中央处理"向CPU与GPU"协同处理的方向发展。为了实现这一新型计算模式,英伟达发明了英伟达™ CUDA™并行计算架构。
2024-06-27 11:02:42
18035
1
原创 计算机存储体系简介
寄存器的速度最快,可以在一个时钟周期内访问,其次是高速缓存,可以在几个时钟周期内访问,普通内存可以在几十个或几百个时钟周期内访问。其次,是高速缓存——cache,分为L1,L2等级别。首先,寄存器速度最快,成本最高,因此个数和容量有限。此处,核心概念是存储器分级。计算机中,离CPU越近的存储器,速度越快。
2024-01-09 18:31:24
395
原创 OpenCL 函数clSetKernelArg()返回错误值CL_INVALID_ARG_SIZE分析和理解
根据spec中查询到函数clSetKernelArg()返回错误值CL_INVALID_ARG_SIZE定义如下,下面展开分析。
2023-12-25 17:22:30
780
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人