<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Programecauchy的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Programecauchy</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Programecauchy]]></copyright><item><title><![CDATA[MFEM 4.9：ParNCMesh 幽灵层、`ParFiniteElementSpace` 与 `GroupCommunicator` 源码实现分析]]></title><link>https://blog.youkuaiyun.com/Programecauchy/article/details/160829603</link><guid>https://blog.youkuaiyun.com/Programecauchy/article/details/160829603</guid><author>Programecauchy</author><pubDate>Wed, 06 May 2026 17:56:26 +0800</pubDate><description><![CDATA[幽灵单元（ghost elements）ParNCMesh在并行 NC 网格中维护邻接幽灵单元层，但由 NCMesh 生成的Mesh不会把这些单元当作普通体单元枚举；幽灵层主要用于非协调约束与 DOF 归属判断。见中说明（约第 38–47 行）。与直接相关的自由度：NC 情形下明确不把 ghost 单元内部的 bubble DOF计入ngdofs；幽灵层贡献的是幽灵顶点 / 边 / 面上的 DOF，它们被顺序排在本地ndofs之后，并通过等与等阈值比较来区分“真实 vs 幽灵”实体下标。]]></description><category></category></item><item><title><![CDATA[MFEM 4.9：`ParBilinearForm::Assemble`、GPU 内存惰性与 `HypreParMatrix` 构造的源码级分析]]></title><link>https://blog.youkuaiyun.com/Programecauchy/article/details/160764665</link><guid>https://blog.youkuaiyun.com/Programecauchy/article/details/160764665</guid><author>Programecauchy</author><pubDate>Mon, 04 May 2026 12:51:57 +0800</pubDate><description><![CDATA[内部维护了一个全局的内存注册表，通过和的双指针模型实现 host/device 数据同步。Read()Write()方法通过valid_host标志位实现惰性同步（lazy synchronization）。然而，在 MPI 通信中，的共享自由度交换需要访问 host 端数据。请分析：如果在 GPU 后端下，一次后立即调用的构造，valid_host标志的翻转是否会触发一次完整的 device-to-host 回传？这种回传与 MPI 的异步通信模型（MPI_IrecvMPI_Isend）是否存在时序冲突。]]></description><category></category></item><item><title><![CDATA[有限元库MFEM 4.9：MemoryClass内存管理报告]]></title><link>https://blog.youkuaiyun.com/Programecauchy/article/details/160742625</link><guid>https://blog.youkuaiyun.com/Programecauchy/article/details/160742625</guid><author>Programecauchy</author><pubDate>Sun, 03 May 2026 16:58:29 +0800</pubDate><description><![CDATA[*（实现为std::max）描述的是“抽象访问类别”的比较闭包，用于例如算子组合的为新向量选择等；它不会在调用operator*的瞬间触发任何memcpy/CUDAcudaMemcpy类传输。传输发生在 Memory::ReadReadWriteWrite经由 MemoryManager::Read_→GetHostPtr的路径上（见 §4）。在枚举顺序下，HOST * DEVICE = DEVICE。与分别属于 MemoryClass::HOST与 MemoryClass::DEVICE。]]></description><category></category></item><item><title><![CDATA[Open MPI 进程 Communicator 封装与 `MPI_Comm_dup` 实现剖析]]></title><link>https://blog.youkuaiyun.com/Programecauchy/article/details/160311348</link><guid>https://blog.youkuaiyun.com/Programecauchy/article/details/160311348</guid><author>Programecauchy</author><pubDate>Sun, 19 Apr 2026 17:51:03 +0800</pubDate><description><![CDATA[Open MPI 将进程 communicator封装为 C 结构体 ompi_communicator_t，通过OPAL 对象系统分配/析构，并在 ompi_comm_set*→→三阶段完成组与元数据复制全局 CID/索引协商PML 挂接与 coll 模块选择。标准 MPI_Comm_dup入口在 ompi/mpi/c/comm_dup.c，核心逻辑在 ompi/communicator/comm.c与 ompi/communicator/comm_cid.c。本仓库无。]]></description><category></category></item><item><title><![CDATA[Kokkos `m_scratch_locks` 与 `cuda_get_scratch_index` 无锁 Scratch 空间分配深度分析]]></title><link>https://blog.youkuaiyun.com/Programecauchy/article/details/160258115</link><guid>https://blog.youkuaiyun.com/Programecauchy/article/details/160258115</guid><author>Programecauchy</author><pubDate>Fri, 17 Apr 2026 19:40:19 +0800</pubDate><description><![CDATA[在 Kokkos CUDA 后端中，TeamPolicy的 Level-1 scratch 内存（全局内存，非共享内存）需要在多个并发执行的线程块（team）之间进行分配与复用。由于 GPU 上可能有远多于物理 scratch 槽位的并发 team，Kokkos 使用数组配合atomicCAS操作实现了一种无锁（lock-free）的 scratch 空间索引分配机制。修改// 极端竞争：league_size >> wraparound_len// 大量 team。]]></description><category></category></item><item><title><![CDATA[Kokkos CUDA 后端 TeamVectorMDRange parallel_reduce 源码深度分析报告]]></title><link>https://blog.youkuaiyun.com/Programecauchy/article/details/160256114</link><guid>https://blog.youkuaiyun.com/Programecauchy/article/details/160256114</guid><author>Programecauchy</author><pubDate>Fri, 17 Apr 2026 17:19:54 +0800</pubDate><description><![CDATA[是 Kokkos 提供的三种 Team 级多维 Range Policy 之一，用于在 CUDA GPU 上将多维嵌套循环同时映射到thread 并行blockDim.y维度）和vector 并行blockDim.x维度）。当用户在TeamPolicykernel 内部调用递归嵌套展开阶段通过递归处理 N 层嵌套，中间层使用并行迭代，末级层直接调用用户 lambda 并将结果累加到val。vector 归约阶段：在 CUDA/HIP/SYCL 后端，调用，通过 warp shuffle (]]></description><category></category></item><item><title><![CDATA[Kokkos SharedAllocationRecord CUDA 后端实现深度分析报告]]></title><link>https://blog.youkuaiyun.com/Programecauchy/article/details/160221940</link><guid>https://blog.youkuaiyun.com/Programecauchy/article/details/160221940</guid><author>Programecauchy</author><pubDate>Thu, 16 Apr 2026 17:11:35 +0800</pubDate><description><![CDATA[是 Kokkos 内存管理的核心基础设施，负责跟踪所有通过View等高层抽象分配的共享内存。在 CUDA 后端中，它需要处理三种不同的内存空间（CudaSpace），其中CudaSpace是 GPU 设备内存，主机不可直接访问，因此使用了特殊的基类。文件作用核心模板定义：基类、宏、Tracker基类非内联实现：increment/decrement/构造/查找CRTP 基类模板显式实例化实现CUDA 内存空间定义 + 宏特化。]]></description><category></category></item><item><title><![CDATA[SpyGlass 启动报错 undefined symbol: sysvSktSrvMethod 的解决方案]]></title><link>https://blog.youkuaiyun.com/Programecauchy/article/details/157471978</link><guid>https://blog.youkuaiyun.com/Programecauchy/article/details/157471978</guid><author>Programecauchy</author><pubDate>Wed, 28 Jan 2026 15:41:30 +0800</pubDate><description><![CDATA[问题：SpyGlass 启动报。陷阱：直接设置LD_PRELOAD无效，因为会被工具内部的启动脚本unset掉。正解：使用官方预留的环境变量 SPYGLASS_LD_PRELOAD。它专门用于穿透环境清洗机制，将补丁库（libdl.so.2和libnsys.so）安全地传递给核心程序。这样修改既正规又安全，不会影响到同服务器上运行的其他 EDA 工具（如 VCS、Verdi），是完美的解决方案。]]></description><category></category></item><item><title><![CDATA[[故障排查] Linux 下 Gedit 命令无反应？从 strace 日志读懂“僵尸进程”的沉默]]></title><link>https://blog.youkuaiyun.com/Programecauchy/article/details/155983258</link><guid>https://blog.youkuaiyun.com/Programecauchy/article/details/155983258</guid><author>Programecauchy</author><pubDate>Tue, 16 Dec 2025 15:39:53 +0800</pubDate><description><![CDATA[Linux 下很多“静默失败”其实是程序逻辑上的“成功退出”。strace中的意味着程序逻辑走完了。如果没达到预期结果，说明它的逻辑（比如委托给其他进程）出了问题，而不是代码本身的 Crash。诸如 Gedit, Firefox, Chrome, VSCode 等现代 GUI 软件，大多默认采用单实例模式。遇到“打不开且不报错”的情况，90% 都是后台卡死了一个旧进程。]]></description><category></category></item><item><title><![CDATA[Python 与 C Shell (csh) 交互踩坑指南：Environment Modules 消失与 eval 死锁]]></title><link>https://blog.youkuaiyun.com/Programecauchy/article/details/155844987</link><guid>https://blog.youkuaiyun.com/Programecauchy/article/details/155844987</guid><author>Programecauchy</author><pubDate>Fri, 12 Dec 2025 10:09:40 +0800</pubDate><description><![CDATA[调用系统环境工具：尽量寻找底层的二进制入口（如modulecmd），避免依赖 Shell 的交互式特性（如 Alias）。构建交互式胶水脚本：永远记得stdout是给程序读的，stderr是给用户看的。当你的脚本被管道或eval包裹时，请务必使用stderr来打印交互提示。]]></description><category></category></item><item><title><![CDATA[[实战记录] 解决 Docker GUI 程序在无显卡服务器上崩溃的终极指南 (Qt5 + VNC + OpenROAD)]]></title><link>https://blog.youkuaiyun.com/Programecauchy/article/details/155705662</link><guid>https://blog.youkuaiyun.com/Programecauchy/article/details/155705662</guid><author>Programecauchy</author><pubDate>Mon, 08 Dec 2025 14:03:13 +0800</pubDate><description><![CDATA[摘要： 针对Docker GUI容器在RHEL7.9服务器（无GPU/VNC显示）中崩溃的问题，分析发现根源在于X11协议通信、软渲染模式及线程栈限制的差异。通过禁用MIT-SHM共享内存（QT_XCB_NO_MITSHM=1）、强制软件渲染（LIBGL_ALWAYS_SOFTWARE=1）、增大线程栈（--ulimit stack=64MB）及优化Qt绘图参数（如禁用ARGB透明通道），最终实现稳定运行。关键配置解决了远程X11环境下的内存竞争、渲染崩溃及栈溢出问题，适用于无显卡服务器的GUI容器化部署。]]></description><category></category></item><item><title><![CDATA[X11找不到DISPLAY排查之ss -lntp | grep 6000可能没有打开tcp监听]]></title><link>https://blog.youkuaiyun.com/Programecauchy/article/details/155302562</link><guid>https://blog.youkuaiyun.com/Programecauchy/article/details/155302562</guid><author>Programecauchy</author><pubDate>Thu, 27 Nov 2025 10:00:56 +0800</pubDate><description><![CDATA[摘要：X11显示错误&quot;Can't open display:master:0&quot;通常是由于Master节点的XServer未开启TCP监听或防火墙阻挡端口6000。可通过netstat -nolp | grep 6000检查监听状态，若未开启需修改GDM配置或使用SSH隧道转发。防火墙问题可用firewall-cmd临时开放端口。建议优先采用SSH X11转发方案，无需root权限且更安全。验证网络连通性可用nc -v -z master 6000测试。]]></description><category></category></item><item><title><![CDATA[Linux bsub提交远程GUI作业有时候X11转发显示can‘t open DISPLAY解决方案]]></title><link>https://blog.youkuaiyun.com/Programecauchy/article/details/154988060</link><guid>https://blog.youkuaiyun.com/Programecauchy/article/details/154988060</guid><author>Programecauchy</author><pubDate>Tue, 18 Nov 2025 13:55:50 +0800</pubDate><description><![CDATA[运行echo $DISPLAY记下冒号后的数字，然后加上6000得到套接字监听端口然后ss -lntp | grep ‘:6018’，这里表示列出当前系统上所有正在监听 (-l) 的 TCP (-t) 套接字，用数字格式 (-n) 显示它们的地址和端口，并告诉我分别是由哪个进程 (-p) 在使用它们。sudo vim /etc/ssh/sshd_config并且找到X11UseLocalhost 这一行。然后重新登录SSH会话，再次用bsub提交的时候可能要xhost +]]></description><category></category></item></channel></rss>