跳过正文

再谈C++原子操作与内存屏障
两年前我写过一篇浅析C++ Atomic,那时我才刚开始接触原子操作不久。直到前不久在群聊里见到群友们又聊起原子操作与同步问题,我又意识到我对这方面的知识也处于一知半解的水平,于是才又下定决心重新研究了一遍,本文是我重新梳理相关知识的总结。
BWoS Work-Stealing Queue简介
华为研究院在OSDI23会议上发表了一篇名为BWoS: Formally Verified Block-based Work Stealing for Parallel Processing的论文,介绍了一种叫做BWoS的Work-Stealing Queue,能够极大地减小Work-Stealing带来的额外开销,本文会简要介绍BWoS的设计思想。
使用C++20协程和io_uring优雅地实现异步IO
距离2020年已经过去很久了,各大编译器对于C++20各项标准的支持也日趋完善,无栈协程也是其中之一,所以我就尝试着拿协程与io_uring实现了一下proactor模式,这篇文章用来记录一下我的设计和想法。
C++的异常处理究竟有多慢?
我们能在各处看到“C++的异常很慢,不要用”这样的言论,不过很少有人告诉你,C++的异常到底有多慢,以及它为什么这么慢。本文会详细介绍C++在抛出以及捕获异常时,代码到底做了什么,以及我们使用C++异常到底付出了多少代价。
GPU通用计算编程模型
这是我阅读General-Purpose Graphics Processor Architecture的一篇笔记,本文对应书中第二章的内容。
从零开始的D3D12渲染框架 第0篇 设计思路
DirectX 12、Vulkan等下一代的渲染API在设计上相比OpenGL等上一代API有了很大的不同,下一代渲染API暴露了更多的GPU相关的细节,这允许程序员进行更加细致的控制的同时也使得API本身变得更加琐碎与难用。这一系列文章用来记录我封装DirectX 12的思路与心得。
浅析C++ Atomic
早在C++11就在STL中引入了原子操作支持了。大部分时候,我使用C++11的atomic仅仅是为了原子地操作特定的一个变量,比如load、fetch_add等等,然而原子操作的memory order还能起到memory barrier的作用。本文会从头介绍C++11原子变量的用法,注意事项以及一些原理。
在光线追踪中避免自相交的方法
这是我阅读 Ray Tracing Gem 的一篇笔记,《避免自相交的快速可靠的方法》是 Ray Tracing Gem 的第六章。这篇博客文章主要是为了记录和解释原文末尾给出的魔法一般的代码。