- 博客(471)
- 收藏
- 关注
原创 Arm功耗管理精讲与实战
1、功耗管理背景及挑战2、功耗管理架构演进及变迁3、系统分区-电压域和电源域4、功耗状态及功耗模式5、功耗管理框架-SCP&PPU&LPI6、功耗管理软件7、功耗管理标准接口8、多核处理器启动9、睡眠锁与唤醒源10、功耗管理实战11、功耗数据与功耗收益评估12、功耗管理与安全
2024-04-24 10:01:19
1253
5
原创 OPTEE的GDB调试技术实战
【按语】:如果需要调试OPTEE,那么在远程调试配置中使用GDB可能会很有用。远程调试意味着GDB在您的PC上运行,它可以访问源代码,而被调试的程序在远程系统上运行(在本例中,在QEMU环境的OPTEE中)。本博客来探讨OPTEE的GDB调试技术实战。
2024-04-23 19:49:15
727
原创 AI-安全-功耗 CUBE 博客目录导读
一、ARM&RISC-V安全架构二、TF-A/TEE/Hafnium之安全三、GP安全认证&IDA逆向分析四、静&动态代码分析五、低功耗六、可信计算与可信启动七、AI之GPGPU编程与实践八、其他
2023-08-12 19:57:12
4446
15
原创 OPTEE之ARM安全扩展
OPTEE之ARM安全扩展一、BTI(Branch Target Identification)二、如何使能OP-TEE core的BTI三、如何使能TA的BTI
2023-08-05 18:21:40
1068
原创 ATF(TF-A)/OPTEE之静态代码分析汇总
1、静态代码分析基础知识及分析工具2、静态代码扫描分析sonarlint使用一——windows下的makefile工程3、静态代码扫描分析sonarlint使用二——windows下的cmake工程4、静态代码扫描分析sonarlint使用三——linux下的makefile工程5、静态代码扫描分析sonarlint使用四——linux下的cmake工程6、TF-A静态代码分析实战7、OPTEE静态代码分析实战8、Sonarqube扫描结果存入数据库并网页显示,提升团队代码质量
2023-07-04 13:05:13
949
原创 TEE之GP(Global Platform)认证汇总
一、为什么需要GP认证?二、TEE GP认证规范三、TEE GP认证方案四、TEE GP安全认证方案五、TEE GP功能认证方案六、TEE GP安全认证实验室七、TEE GP功能认证实验室八、TEE GP安全认证产品九、TEE GP功能认证产品十、TEE GP技术委员会及中国任务小组
2023-07-03 20:57:04
1299
原创 RISC-V TEE(可信执行环境)方案初探
本文对RISC-V TEE整体概览、硬件层面支持、各家TEE方案(Multizone、Keystone、Penglai、VirtualZone)介绍分别进行了初探。
2023-06-15 08:56:09
2478
原创 Altium designer10---PCB添加Logo
看到这篇的时候,想必你以前做过或正在学习印刷电路板(PrintedCircuitBoard)的制作,可能以前你把板子做好后,检测硬件连接正常后,就投入到软件编程了。其实,我们可以在制作板子的同时,制作一些自己喜欢的Logo等来美化一下你的电路板。此篇是我在天津科技大学就读本科时,于电信学院新电社所做,当时和范文龙一拍即合,作为内部教学资料所写,满满的社团回忆,现作为本人第一篇博客,现将具体方法
2015-06-02 09:43:32
13754
8
原创 【CVE-2025-0647】ARM CPU漏洞安全通告
Arm处理器存在安全漏洞(CVE-2025-0647),当特权级guest执行CPPRCTX指令时,可能抑制TLB失效操作,导致guest访问已重新分配的内存,破坏隔离机制。受影响产品包括Cortex-A710/X系列、Neoverse-V/N系列等。建议每次执行CPPRCTX指令后强制TLB失效操作以规避风险。该漏洞由Arm自行发现并于2026年1月发布。
2026-02-23 15:26:38
519
原创 CUDA C++编程指南(8.4.1)——协作组之隐式分组
本文介绍了CUDA中的隐式分组机制,包括线程块组(ThreadBlockGroup)、集群组(ClusterGroup)、网格组(GridGroup)和多网格组(MultiGridGroup)。这些分组为并行计算提供了不同粒度的线程组织方式,支持同步操作和线程查询功能。关键点包括:1) 隐式分组必须在所有线程可达的位置创建以避免死锁;2) 各分组类型提供特定的同步接口和线程/块查询方法;3) 网格组和多网格组需要协作式启动API支持;4) 多网格组已在CUDA11.3中弃用。
2026-02-23 14:54:57
626
原创 CUDA C++编程指南(8.1&2&3)——协作组及编程模型概念
摘要:CUDA的协作组(CooperativeGroups)是自CUDA9引入的编程模型扩展,用于组织可通信的线程组。它提供了线程组同步的安全机制,解决了传统__syncthreads()的局限性。最新版本(CUDA12.2)新增了barrier_arrive/barrier_wait等API,并优化了大型分块支持。协作组通过将线程集合作为一等对象,实现了更灵活的并行模式,包括全局同步和生产者-消费者并行。其核心包含数据类型、集合操作和同步接口等元素,需包含<cooperative_groups.h&
2026-02-23 14:52:23
617
原创 CUDA C++编程指南(7.31&32&33&34)——C++语言扩展之性能分析计数器函数和断言、陷阱、断点函数
摘要:本文介绍了CUDA编程中的几个调试和性能分析功能。硬件性能计数器功能允许通过__prof_trigger()递增8个可用计数器(0-7),可通过nvprof工具读取。断言功能(assert)在表达式为0时停止内核执行并输出调试信息,建议生产代码禁用。陷阱函数(__trap())会中止内核并引发主机中断,断点函数(__brkpt())则暂停内核执行。这些功能主要用于调试目的,可能影响性能,其中断言可通过定义NDEBUG宏禁用。
2026-01-31 22:01:51
593
原创 CUDA C++编程指南(7.25)——C++语言扩展之DPX
摘要:DPX提供一组优化函数,用于处理16/32位有符号/无符号整数的极值运算,支持三参数比较、融合加法比较和ReLU激活功能。包含__vimax3、__vibmin等系列函数,可返回极值及比较结果。在计算能力≥9的设备上硬件加速,旧设备软件模拟。特别适用于动态规划算法(如Smith-Waterman、Floyd-Warshall)。示例展示了三数取最大、和值比较等典型用法,支持结果钳制到零的ReLU操作。该API完整文档参见CUDA Math API。
2026-01-31 21:38:20
834
原创 CUDA C++编程指南(7.23)——C++语言扩展之纳秒休眠函数
__nanosleep(ns)函数用于将线程挂起约ns纳秒,最大休眠时长约1毫秒,需计算能力7.0+。示例展示了该函数在实现带指数退避的互斥锁中的应用:当获取锁失败时,休眠时间从8纳秒开始逐次倍增(上限256纳秒),避免忙等待。配套的mutex_unlock函数通过原子操作释放锁。
2026-01-27 21:55:54
377
原创 CUDA C++编程指南(7.21&22)——C++语言扩展之Warp归约函数和Warp Shuffle 函数
本文介绍了CUDA中的Warp归约函数和Shuffle函数。归约函数包括__reduce_add_sync等算术操作和__reduce_and_sync等逻辑操作,要求指定线程掩码并同步线程。Shuffle函数(__shfl_sync等)支持warp内线程间变量交换,提供四种寻址模式,需要指定参与线程的掩码。这些函数都不隐含内存屏障,且要求所有参与线程使用相同掩码。文章还提供了广播、扫描和归约的代码示例,展示了这些函数的实际应用。这些功能适用于计算能力5.0及以上的设备,其中同步版本是推荐用法。
2026-01-27 21:33:14
840
原创 CUDA C++编程指南(7.19&20)——C++语言扩展之Warp投票函数和Warp匹配函数
本文介绍了CUDA中的warp投票和匹配函数。投票函数(__all_sync、__any_sync、__ballot_sync)用于线程束内归约-广播操作,需指定参与线程的掩码,比较各线程的谓词值并返回组合结果。匹配函数(__match_any_sync、__match_all_sync)则在线程间同步后比较广播值。注意:1)旧版函数已弃用;2)所有同步变体函数都需正确设置线程掩码;3)这些函数不提供内存屏障或内存排序保证。适用于计算能力7.x及以上设备。
2026-01-26 21:37:54
762
原创 CUDA C++编程指南(7.17&18)——C++语言扩展之Alloca 函数和编译器优化提示函数
摘要:本文介绍了CUDA编程中的alloca函数和编译器优化提示函数。alloca函数用于在调用者栈帧中分配临时内存(自动释放),需注意栈溢出风险。优化提示函数包括:__builtin_assume_aligned()(指针对齐提示)、__builtin_assume()/__assume()(条件假设)、__builtin_expect()(分支预测)和__builtin_unreachable()(不可达代码标记)。这些函数可帮助编译器优化代码,但需注意平台兼容性和使用限制。
2026-01-26 21:25:09
675
原创 CUDA C++编程指南(7.15&16)——C++语言扩展之内存空间谓词和转化函数
本文介绍了CUDA中的地址空间谓词函数和转换函数。谓词函数包括__isGlobal()、__isShared()、__isConstant()、__isGridConstant()和__isLocal(),分别用于检测指针是否指向特定内存空间。转换函数如__cvta_generic_to_global()等实现通用地址与特定空间地址的相互转换,对应PTX指令功能。这些函数在参数为空指针时行为未定义。__isGridConstant()仅支持计算架构7.x及以上版本。
2026-01-25 19:36:36
1293
原创 CUDA C++编程指南(7.14)——C++语言扩展之原子函数
本文详细介绍了CUDA中的原子操作函数,包括算术运算(atomicAdd/Sub等)、位运算(atomicAnd/Or/Xor)和其他原子操作函数。原子操作支持不同作用域(设备级、系统级、块级)和内存顺序语义,可在全局或共享内存中对32/64/128位数据进行原子读-修改-写操作。特别说明了不同计算能力设备对浮点原子操作的支持情况,并介绍了CUDA 12.8引入的带内存顺序和作用域参数的新型原子函数。文章还提供了通过atomicCAS实现不原生支持原子操作的示例代码。
2026-01-25 19:28:11
1225
原创 CUDA C++编程指南(7.10&11&12&13)——C++语言扩展之加载、存储、时间函数
本文介绍了CUDA计算能力5.0及以上设备支持的缓存操作函数,包括只读数据缓存加载函数(__ldg)、带缓存提示的加载函数(__ldcg等)和存储函数(__stwb等)。这些函数支持多种数据类型,包括基本整型、浮点型及其向量类型,以及半精度(__half)和bfloat16(__nv_bfloat16)类型。此外还介绍了设备时钟函数clock()和clock64(),可用于测量线程执行时间,但需注意由于线程分时执行,测量结果会大于实际指令执行周期数。
2026-01-25 18:49:13
445
原创 CUDA C++编程指南(7.5&6)——C++语言扩展之内存栅栏函数和同步函数
CUDA采用弱序内存模型,线程间共享内存访问可能导致未定义行为。内存栅栏函数(__threadfence_block/device/system)可强制内存访问的顺序一致性,其作用域从线程块到整个系统不等。典型应用场景包括线程间的生产者-消费者模式,如原子计数器与内存栅栏配合确保数据可见性。同步函数__syncthreads及其变种(and/or/count)用于线程块内同步,计算能力2.x+设备还支持warp级同步__syncwarp。正确使用这些同步机制可避免数据竞争,确保内存操作的正确顺序和可见性。
2026-01-25 16:19:10
805
原创 CUDA C++编程指南(7.3&4)——C++语言扩展之内置向量类型和内置变量
摘要:本文介绍了CUDA编程中的内置向量类型和变量。向量类型包括char、int、float等基本类型的派生类型,可通过x、y、z、w访问分量,并使用make_<typename>构造函数创建。dim3类型用于指定维度,未指定分量默认为1。内置变量如gridDim、blockIdx、blockDim和threadIdx用于定义网格、块和线程的维度及索引,仅在设备函数中有效。warpSize变量表示warp的线程数大小。这些特性为CUDA并行计算提供了基础支持。
2026-01-25 15:43:08
248
原创 CUDA C++编程指南(7.2)——C++语言扩展之变量内存空间指定符
摘要:本文介绍了CUDA编程中的内存空间限定符,包括__device__、__constant__、__shared__、__grid_constant__、__managed__和__restrict__。这些限定符用于指定变量在设备上的内存位置和访问特性。
2026-01-24 22:03:04
736
原创 CUDA C++编程指南(7.1)——C++语言扩展之函数执行空间指定符
CUDA函数执行空间限定符包括__global__(设备执行,主机调用)、device(设备执行,仅设备调用)和__host__(主机执行,仅主机调用)。其中__device__和__host__可组合使用实现跨平台编译。此外,CUDA提供内联控制限定符:noinline(避免内联)、forceinline(强制内联)和__inline_hint__(优化提示)。需要注意跨执行空间调用的未定义行为,以及通过__CUDA_ARCH__宏区分主机/设备代码路径。
2026-01-24 21:38:17
421
原创 CUDA C++编程指南(3.3&4&5&6)——版本控制与兼容性&计算模式与模式切换
摘要:CUDA开发需关注计算能力和驱动API版本(CUDA_VERSION),驱动API具有向后兼容性但无向前兼容性。系统驱动版本需不低于应用程序构建的API版本,且运行时库版本需一致(静态链接除外)。Tesla GPU产品引入前向兼容升级路径。计算模式包括默认(多线程共享)、独占进程(单进程独占)和禁止(禁用CUDA上下文)。计算能力6+设备支持指令级计算抢占。显示输出GPU模式切换可能导致内存重分配,引发CUDA操作失败。Tesla设备可通过nvidia-smi启用TCC模式禁用图形功能。这些特性对CU
2025-11-16 18:10:04
152
原创 CUDA C++编程指南(3.2.10&11&12&13)——统一虚拟地址空间&IPC&错误检查&调用堆栈
摘要:本文介绍了CUDA编程中的关键特性:统一虚拟地址空间允许64位进程下主机与设备共享单一地址空间,便于内存管理;进程间通信(IPC)API支持Linux系统下64位进程间的设备内存和事件共享;错误检查机制强调异步错误处理需配合同步操作;调用堆栈管理在计算能力2.x及以上设备中可动态设置大小,需注意递归函数可能导致的堆栈溢出问题。这些特性优化了GPU编程的灵活性和可靠性。
2025-11-16 17:40:37
356
原创 CUDA C++编程指南(3.2.9)——多设备系统
本文介绍了CUDA多设备编程的关键操作:1. 设备枚举与管理:展示如何查询设备属性并设置当前设备,影响内存分配和内核执行。2. 流与事件行为:说明流与设备的关联规则,指出内核必须在当前设备流中执行,但内存复制可跨设备流。3. 点对点内存访问:解释通过cudaDeviceEnablePeerAccess()实现设备间直接内存访问的条件和方法。4. 特殊注意事项:Linux系统需注意IOMMU设置对PCIe点对点访问的影响。5. 内存复制操作:介绍cudaMemcpyPeer等函数实现设备间内存复制的方法,以及
2025-11-16 11:35:06
92
原创 CUDA C++编程指南(3.2.8)——异步并发执行2
CUDA 9.0引入了程序化依赖启动机制,允许次级内核在主内核完成前启动,实现部分并行执行。该技术通过cudaTriggerProgrammaticLaunchCompletion和cudaGridDependencySynchronize等API实现,需在计算能力9.0+设备使用。文中还介绍了CUDA事件机制,包括事件创建、销毁和计时功能,以及同步调用的控制方式。这些特性为优化GPU并行计算提供了新的技术手段,特别适用于存在部分独立计算任务的应用场景。
2025-11-16 11:23:57
210
原创 CUDA C++编程指南(3.2.8)——流(Streams)
本文介绍了CUDA编程中流的概念与使用方法。主要内容包括:1)流的创建与销毁过程,通过示例展示如何定义包含内存拷贝和内核启动的流;2)默认流的特性及其编译选项;3)显式和隐式同步方法;4)不同流之间的执行重叠行为及其影响因素;5)主机回调函数的插入机制;6)流优先级的设置与作用。文章详细说明了流作为命令序列的执行特性,强调了不同流之间的并发操作不能保证顺序,并提供了内存操作、内核执行和主机回调等典型场景的实现示例。最后介绍了通过优先级调整流任务执行顺序的方法。
2025-11-16 08:10:38
432
原创 CUDA C++编程指南(3.2.8)——异步并发执行
摘要:本文介绍了CUDA中的异步并发执行。1)主机与设备间通过异步函数实现并发;2)部分设备支持多个内核并发执行;3)支持异步引擎的设备可实现数据传输与内核执行重叠;4)高计算能力设备支持并发数据传输操作。文中详细说明了各项功能的使用条件、查询方法及注意事项,如内存页锁定要求、调试选项等,并指出并发级别取决于设备特性和计算能力。这些并发机制能显著提高GPU计算效率。
2025-11-11 21:07:37
83
原创 CUDA C++编程指南(3.2.1&2)——运行时和设备内存
本文介绍了CUDA运行时环境的关键功能与使用方法。主要内容包括:1)运行时初始化机制,从CUDA 12.0开始cudaSetDevice()会显式初始化运行时;2)设备内存管理,详细说明线性内存和CUDA数组的分配方式(cudaMalloc/cudaMallocPitch/cudaMalloc3D)及内存复制操作;3)特殊内存类型的使用,包括共享内存、页锁定主机内存、纹理/表面内存等;4)多设备系统、异步执行、错误检查等高级功能。文中通过代码示例演示了二维/三维数组分配、内核访问方式以及全局变量的操作方法,
2025-11-11 21:07:28
219
原创 CUDA C++编程指南(3.2.7)——内存同步域
摘要:本文介绍了CUDA中的内存栅栏干扰问题及其解决方案。某些CUDA应用程序会因过度等待内存栅栏操作而性能下降。Hopper架构引入内存同步域功能来隔离流量,通过分配不同域ID给内核启动来减少干扰。系统范围围栏用于跨域同步,而设备范围栅栏可用于域内同步。文中还说明了如何使用cudaLaunchAttributeMemSyncDomain等API来管理域分配,包括默认域和远程域的使用场景。这种机制可优化并行计算与通信场景的性能,同时保持向后兼容性。
2025-11-08 08:19:52
588
原创 CUDA C++编程指南(3.2.6)——页锁定主机内存
本文介绍了CUDA中的页锁定主机内存(Page-Locked Host Memory)管理技术。主要内容包括:1)页锁定内存的分配方式及其优势,如支持异步拷贝、内存映射和更高带宽;2)可移植内存的实现方法,使其能被系统中所有设备使用;3)写合并内存的特性,包括性能提升和使用注意事项;4)映射内存的机制与注意事项,包括地址获取、同步要求和硬件限制。文章还特别说明了在Tegra设备上的限制情况,并提供了使用这些内存类型时的具体API调用方法和标志参数设置建议。
2025-11-08 08:16:37
586
原创 CUDA C++编程指南(3.2.5)——分布式共享内存
摘要:本文介绍了CUDA计算能力9.0中引入的线程块集群功能,重点阐述了分布式共享内存(Distributed Shared Memory)的创新应用。通过集群内线程块间的内存共享机制,开发者可以优化如直方图计算等并行任务。文章详细说明了分布式共享内存的访问规则、同步要求,并提供了直方图计算内核的完整代码示例,展示如何根据直方图大小动态选择使用本地或分布式共享内存。该技术为需要跨线程块数据共享的应用提供了性能优化的新途径,同时保持了CUDA编程模型的灵活性。
2025-11-08 08:13:56
451
原创 CUDA C++编程指南(3.2.4)——共享内存
本文介绍了两种CUDA矩阵乘法实现方案。基础版本直接操作全局内存,每个线程读取矩阵A的一行和B的一列计算对应元素,导致A被读取B.width次,B被读取A.height次,效率低下。优化版本利用共享内存作为缓存,通过分块计算技术将矩阵划分为子矩阵块:1)每个线程块负责计算结果矩阵的一个子块;2)先将子矩阵从全局内存加载到共享内存;3)通过协同计算减少全局内存访问次数。该方法使A仅需读取(B.width/block_size)次,B读取(A.height/block_size)次,显著提升了内存访问效率。
2025-11-07 19:54:30
526
原创 CUDA C++编程指南(3.2.3)——设备内存L2访问管理
这篇博客介绍了CUDA 11.0及以上版本中针对计算能力8.0+设备的L2缓存优化技术。主要内容包括:1)可通过预留部分L2缓存来提升频繁访问数据的带宽和延迟;2)支持设置访问策略窗口来定义全局内存区域的持久化属性;3)提供三种访问属性(流式、持久化和正常)来控制缓存行为;4)介绍了管理L2缓存预留的实用方法,包括重置机制和利用率管理策略。文章还详细说明了相关API的使用方式,帮助开发者优化CUDA程序的内存访问性能。
2025-11-07 19:51:40
589
原创 CUDA C++编程指南(3.1)——使用NVCC编译
摘要:本文介绍了CUDA C++编程的编译流程与兼容性特性。NVCC编译器将主机代码与设备代码分离处理,支持离线编译为PTX中间代码或二进制cubin对象,以及运行时即时编译(JIT)。重点阐述了二进制兼容性(不同计算能力版本间的兼容规则)、PTX兼容性(指令集支持范围)和应用兼容性(多计算能力目标支持)。同时说明了C++特性支持限制和64位模式要求。通过编译器选项控制代码生成策略,使应用能适配不同架构GPU设备,包括未来新架构的兼容支持。
2025-11-04 21:11:16
966
原创 CUDA C++编程指南(4)——硬件实现
摘要:NVIDIA GPU采用SIMT(单指令多线程)架构,通过32线程的warp作为基本执行单元。多处理器以warp为单位进行线程调度,在Volta架构后支持独立线程调度,提高了并行灵活性。硬件多线程通过保持warp执行上下文在芯片上实现零开销切换。系统资源(寄存器/共享内存)分配决定了可同时处理的块和warp数量。该架构设计实现了高效的指令级和线程级并行,同时需注意warp同步、分支分歧等问题对性能的影响。
2025-11-04 21:07:34
875
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅