自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(190)
  • 资源 (4)
  • 收藏
  • 关注

原创 基于ARMv5TE架构的软件除法

近来有点悠闲,所以无聊中做了一个基于二进制试商法的无符号整型除法实现。以下函数仅对于ARMv5T架构或更高版本架构的处理器有效。汇编用的是RVCT3.1或更高版本

2023-05-10 18:56:10 52

原创 Quartz2D之Path使用初步

我们直接看以下代码

2023-05-10 18:27:36 478

原创 Quartz2D之渐变使用初步

上一篇我们谈到如何使用 Quartz2D 中的 Path 实现各种图形的绘制。本篇我们介绍 Quartz2D 提供的两种渐变填充方法。第一种是使用 Quartz 自带的 Gradient 填充方法;第二种是使用自定义的着色器。

2023-05-10 18:03:56 502

原创 Quartz2D之着色器使用初步

上一讲谈到了如何使用 CGGradient 来做线性渐变效果。那么本讲将介绍如何使用 CGShader 来做线性渐变效果。

2023-05-10 17:33:01 13

原创 CoreAnimation之制作阴影

我们可以利用 QuartzCore 中的 CoreAnimation 库来制作视图的阴影效果。

2023-05-10 17:27:41 838

原创 基于Intel处理器的PREFETCH指令的基本使用

以下这个例子很简单,分别有两个双精度浮点类型的二维数组:double[512][1024],共4MB数据,分为512行1024列,每列位8个字节。现在将每对浮点数组的每一行的第一个元素相加,然后将结果存到一个在栈上分配的数组。

2023-05-10 17:22:28 10

原创 Core Animation+Quartz2D使用CALayer.mask来裁减图形

我们在做iOS应用时会有这么个需求:想对一个UIView视图做部分裁减,使得被裁减部分显示其子视图部分,即其底图。我们一般可以通过让美术人员做一个相同尺寸的图,将裁减部分做成透明即可。另一种可以通过程序来做。下面我将介绍如何通过Cocoa Framework中的QuartzCore Framework来实现这个效果。

2023-05-10 00:59:27 21

原创 macOS下使用OpenGL做离屏渲染

有时,我们想通过GPU做一些视频、图像处理,而处理的结果不需要显示在显示器上,而是直接交给主存,这时候我们可以通过OpenGL的离屏渲染(Offscreen Rendering)来实现。

2023-05-10 00:54:10 536

原创 Linux下使用POSIX Thread作多核多线程并行计算

POSIX线程库根据处理器、操作系统等特性封装了一台线程处理的接口。对于目前基于x86处理器架构的Linux系统来说,它往往会默认地将新创建的一个线程调度到与主线程不同的核中执行,如果这样能更好地平衡负荷的话。

2023-05-10 00:45:31 26

原创 解释水波特效处理

在计算机图形中的许多特效中,水特效是一种完全抓取观众注意的效果。它模拟了水在被外界干扰时的行为。这篇文章由两部分组成。第一部分介绍了水的行为如何被模拟。第二部分描述了当光照射到透明的表面时,你可以如何计算光的折射。它们一起为你提供了对一个抓取视线模拟程序的知识。

2023-05-10 00:22:45 588

原创 ARM处理器架构的Thumb指令集中关于IT指令的使用

在ARMv6T2以及ARMv7架构扩展了Thumb指令集,其中加入了 IT 指令,进一步增强了代码的紧凑性。Thumb中有一个比较有意思的指令——IT,这条指令用于根据指定的条件来执行后面相继的四条指令。当然,Thumb-2中大部分算术逻辑指令都含有带条件执行的特征,不过Thumb-2是32位的。如果你需要更紧凑的指令,那么使用Thumb结合ThumbEE来做带条件的指令执行还是不错的选择。Thumb本身不具备带条件指令执行的特性。

2023-05-09 20:00:20 575

原创 OpenCL如何获取最小线程并行粒度

由于OpenCL是为各类处理器设备而打造的开发标准的计算语言。因此跟CUDA不太一样的是,其对设备特征查询的项更上层,而没有提供一些更为底层的特征查询。比如,你用OpenCL的设备查询API只能获取最大work group size,但无法获取到最小线程并行粒度(或称为 分支粒度)。

2023-05-09 19:47:54 735

原创 通过OpenCL内核代码猜测设备寄存器个数

在OpenCL标准中,没有给出查看计算设备一共有多少寄存器,至少能分配给每个work-item多少寄存器使用的特征查询。而由于一个段内核代码是否因寄存器紧缺而导致性能严重下降也是一个比较重要的因素,因此我这边提供一个比较基本的方法来猜测当前计算设备至少能为每个work-item分配多少可用的寄存器。

2023-05-09 18:56:27 876

原创 OpenCL如何判定一个work-group的最大Local Memory大小

最近有不少朋友提及到如何能在运行时获悉一个GPU的最大local memory的尺寸。由于OpenCL对各类处理器开放,因此不同处理器所拥有的local memory大小也各不相同。即便是GPU,甚至同一家公司出的GPU,不同的架构,其Local Memory的尺寸也各不相同。一般来说,现在随着制程工艺的不断发展,Local Memory也逐步变大。

2023-05-09 18:50:26 15

原创 OpenCL多次循环执行内核的一个简单样例

最近有不少朋友在多次循环执行OpenCL内核程序的时候碰到一些问题。由于对OpenCL初学者而言可能比较普遍,因此我这里给出一个清晰简单的demo来掩饰如何简单又高效地执行循环执行OpenCL内核。

2023-05-09 18:45:29 933

原创 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 790

原创 关于Intel处理器架构中AVX2里Gather特性的说明

在 Intel Haswell 架构里引入了 Gather 特性。它使得CPU可以使用向量索引存储器编址从存储器取非连续的数据元素。这些gather指令引入了一种新的存储器寻址形式,该形式由一个 基地址寄存器(仍然是通用目的寄存器)和通过一个 向量寄存器(XMM 或 YMM)所指定的多个索引构成。数据元素大小支持32位与64位,并且数据类型支持浮点型和整型。

2023-05-09 17:02:07 873

原创 在基于Android以及Jetson TK平台上如何写32位的Thumb-2指令

由于Android以及Jetson TK的编译工具链中的汇编器仍然不支持大部分的32位Thumb-2指令,比如 add.w,因此我们只能通过手工写机器指令码来实现想要的指令。下面我将简单地介绍如何在ARM GCC汇编器中手工去写机器指令码。

2023-05-09 00:42:23 268

原创 macOS的CAOpenGLLayer中如何启用OpenGL3.2 core profile

在macOS的openGL编程中,我们有时为了想在自己的OpenGL图层上再加些自己的某些图层,必须得用 CAOpenGLLayer 而不是 NSOpenGLView,由于在 NSOpenGLView 上添加任何子视图都会变得无效。

2023-05-09 00:21:17 1224

原创 iOS如何将RGB565的原始图像数据转为UIImage对象

我们在做一些图像处理时,往往会涉及到RGB565这种图像数据格式。由于其每个像素仅占2个字节,对于不需要像素透明度的情况下使用RGB565既能基本能保证图像的色彩,又能降低图像数据尺寸,节省带宽。因此,RGB565将会是一种常用的比较经济的图像处理的格式。

2023-05-09 00:12:22 28

原创 Linux通过AIO进行异步读文件

信号进行捕获文件读完成事件,当然,这里也可以用 SIGIO。命令选项,因为rt库才包含了系统底层的API。其中,上述代码实现中采用 SIGUSR1。另外,在编译链接时必须添加。

2023-05-08 23:54:43 15

原创 nVidia GPGPU vs AMD Radeon HD Graphics执行模式对比

大家做高性能计算的朋友,想必对CPU的执行模式已经非常熟悉了吧。当代高级些的CPU一般采用超标量流水线,使得毗邻几条相互独立的指令能够并行执行——这称为指令集并行(ILP,Instruction-Level Parallelism);而像x86引入的SSE(Streaming SIMD Extension)、AVX(Advanced Vector Extension),以及ARM的NEON技术都属于数据级并行(Data-Level Parallelism)。而GPGPU的执行与CPU比起来还是有不少差异的

2023-05-08 23:48:58 1446

原创 OpenGL 4.0的Tessellation Shader(细分曲面着色器)

它是由ATI在2001年率先设计出来的。

2023-05-08 22:47:37 1380

原创 Cocoa Framework中GB2312与UTF16编码之间的相互转换

上述代码片段中,dummyStr仅用于测试,这个对象最后结果为空。

2023-05-08 20:54:15 6

原创 OpenGL ES3使用MSAA(多重采样抗锯齿)的方法

昨晚花费了我2个多小时的时间终于把OpenGL ES3.0中的MSAA给搞定了。

2023-05-08 20:48:01 649

原创 第一部分:IBM量子体验

在计算过程中的任意一点,经典计算机的状态由其所有比特的状态所决定,这样一个具有n个比特位的计算机可以存在2n个可能的状态,范围从00…一个双量子位系统可以存在于一个乘积状态,诸如 |00⟩ 或 |0+⟩,但也可以存在于一个纠缠状态 (|00⟩ + |11⟩) / √2,在这种情况下,任一量子位都不具有一个明确的状态,即便两个组合在一起会具有。在 CNOT 门的实心点处的量子位控制了在⊕端门处的量子位的状态的反(因此受控的 NOT,也被称为 CNOT)?与此同时,量子计算机的能力在于其丰富地多的全部状态。

2023-05-08 19:36:21 508

原创 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 364

原创 Ubuntu下使用GLUT与GDK将图片文件加载到纹理单元

在Linux系统中有不少开源好用的工具库用来读取图片文件,识别其格式,然后以RGB等原生像素格式存储到存储器中。比如libpng就是其中之一。不过我们这里使用更方便好用、更通用的GTK+库中所包含的GDK工具库对指定的图片文件进行读取,然后读取其内部原生像素数据,最后映射到纹理单元上。

2023-04-27 18:22:46 24

原创 Ubuntu下GTK与GLUT的共同使用

今天不知神马原因,一下子突发奇想,试想了一下GTK与GLUT是否可以相互协作,经过初步测试,这还算是可行的。在以下demo中,我们可以点击由GTK创建的按钮然后弹出用GLUT创建的窗口。由于GTK与GLUT是两个完全独立的库,两者均含有各自的消息循环(也就是通常所说的runloop),因此当我们点击按钮弹出GLUT窗口的时候,其实相应的都是GLUT的消息循环,GTK此时处于冻结状态。只有当我们将GLUT窗口关闭之后,GTK窗口才会被再次激活,侦听消息。

2023-04-27 18:20:12 18

原创 Ubuntu下使用GLUT编写OpenGL程序

在Linux下以及Windows操作系统下编写OpenGL程序已经变得非常便捷了,我们只需安装freeglut工具包即可。老旧的GLUT已经废弃了,现在如果我们要在一些类Unix系统上编写OpenGL程序的话需要安装FreeGLUT。

2023-04-27 18:17:12 351

原创 Ubuntu下如何安装GTK+3

如果我们要在Ubuntu系统下使用基于GTK+3开发的App,那么我们无需安装任何东西,直接双击该App即可使用。如果我们要安装GTK+3.0进行开发,可使用以下命令

2023-04-27 15:43:20 717

原创 如何使用OpenGL来绘制一个圆角矩形

iOS系统的流行带来了一阵圆角矩形的热风。许多设计狮与产品汪都对圆角矩形比较感冒,那作为程序猿该如何应付呢?幸好,当前无论是iOS还是Android系统,系统框架库都带了一些API能让我们比较便利地实现圆角矩形的功能。这里,笔者将利用OpenGL更底层的图形API来实现“磨圆”一个矩形的四个角,使得我们对圆角矩形有一个更理性的认识。

2023-04-24 00:49:56 405

原创 OpenGL与Metal API的Point Sprite

我们在实际用OpenGL等3D图形渲染API时点图元往往用得不多,而在粒子系统中可能也是用一个正方形来绘制一单个粒子。不过在当前大部分3D图形渲染API中都能支持用点图元来绘制一个具有纹理贴图的粒子

2023-04-24 00:39:15 625

原创 探究GPU同时做渲染与通用计算的并行性

在10年前,随着CUDA与OpenCL的纷纷出炉,GPGPU也着实热了一把。而现今,不少公司更是将GPGPU作为挖矿、搞机器学习的计算利器。于是乎,有许多言论声称GPU将很快取代CPU!那么现代化的GPGPU是否具有如此强大的威力甚至于能取代CPU呢?本文将会以GPGPU的任务级并行能力来看看这些尖端GPU的性能。

2023-04-24 00:19:25 457

原创 Vulkan开启特征(feature)的正确姿势

当我们在用Vulkan写一些应用时,无论是用其图形流水线还是计算流水线,或多或少需要用到一些当前设备的Vulkan核心版本所不具备的扩展特征,那么我们如何能既安全又方便地开启一些我们需要的特征呢?本文将给各位进行介绍。

2023-04-23 17:23:26 564

原创 Vulkan Programming Guide第11章——同步

Vulkan被设计为在一个设备上含有多个队列中进行异步、并行地运行作业,并且与主机一起协同,以保持物理资源始终在使用状态且繁忙。在你应用程序中各种不同的点处(时间与代码位置),你需要保持主机与设备各种不同部分的同步状态。在本章,我们将为此目的会讨论对Vulkan应用程序可用的几种同步原语。

2023-04-23 17:20:44 534

原创 OpenCL与Metal API下如何合理地安排线程组大小

我们玩过OpenCL的朋友都知道,我们可以通过`clGetDeviceInfo`接口来查询当前计算设备的几乎所有属性,包括当前计算单元的个数、最大工作组大小、本地存储器大小等等。但这些属性值都是基于当前计算设备的最大可支持能力,而不是当前内核程序执行上下文。

2023-04-23 17:11:41 551

原创 非临时缓存以及访存对计算性能的思考

我们可以看到,WC(Write Combining)存储器类型由于不被映射到Cache,因此访问速度非常慢。但它仍然可以通过大规模并行访问来减少访存消耗的时间。通过上述代码测试例子,我们可以发现,对于WC的存储区域,使用非临时读与一般正常的读对性能在对此区域的每个数据元素只读一次的情况下几乎没啥区别。但如果对其中某个数据元素访问多次的话,那么使用非临时访问模式就要比普通模式强大很多了!

2023-04-23 17:09:15 17

原创 介绍与评测Intel HLE与RTM技术

HLE(即Hardware Lock Elision,硬件锁省略)以及 RTM(即Restricted Transactional Memory,受限的事务性存储器)是Intel在x86微架构中所引入的两条指令集系统,它们均属于 TSX(Transactional Synchronization Extensions,事务性同步扩展)指令集扩展。

2023-04-23 17:00:41 673

原创 C11中的通用字符名(Universal Character Names)

C11标准中引入了通用字符名(Universal Character Names)这个概念。其实,所为的通用字符名也就是我们俗称的Unicode。C11中采用两种方法来表示通用字符名,第一种是 \u 后面加正好四位十六进制数,不能多也不能少。第二种则是 \U 后面加正好八位十六进制数,不能多也不能少。

2023-04-23 16:23:57 16

OpenGL4.1 Tessellation Shader使用demo(基于macOS)

基于macOS平台,使用Xcode构建的OpenGL4.1 Tessellation Shader使用demo。

2023-05-08

OpenCL的Objective-C接口

使用Objective-C对OpenCL接口的封装。请在Xcode 8或更高版本上进行编译构建。

2016-11-26

初窥OpenGL Shaders

简单的基于OpenGL 2.1的OpenGL Shading Languange的使用(基于macOS)

2016-10-28

用于Swift的顺从C11标准的原子操作

各位只需要将CLib4Swift.h、CLib4Swift.c以及SwiftAtomic.swift三个文件放入到自己项目工程中即可,然后还需要将"CLib4Swift.h"头文件include到你的brdige头文件中。 具体使用非常简单,直接看main.swift中的测试代码即可。

2016-09-25

MetalTessellation——基于macOS 10.12

基于macOS 10.12中Metal API新引入的Tessellation新特性。整个工程必须至少使用Xcode 8才能使用,并且请确保您的Mac已经升级到了macOS 10.12 Sierra

2016-09-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除