随笔分类 - 基于CPU/GPU/DSP的高性能计算
基于CPU/GPU/DSP的高性能计算
摘要:大家做高性能计算的朋友,想必对CPU的执行模式已经非常熟悉了吧。当代高级些的CPU一般采用超标量流水线,使得毗邻几条相互独立的指令能够并行执行——这称为指令集并行(ILP,Instruction-Level Parallelism);而像x86引入的SSE(Streaming SIMD Extension)、AVX(Advanced Vector Extension),以及ARM的NEON技术都属于数据级并行(Data-Level Parallelism)。而GPGPU的执行与CPU比起来还是有不少差异的。这里,为了能够让大家更好地理解、并使用OpenCL,想谈谈当前主流用于超算的GPGPU的执行模式。
阅读全文
摘要:由于Android以及Jetson TK的编译工具链中的汇编器仍然不支持大部分的32位Thumb-2指令,比如add.w,因此我们只能通过手工写机器指令码来实现想要的指令。下面我将简单地介绍如何在ARM GCC汇编器中手工去写机器指令码。
阅读全文
摘要:在Intel Haswell架构里引入了Gather特性。它使得CPU可以使用向量索引存储器编址从存储器取非连续的数据元素。这些gather指令引入了一种新的存储器寻址形式,该形式由通过一个向量寄存器(XMM或YMM)所指定的一个基地址寄存器和多个索引。数据元素大小支持32位与64位,并且数据类型支持浮点型和整型。
阅读全文
摘要:随着OpenCL的普及,现在有越来越多的移动设备以及平板、超级本等都支持OpenCL异构计算。而这些设备与桌面计算机、服务器相比而言性能不是占主要因素的,反而能耗更受人关注。因此,这些移动设备上的GPU与CPU基本都是在同一芯片上(SoC),或者GPU就已经成为了处理器的一部分,像Intel Ivy Bridge架构开始的处理器(Intel HD Graphics 4000开始支持OpenCL),AMD APU等。
阅读全文
摘要:最近有不少朋友在多次循环执行OpenCL内核程序的时候碰到一些问题。由于对OpenCL初学者而言可能比较普遍,因此我这里给出一个清晰简单的demo来掩饰如何简单又高效地执行循环执行OpenCL内核。
阅读全文
摘要:源自OpenGPU社区的一个帖子的讨论:一个有意思的openCL问题
阅读全文
摘要:在此列出x86架构处理器在64位模式下的可用寄存器列表,方便查阅~
阅读全文
摘要:最近有不少朋友提及到如何能在运行时获悉一个GPU的最大local memory的尺寸。由于OpenCL对各类处理器开放,因此不同处理器所拥有的local memory大小也各不相同。即便是GPU,甚至同一家公司出的GPU,不同的架构,其Local Memory的尺寸也各不相同。一般来说,现在随着制程工艺的不断发展,Local Memory也逐步变大。
阅读全文
摘要:出自OpenGPU:关于去除bank conflict的一个例子程序
阅读全文
摘要:在OpenCL标准中,没有给出查看计算设备一共有多少寄存器,至少能分配给每个work-item多少寄存器使用的特征查询。而由于一个段内核代码是否因寄存器紧缺而导致性能严重下降也是一个比较重要的因素,因此我这边提供一个比较基本的方法来猜测当前计算设备至少能为每个work-item分配多少可用的寄存器。
阅读全文
摘要:由于OpenCL是为各类处理器设备而打造的开发标准的计算语言。因此跟CUDA不太一样的是,其对设备特征查询的项更上层,而没有提供一些更为底层的特征查询。比如,你用OpenCL的设备查询API只能获取最大work group size,但无法获取到最小线程并行粒度。
阅读全文
摘要:在多线程应用中的资源优化依赖于处理器拓扑层级内相关联的Cache拓扑以及执行资源。在第7章中讨论了处理器拓扑以及标识处理器拓扑的一种软件算法。
在带有共享总线的平台中,总线系统被在SMT层以及在处理器拓扑的处理器核心层的多个代理所共享。因而多线程应用程序设计应该起始于管理对多个处理器代理可用的总线带宽的方法,这些处理器代理以一种合理的方式共享同一个总线连接。这可以通过提升独立应用程序线程的数据位置性或允许两个线程利用一个共享的L2 Cache(在这样的共享Cache中是可用的)来达成。
阅读全文
摘要:Intel64及IA-32架构优化指南第8章多核与超线程技术——8.7 前端优化 8.8 亲密性和共享的平台资源
阅读全文
摘要:高效的Cache操作是存储器优化的关键方面。Cache的高效操作需要注意以下几点:
阅读全文
摘要:系统总线服务向总线代理(比如,逻辑处理器)请求来从存储器子系统获取数据或代码。因从存储器获取数据交通而产生的性能影响依赖于工作负载的特征,以及软件对存储器访问优化的程度,在软件代码中实现的位置增强。在附录A中讨论了描绘一个工作负载的存储器交通的一些技术。位置增强的优化准则也在3.6.10小节中讨论。
阅读全文
摘要:为了确保正确的操作,具有多个线程的应用程序使用同步技术。然而,非适当实现的线程同步会严重地减少性能。
阅读全文
摘要:本小节概括了调整多线程应用程序的优化准则。下面列出了五个领域(以重要次序排列):
阅读全文
摘要:在ARMv6T2以及ARMv7架构扩展了Thumb指令集,其中加入了IT指令,进一步增强了代码的紧凑性。
阅读全文
摘要:Intel64及IA-32架构优化指南第8章多核与超线程技术——8.2 编程模型与多线程
阅读全文