HPC 矩阵乘法性能基准测试分析
本文分析了英特尔至强CPU和NVIDIA V100 GPU上的矩阵乘法基准测试结果,对比了C++、OpenMP、CUDA、MPI、NVSHMEM及Python框架的计算性能。
>
本文分析了英特尔至强CPU和NVIDIA V100 GPU上的矩阵乘法基准测试结果,对比了C++、OpenMP、CUDA、MPI、NVSHMEM及Python框架的计算性能。
Weak Vertices (弱顶点) 问题描述 在图论中,一个网络的结构强度通常可以通过识别其中的基本形状(如三角形)来分析。三角形能提供结构刚性,是许多应用中常见的母题。这个问题要求我们识别那些不属于任何三角形的顶点。一个顶点 i 被定义为属于一个三角形,如果它有两个不同的邻居 j 和 k,并且 j 和 k 彼此之间也是邻居。我们的任务是找出所有不满足此条件的顶点,问题将其称为“弱顶点”。图以邻接矩阵的形式给出。 我的代码 我的方法是对定义进行直接模拟。对每个顶点,我遍历其所有邻居对,并检查它们之间是否相连。 // 遍历从 0 到 n-1 的每个顶点 `i`,检查它是否是弱顶点。 for(int i=0; i<n; i++) { // 一个标志位,用于追踪顶点 `i` 是否属于任何三角形。 // 我们将其初始化为 true,假设 `i` 是弱顶点,直到找到反证。 bool flag = true; // 遍历 `i` 的所有邻居。 // 外层循环选择第一个邻居 `j`。 for(int j=0; j<siblings[i].size(); j++) { // 内层循环选择第二个邻居 `k`。 // 我们从 j+1 开始,以确保每对邻居只被考虑一次。 for(int k=j+1; k<siblings[i].size(); k++) { // 检查 `i` 的两个邻居,即 `siblings[i][j]` 和 `siblings[i][k]`, // 是否相互连接。 if(graph[siblings[i][j]][siblings[i][k]]) { // 如果它们相连,那么顶点 `i`、`j` 和 `k` 构成一个三角形。 // 因此,顶点 `i` 不是弱顶点。我们将标志位设为 false。 flag = false; // 既然已经找到了一个涉及 `i` 的三角形,我们可以停止对该顶点的检查。 break; } } // 如果标志位已被设为 false,我们也可以跳出外层的邻居循环。 if(!flag) { break; } } // 如果在检查完所有邻居对后,标志位仍然为 true, // 这意味着没有找到涉及 `i` 的三角形。因此,`i` 是一个弱顶点。 if(flag) { cout<<i<<' '; } } 我的解法及其正确性 这个问题要求我们识别给定无向图中所有不属于任何三角形的顶点。如果一个顶点满足这个条件,它就被认为是“弱”的。图的结构通过一个 $n \times n$ 的邻接矩阵给出,其中 $n$ 是顶点的数量。 ...
重构 C++ EnTT 宿主与 Rust WASM 插件架构,将自定义事件替换为 Boost.Signals2,通过 Wasmtime 实现健壮、解耦的 FFI 通信与高级宿主-插件交互。
使用 Wasmtime 和稳定 C FFI,在 C++ Host 中通过 EnTT 管理实体关系,并允许 Rust WebAssembly (WASM) 插件安全交互,利用数据驱动设计克服 WASM 边界限制。
一篇详细的技术指南,介绍如何使用 Wasmtime 运行时在 C++ 宿主应用程序与 Rust WebAssembly 模块之间实现复杂的双向通信、共享内存访问和结构体传递。