Skip to content

Instantly share code, notes, and snippets.

View jsonlee0x02's full-sized avatar
🎯

Json Lee jsonlee0x02

🎯
  • Co Wheels
  • 05:38 (UTC -04:00)
View GitHub Profile
@jsonlee0x02
jsonlee0x02 / disassemble.md
Created July 11, 2025 06:20 — forked from jarun/disassemble.md
Guide to disassemble

prerequisites

  • Compile the program in gcc with debug symbols enabled (-g)
  • Do NOT strip the binary
  • To generate assembly code using gcc use the -S option: gcc -S hello.c

utilities

objdump

Clang 如何支持 CUDA 程序

前言

编译 CUDA 程序的主要工具是 NVIDIA 提供的闭源编译器 NVCC,但实际上,NVCC 是基于 LLVM 开发的(来源:NVIDIA CUDA Compiler),NVIDIA 也把 NVCC 其中一部分逻辑贡献给了 LLVM 上游,使得 Clang 也可以在 CUDA 的配合下编译 CUDA 程序。这篇博客尝试研究 Clang/LLVM 如何实现 CUDA 程序的编译,主要是 Clang 前端部分,后端部分,也就是从 LLVM IR 到 NVPTX 的这一步还没有进行深入的研究。

https://www.cs.cmu.edu/afs/cs/academic/class/15418-s18/www/lectures/03_progmodels.pdf

Intel ISPC(Intel SPMD Program Compiler)是一个专注于单指令多数据(SIMD)并行的编程语言和编译器,基于 SPMD(Single Program Multiple Data)编程模型。ISPC 提供了高层次的抽象,允许开发者编写看似标量的代码,但在底层会自动向量化运行以实现并行执行。

以下是 ISPC 和 SPMD 编程模型的抽象示例:


ISPC 示例:并行数组加法

@jsonlee0x02
jsonlee0x02 / TaskConcurrencyManifesto.md
Created November 28, 2024 12:55 — forked from lattner/TaskConcurrencyManifesto.md
Swift Concurrency Manifesto

In C, function overloading (using the same function name for different types or parameter lists, as in C++) is not directly supported. However, you can achieve a similar effect using macro functions to redefine function names based on type information. This doesn't provide true overloading in the sense of type-safe interfaces, but it can mimic the behavior in some simple scenarios.

Here’s a common pattern using macros and _Generic to simulate function overloading in C11 and later:

Example of Simulated Function Overloading

#include <stdio.h>

void print_int(int x) {

为了在Clang前端添加一个新的内置数据类型 tcc_inst_t,并将其实际处理成 unsigned long long int 类型:

1. 修改 Clang 的 AST 和 Sema 代码

需要在 Clang 的 Abstract Syntax Tree (AST) 和 Sema (Semantic Analysis) 中引入这个新的类型。

添加 tcc_inst_t 类型标识符

首先,需要在 clang/Basic/TypeSpecifiers.def 中为 tcc_inst_t 添加一个标识符:

TYPE(tcc_inst_t, TCCInst)

在高性能计算(HPC)领域,stencil 是一种常见的计算模式,特别是在数值模拟和科学计算中。 它通常用于求解偏微分方程(PDEs)、图像处理、流体动力学和气候建模等领域。stencil 计算涉及对网格或矩阵中的每个点应用固定模式的邻域运算。

Stencil 计算的基本概念

  1. 网格(Grid)

    • Stencil 计算通常在一个规则的网格(如一维、二维或三维数组)上进行。
    • 每个网格点表示一个计算单元或数据点。
  2. 邻域(Neighborhood)

LLVM 内置类型(Builtin Types)是 LLVM 类型系统的基础。 这些类型被用来表示 LLVM 中支持的各种数据类型。 LLVM IR(Intermediate Representation)使用这些内置类型来定义和操作数据。下面是一些主要的 LLVM 内置类型:

整数类型 (Integer Types)

  • iN: 表示 N 位的整数类型,其中 N 可以是任意正整数。例如:
    • i1: 1 位整数类型(通常表示布尔值)
    • i8: 8 位整数类型(类似于 C 语言中的 char
    • i32: 32 位整数类型(类似于 C 语言中的 int
  • i64: 64 位整数类型(类似于 C 语言中的 long long

同步数据流(Synchronous Dataflow, SDF)和异步数据流(Asynchronous Dataflow, ADF)是两种用于并行计算的模型,主要区别在于它们如何处理数据传输和任务调度。以下是它们的主要区别:

同步数据流 (Synchronous Dataflow, SDF)

特点:

  1. 固定生产和消费速率:

    • 在 SDF 模型中,每个节点(也称为 actor)以固定的速率生产和消费数据。这意味着在每个执行周期内,数据生产者和消费者之间的数据交换量是固定的。
  2. 静态调度: