StoneTough

一只银杏独傲,悠悠灰鸟单飞

概述

   旅行商问题(Traveling SalesPerson Program, TSP)是一个经典的组合优化问题。给定一个城市列表以及各相邻城市间的旅行代价值(例如物理距离),一个商人从出发城市开始,需要访问并且只访问一次其他所有城市后返回出发地,并要求旅行代价值最小。
   从图论的角度上分析,TSP 问题是 NP 完全问题。实际上,从工程实践的角度上看,它意味着在任何情况下,没有已知算法可以比穷举法更好地解决该问题。但是对于穷举法,随着顶点数的增加,会产生组合爆炸问题。
  虽然如此,目前仍然存在许多近似算法和启发式算法可以使用,例如遗传算法、模拟退火法、蚁群算法、禁忌搜索算法、贪婪算法和神经网络等。

阅读全文 »

概述

Linux kernel 是开源的单内核(Monolithic Kernel)、模块化多任务类Unix操作系统。

在本系列文章中,使用 “Linux” 均代指 “Linux 内核”,如果要指代像 Ubuntu 这样的 Linux 发行版系统,我们使用 “GNU/Linux”。

阅读全文 »

概述

   在 [OpenWrt Introduction] 中我们对 OpenWrt 的特性、目标、架构以及构建系统做了介绍。本文将更注重实践,一步步构建 OpenWrt 使其移植到 树莓派 Model 3B 开发板。虽然我们可以直接下载编译好的固件,但也会失去自己动手做的乐趣。

阅读全文 »

概述

   在并行 MIMD(多指令多数据)的世界中的大多数计算机都可以分为分布式内存型共享内存型两种类型的系统。我们在OpenMP Tutorial 中介绍了后一种,从编程人员的角度看,共享内存型的系统由多个核及可以全局访问的内存组成,在那里任何核可以访问任何内存地址。我们这篇文章介绍前一种系统的并行编程,通过使用一种消息传递(Message-Passing)接口 API。

参考 《Introduction to ParallelProgramming》 by Peter Pacheco.

阅读全文 »

概述

   OpenMP 可以认为是用于共享内存型并行编程 的 API 接口,“MP” 是多处理(”multiprocessing”)的缩写。因此,OpenMP 被用于这样的系统:任何进程或线程都可以潜在地访问所有可用的内存资源。当我们使用 OpenMP 编程时,我们可以将系统看作 CPUs 的集合,这些 CPU 都可以访问内存。

参考 《Introduction to ParallelProgramming》 by Peter Pacheco.

阅读全文 »

概述

   在 LLVM 项目介绍 中我们说 LLVM 的后端代码生成器是由 一系列 Pass 组成的,本篇文章会进一步描述一些重要的 Pass:例如指令选择及其所使用的目标描述语言(.td文件)的细节。如果需要一个新的后端,在大多数情况下,我们都可以通过移植已经存在的后端来完成。

阅读全文 »

概述

   LLVM IR 是基于 SSA 的 中间代码表示格式。它提供安全类型、底层操作、灵活性及完全性(能够自描述”所有”高级语言)。它也是 LLVM 编译框架中各个阶段间通用的代码表示形式。

   LLVM IR 可以使用三种不同的格式:in-memoryon-disk bitcode汇编文本格式。本文就第三种格式的 LLVM IR 做一些总结,更多信息见参考链接。

阅读全文 »

概述

   LLVM 项目包括多个组件,并以核心组件 LLVM 的名字作为项目名。这些组件包括了处理 IR 和生成目标代码的工具、库和头文件。其中 clang 作为C/C++/Object-C的前端,其本质上是使用 LLVM 核心库的驱动程序,这得益于 LLVM 优秀的模块化特性。

参考 《Getting Started with the LLVM System》 From LLVM Document.
参考 《Learn LLVM 12》 by Kai Nacke.

阅读全文 »

链接: https://new.qq.com/rain/a/20220421A04VCX00.html

摩尔定律失效论的讨论与日俱增,2018年,图灵奖获得者 John Hennessey 和 David Patterson 在一次演讲上更是直言,几十年来的 RISC(精简指令集)和 CISC(复杂指令集)孰优孰劣之争可以终结了,新一轮计算机架构的黄金时代已经到来,为此,他们在2019年的 ACM 期刊上发表了一篇文章里作专门论述。

阅读全文 »
0%