写点什么

计算机上的高性能计算,你了解多少?

作者:Finovy Cloud
  • 2022 年 9 月 22 日
    广东
  • 本文字数:1291 字

    阅读完需:约 4 分钟

计算机上的高性能计算,你了解多少?

计算在数学上的概念: 计算是一种行为,通过已知量的可能的组合,获得新的量。计算的本质是集合之间的映射。

个人粗浅直白的理解是: 输入一个或多个数据,经过处理,输出一个或多个数据。如 1 + 2 就是一个计算机,输入 2 个数据,输出 1 个数据 3。

那到这里就会有很多疑问,在计算机上:

  • 高性能计算的概念是什么?

  • 全部的普通计算都能转成高性能计算实现么?如果不是的话,那哪些类型的计算可以呢?

  • 我们需要做哪些事情,来实现高性能计算?

  • Android 框架或者是否存在第三方库为我们做了相关的工作

高性能计算的概念

高性能计算:通常使用很多处理器(作为单个机器的一部分)或者某一集群中组织的几台计算机(作为单个计算资源操作)的计算系统和环境。

在移动端,我们可以认为是通过同时启用移动设备的 CPU 和 GPU 构成的异构计算资源,进行协同计算。

计算模型类型

从数据流和指令的角度把计算模型分为 4 类(费林分类法)

  1. 单指令单数据流 (SISD): 并行计算的模型,典型例子就是单核 CPU,所有数据都被一个处理器顺次处理,某一时刻只能使用一个指令。

  2. 单指令多数据流 (SIMD): 多个不同的数据同时被相同的执行、指令集或者算法处理,是 GPU 的计算模型。

  3. 多指令单数据流 (MISD): 在同一个数据流上执行不同的指令。

  4. 多指令多数据流 (MIMD): 是多核 CPU 的计算模型。

本文内容讨论的高性能计算则主要是在 SIMD 的基础上讨论,但这里并不需要严格按照 SIMD,只需要计算流程中的一部分内容符合 SIMD 我们就认为该实现的过程就是一个高性能计算。

知道了计算模型的类型,我们就能知道并不是所有的计算类型都能实现为高性能计算。只有满足以下要求的算法(或者算法中的部分满足,其他部分通过 CPU 协调)才能够比较好的实现为高性能计算。

  1. 每个数据(数据包)都需要经过相同的流程来处理

  2. 数据之间并没有相干性,即某些数据的计算不依赖另外一些数据的计算结果

  3. 数据量庞大


如何实现高性能计算

这里首先了解的是图形显示流程,常用的通用计算也正是基于这个显示流程做修改而实现的。这里以 OpenGL ES 为例,其他的如 Direct3D、CG 的流程大体也相同。


其中的顶点着色器和片元着色器的处理过程,程序猿可以自行编写,且是分别在 GPU 中的顶点处理器和片元处理器(或者统一处理器)计算。

知道了这个流程,我们可以很容易联想到:

  1. 我们的高性能计算的主要算法过程是在 顶点着色器 或 片元着色器 中处理的,一般都是 片元着色器。

  2. 这个流程是用于显示,输入是顶点和纹理等数据,输出是帧缓冲,很明显并不是我们所需要的,因此我们还需要修改流程。

其中的顶点着色器和片元着色器的处理过程,程序猿可以自行编写,且是分别在 GPU 中的顶点处理器和片元处理器(或者统一处理器)计算。

性能提升效果

一个非常简单的图像处理的算法 (因为使用图像暂时效果比较明显,表达也比较容易,所以这里使用的是图像显示的 Demo,并不是说高性能计算只能用于显示相关)

算法基本流程是:

  • 读入一张图片

  • 光顺处理下,即将每个像素点和周围的 8 个像素点的颜色做一个平均,并将均值赋值给中间像素点

  • 将各个像素点置灰,即将每个像素点的 rgb 值求和并取平均值

  • 调整亮度,即将每个像素点的颜色的各通道值乘以 0.9

  • 将像素数组取出设置给 bitmap,并设置给 ImageView

用户头像

Finovy Cloud

关注

一家云基础设备服务供应商。 2022.03.31 加入

云服务器、GPU 服务器、物理主机、IDC 机房租赁等产品及服务。

评论

发布
暂无评论
计算机上的高性能计算,你了解多少?_高性能计算_Finovy Cloud_InfoQ写作社区