操作系统及嵌入式开发
文章平均质量分 71
zenny_chen
GitHub: https://github.com/zenny-chen/
Gitee: https://gitee.com/zenny-chen/
【CPU Dasher X】https://itunes.apple.com/cn/app/cpu-dasherx/id1168527539?l=en&mt=8
《OpenCL异构并行》:https://item.jd.com/11818715.html
《C语言编程魔法书》:https://item.jd.com/12737899067.html
展开
-
基于ARMv5TE架构的软件除法
近来有点悠闲,所以无聊中做了一个基于二进制试商法的无符号整型除法实现。以下函数仅对于ARMv5T架构或更高版本架构的处理器有效。汇编用的是RVCT3.1或更高版本原创 2023-05-10 18:56:10 · 484 阅读 · 0 评论 -
基于Intel处理器的PREFETCH指令的基本使用
以下这个例子很简单,分别有两个双精度浮点类型的二维数组:double[512][1024],共4MB数据,分为512行1024列,每列位8个字节。现在将每对浮点数组的每一行的第一个元素相加,然后将结果存到一个在栈上分配的数组。原创 2023-05-10 17:22:28 · 414 阅读 · 0 评论 -
Linux下使用POSIX Thread作多核多线程并行计算
POSIX线程库根据处理器、操作系统等特性封装了一台线程处理的接口。对于目前基于x86处理器架构的Linux系统来说,它往往会默认地将新创建的一个线程调度到与主线程不同的核中执行,如果这样能更好地平衡负荷的话。原创 2023-05-10 00:45:31 · 246 阅读 · 0 评论 -
ARM处理器架构的Thumb指令集中关于IT指令的使用
在ARMv6T2以及ARMv7架构扩展了Thumb指令集,其中加入了 IT 指令,进一步增强了代码的紧凑性。Thumb中有一个比较有意思的指令——IT,这条指令用于根据指定的条件来执行后面相继的四条指令。当然,Thumb-2中大部分算术逻辑指令都含有带条件执行的特征,不过Thumb-2是32位的。如果你需要更紧凑的指令,那么使用Thumb结合ThumbEE来做带条件的指令执行还是不错的选择。Thumb本身不具备带条件指令执行的特性。原创 2023-05-09 20:00:20 · 1072 阅读 · 0 评论 -
OpenCL使用CL_MEM_USE_HOST_PTR存储器对象属性与存储器映射
随着OpenCL的普及,现在有越来越多的移动设备以及平板、超级本等都支持OpenCL异构计算。而这些设备与桌面计算机、服务器相比而言性能不是占主要因素的,反而能耗更受人关注。因此,这些移动设备上的GPU与CPU基本都是在同一芯片上(SoC),或者GPU就已经成为了处理器的一部分,像Intel Ivy Bridge架构开始的处理器(Intel HD Graphics 4000开始支持OpenCL),AMD APU等。原创 2023-05-09 17:14:10 · 1190 阅读 · 0 评论 -
关于Intel处理器架构中AVX2里Gather特性的说明
在 Intel Haswell 架构里引入了 Gather 特性。它使得CPU可以使用向量索引存储器编址从存储器取非连续的数据元素。这些gather指令引入了一种新的存储器寻址形式,该形式由一个 基地址寄存器(仍然是通用目的寄存器)和通过一个 向量寄存器(XMM 或 YMM)所指定的多个索引构成。数据元素大小支持32位与64位,并且数据类型支持浮点型和整型。原创 2023-05-09 17:02:07 · 1673 阅读 · 0 评论 -
在基于Android以及Jetson TK平台上如何写32位的Thumb-2指令
由于Android以及Jetson TK的编译工具链中的汇编器仍然不支持大部分的32位Thumb-2指令,比如 add.w,因此我们只能通过手工写机器指令码来实现想要的指令。下面我将简单地介绍如何在ARM GCC汇编器中手工去写机器指令码。原创 2023-05-09 00:42:23 · 384 阅读 · 0 评论 -
Linux通过AIO进行异步读文件
信号进行捕获文件读完成事件,当然,这里也可以用 SIGIO。命令选项,因为rt库才包含了系统底层的API。其中,上述代码实现中采用 SIGUSR1。另外,在编译链接时必须添加。原创 2023-05-08 23:54:43 · 356 阅读 · 0 评论 -
Raspberry Pi(树莓派)基于Raspbian操作系统开发OpenGL ES应用
笔者在树莓派上开发OpenGL ES之前,特地从网上做了些功课。当前,无论是Raspberry Pi 3还是Zero,倘若要开启博通的Video Core GPU硬件加速,那么只能使用官方提供的 Raspbian OS系统,并且需要使用存放在 /opt/vc/ 下的私有库。因此,我们只能通过EGL结合树莓派特定的DispManX运行时环境来使用OpenGL ES。原创 2023-04-27 18:28:28 · 1460 阅读 · 0 评论 -
Ubuntu下如何安装GTK+3
如果我们要在Ubuntu系统下使用基于GTK+3开发的App,那么我们无需安装任何东西,直接双击该App即可使用。如果我们要安装GTK+3.0进行开发,可使用以下命令原创 2023-04-27 15:43:20 · 4541 阅读 · 0 评论 -
非临时缓存以及访存对计算性能的思考
我们可以看到,WC(Write Combining)存储器类型由于不被映射到Cache,因此访问速度非常慢。但它仍然可以通过大规模并行访问来减少访存消耗的时间。通过上述代码测试例子,我们可以发现,对于WC的存储区域,使用非临时读与一般正常的读对性能在对此区域的每个数据元素只读一次的情况下几乎没啥区别。但如果对其中某个数据元素访问多次的话,那么使用非临时访问模式就要比普通模式强大很多了!原创 2023-04-23 17:09:15 · 103 阅读 · 0 评论 -
介绍与评测Intel HLE与RTM技术
HLE(即Hardware Lock Elision,硬件锁省略)以及 RTM(即Restricted Transactional Memory,受限的事务性存储器)是Intel在x86微架构中所引入的两条指令集系统,它们均属于 TSX(Transactional Synchronization Extensions,事务性同步扩展)指令集扩展。原创 2023-04-23 17:00:41 · 1413 阅读 · 0 评论 -
C/C++ ABI以及如何对动态连接库加载一个C++成员函数符号
介绍C与C++编程语言的ABI,并描述如何对动态连接库加载一个C++中一个类的成员函数符号原创 2023-03-26 22:35:21 · 1208 阅读 · 0 评论 -
C语言对目标文件、静态库与动态库的连接及外部符号的可见性
用C语言对目标文件、静态库与动态库的连接及外部符号的可见性的详细描述原创 2023-03-25 03:57:28 · 1970 阅读 · 2 评论 -
ARMv8架构在ARM64执行模式下的一些疑难指令的解析
ARMv8架构是ARM第一次引入了64位执行模式。它同x86一样,在扩展到64位的同时又能兼容老的32位执行模式,而32位执行模式与上一个ARMv7架构完全兼容。而在ARM64执行模式下则是一套完全崭新的ISA,其中包含了一些与ARMv7、乃至其他处理器架构不太一样的指令形式,这里将会对它们做一些具体描述。原创 2022-01-06 16:46:44 · 1694 阅读 · 0 评论 -
x86与ARM的浮点控制寄存器
本文将描述x86与ARM两大处理器架构中的浮点控制寄存器以及对某些标志位的置1跟清零的不同行为。x86中的浮点控制寄存器——MXCSRIntel软件开发者指南10.2.3小节(MXCSR Control and Status Register)中详细介绍了MXCSR寄存器每个标志位的布局以及含义。下面对主要的几个控制字段进行讲解:FTZ(比特15)——Flush-To-Zero:该标志控制了对一个SIMD浮点下溢条件的响应。所谓下溢是指,当计算结果的指数部分为全零,而尾数部分不为全零的情况下,该浮原创 2021-12-15 19:07:32 · 3135 阅读 · 0 评论 -
x86-64与arm64对寄存器访问操作的一些特征
本文主要介绍Intel x86-64架构与ARM64架构对通用目的寄存器以及SIMD寄存器的访问操作的情况。比如,哪些寄存器或某些指令对它们低位修改时,高位仍保持不变;而哪些寄存器或某些操作对它们低位修改时,高位会被清零。原创 2021-12-12 05:09:51 · 1773 阅读 · 0 评论 -
关于x86与ARM的状态标志
本博文想着重介绍的是x86与ARM两大处理器架构会有不一样行为的两个标志位——CF和OF,对应于ARM中的C和V两个标志。原创 2021-12-09 16:35:00 · 1609 阅读 · 2 评论 -
x86_64与ARM64的signaling NaN与Quiet NaN,以及浮点数的舍入模式
在我们当前常用的主流桌面级处理器以及移动处理器中都可能会涉及到浮点数的运算。而在计算机中浮点数的表达本身是要遵循IEEE754规范的。在此规范中明确定义了哪些浮点数是规格化的,哪些是非规格化的,哪些属于正负无穷大,哪些又属于我们今天要讨论的非数(NaN)。原创 2021-12-07 05:52:24 · 3785 阅读 · 0 评论 -
关于ARMv8中FMOV指令的8位立即数imm的表示
关于ARMv8在64位模式下的指令 FMOV <Vd>.<T>, #<imm> 或 FMOV <Vd>, #<imm> 指令中,关于后面8位立即数的描述如下:<imm> 是一个带符号的浮点常量,具有3比特的指数位,规格化的4位尾数位,编码为“imm8”,它被表示为abcdefgh。其中a位最高位,表示符号位;bcd为次高位,表示指数;剩余的efgh为尾数位。官方还列出了一个表,描述了这8位立即数能表示的浮点数的绝对值范围:从上表中原创 2021-12-06 01:30:18 · 3012 阅读 · 0 评论 -
云服务器搭建配置以及服务器开发相关
Cloud Server Building and Server Development Relevant Resource Collection云服务器搭建配置以及服务器开发相关有用的参考链接用亚马逊云建代理服务器阿里云建站教程阿里云用户指南【node】阿里云node环境的搭建以及安全组的配置使用SSH密钥对连接Linux实例SSH连接下复制远程Linux服务器文件到本地(这里需要注意的是,应该是在本地机器上执行scp命令,而不是在用SSH连接到的远程服务器上。此外,如果远程服务器需要原创 2021-12-02 14:42:15 · 3369 阅读 · 0 评论 -
x86架构中UCOMISS浮点比较指令所产生的条件码
Intel官方编程指南已经对通用算术比较指令所产生的条件码已经描述得非常详细了,在《Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture》中的附录B。各位也可以通过直接搜索 “condition code” 来搜索到相关内容。但是,此文档对浮点数比较所引发的EFLAGS标志位的变化所对应的条件码几乎没怎么描述,因此本博文将详细列出 UCOMISS 指令所对应可用的条件码。UC原创 2021-11-10 01:04:58 · 3775 阅读 · 0 评论 -
Intel x87 FPU的使用基础
Intel x87 FPU专门用于执行标量浮点计算,可以对单精度浮点(32位)、双精度浮点(64位)以及扩展双精度浮点(80位)进行计算,并顺从IEEE754标准。x87 FPU可以工作在32位兼容模式下以及64位模式下,在这两种下,FPU的数据寄存器的个数都一样,只有8个。对x87 FPU的数据寄存器的访问方式与一般的寄存器有所不同,它是栈式访问。你通过 FLD 指令把外部数据搬到x87 FPU的数据寄存器中时,那么x87 FPU会根据所搬数据的长度(32位、64位、80位)将输入数据分别对待为单精度浮原创 2021-10-30 00:39:50 · 3313 阅读 · 0 评论 -
AT&T汇编针对x86指令集格式
目前很多开源基于x86处理器环境的C/C++,Objective-C/C++编译器所带的汇编器使用AT&T格式。AT&T汇编针对x86指令集与其它处理器(比如ARM、Blackfin等)有所不同,它与Intel自定义的汇编格式有比较大的偏差。GCC的汇编器能支持Intel语法特性,可以参考我前面的博文来获悉如何使用。不过对于最新的LLVM2.0,又开始弃用Intel语法特性了。因此不管怎么说了解A原创 2011-04-14 00:03:00 · 9796 阅读 · 4 评论 -
利用双核机制优化素数生成
以下代码在基于如下环境中编写和测试的:编译器:Apple LLVM2.0(兼容GNU99),Objective-C操作系统:Mac OS X Snow Leopard生成程序:64位测试环境:Mac Mini,CPU:2.00GHz,Intel Core2 Duo P7350; 内存:1GB DDR3;L2 Cache:3MB原创 2011-05-18 23:42:00 · 3720 阅读 · 1 评论 -
我的GitHub文集
服务器相关云服务器搭建配置以及服务器开发相关客户端编程技术相关如何用Android Studio创建一个C语言项目并学习开发C语言和汇编语言我收藏的Android开发技术文集Android中使用Objective-C加GNUstep如何用Android Studio创建一个C语言项目并学习开发C语言和汇编语言在Android Studio 3.0中使用C语言以及汇...原创 2019-04-18 16:19:43 · 767 阅读 · 0 评论 -
Intel系统编程指南第八章——多处理器管理
这个章节选自Intel官方文档,是由本人亲自翻译的。翻译 2010-11-16 21:19:00 · 3782 阅读 · 2 评论 -
教你如何在你的iPhone应用中使用Thumb指令集
教你如何在你的iPhone应用中使用Thumb指令集原创 2010-01-27 02:25:00 · 871 阅读 · 0 评论 -
Intel系统编程指南第十一章——11.11 存储器类型范围寄存器(MTRR)
Intel系统编程指南第十一章——11.11 存储器类型范围寄存器(MTRR)翻译 2011-03-26 15:02:00 · 6654 阅读 · 0 评论 -
Apple A4之NEON技术——颜色混合算法
本人之前在介绍Apple's OpenCL的时候出过一份代码,是用于图像半透明算法的,并且提供了OpenCL版本与x86的SSE版本。 这次,俺将提供ARMv7架构的NEON版本进行对照。通过对比,各位可以清晰地看到ARMv7架构具有比传统的x86拥有更强的计算能力。在处理器拥有相同的流水线特征的情况下,ARMv7能提供更精简,更强大的计算性能。原创 2010-10-06 23:32:00 · 2183 阅读 · 0 评论 -
Apple A4之NEON技术——NEON寄存器架构
Apple A4处理器以及iPhone3GS、iPod Touch3代32GB和64GB版本所使用的三星ARM cortex A-8处理器支持了完整的ARM NEON技术。ARM NEON技术是英国ARM公司在其最新的ARMv7架构中添加的一项128位SIMD技术,能够实现8位到64位不同长度的向量算术逻辑计算。原创 2010-10-06 00:52:00 · 3527 阅读 · 0 评论 -
对多核共享变量的读写操作
在PC处理器中,往往没有像嵌入式系统那样含有一块多核共享的高速缓存(一般是SRAM)。也就是说我们在PC处理器的多核共享变量都是统一被映射到内存(DDR)中去的。那么这就会导致一系列的问题。原创 2010-08-07 10:19:00 · 4976 阅读 · 9 评论 -
如何在iPhone/ipad/iPod Touch中使用NEON技术
NEON技术是ARMv7架构中相对于Atom处理器,很有竞争力的一个技术。它支持了非常丰富的128位向量计算,实现了SIMD技术特征。那么我们如何在Apple的iPhone3GS或更高版本;ipod Touch3代或更高版本以及iPad上使用NEON技术呢?原创 2010-07-19 23:17:00 · 2538 阅读 · 0 评论 -
Grand Central Dispatch简介
Grand Central Dispatch简介原创 2010-04-11 20:57:00 · 1003 阅读 · 0 评论 -
多核、多处理器环境下多线程同步技巧——旋锁以及Lock-Free方法
多核、多处理器环境下多线程同步技巧——旋锁以及Lock-Free方法原创 2010-04-10 23:59:00 · 2160 阅读 · 0 评论 -
微协作者线程具体实现
我曾经介绍过在基于多核操作系统中的一种可能被提供的服务——微线程(详见:http://blog.csdn.net/zenny_chen/archive/2008/07/14/2650389.aspx)。不过,基于其工作机制,我这里想对它的称呼作一下修改,改为“微协作者线程”(Micro Co-worker Thread,MCT)。这个机制主要是想解决嵌入式RTOS中对于两个核在协同工作时,如原创 2009-01-02 23:49:00 · 2101 阅读 · 0 评论 -
多处理器/多核处理器的并行处理方法之——微线程
上面有两篇文章介绍了两类比较典型且简单的并行方法,并且也简单地介绍了它们的性能以及优缺点。这里将再一种介绍方法:通过微线程来同步多个相互协作的并行任务。我们来想像一下下面这个问题:在一个已知长度的巨大线性表(如一维数组)当中要搜索一个元素,并且其中的元素都是唯一的。我们现在所用的处理器有两个核,根据前面介绍的第二种并行方法,我们可以简单地让核A去搜索前一半元素,让核B去搜索后一半元素。原创 2008-07-14 18:56:00 · 4534 阅读 · 1 评论 -
计算一个数组所有元素之和(方法总结)
上面两个帖子均以计算一个给定数组元素之和的例子 来展示多核处理器(多处理器)并行计算的方法。由于只是演示,在基于实际操作系统的场合下,这两种方法都需要有一定的变更。 第一个例子,在计算一个数组元素之和的场合下使用旋锁,在一定程度上有些不合适。由于上锁和解锁所花费的开销可能是从数组中获取相应元素,然后加到指定地点所花费指令周期的2倍,甚至更多。对于一个旋锁,它只能放在非cache存原创 2008-02-14 21:33:00 · 12284 阅读 · 0 评论 -
计算一个数组所有元素之和(无锁方法)
上一贴介绍了比较常见的基于旋锁的并行计算方法。这里将介绍另一种无锁的并行计算方法。两者各有利弊。同样是计算一个数组,在Blackfin561双核DSP中,可以利用两个核对一个数组进行同时计算,其中一个核计算该数组的前50个元素,另一个核计算该数组的后50个元素。下面贴除源代码: // 在共享存储区// shared.cint resultA = 0, resultB = 0;原创 2008-02-14 20:41:00 · 1986 阅读 · 0 评论 -
计算一个数组所有元素之和(基于多处理器的并行开发讨论)
我早些时候上传了 《双核协作完成搜索β》(详细可见我的资源),这个方法是无锁并行计算方法,下面介绍一种更长见的带锁的多处理器计算方法。这个方法若使用像OpenMP这样的编译工具的话会使得代码更好看,更自然一些。 以下代码是我基于Blackfin561双核DSP,VisualDSP++4.5环境下通过测试的。这个方法比无锁更容易实现,不过如果没有OpenMP的话,在对一些临界变量进行上锁时原创 2008-02-13 23:47:00 · 1422 阅读 · 0 评论