C2ME OpenCL 加速模块
实验性 C2ME 附加组件,通过 OpenCL 提供硬件加速的世界生成。需要基础 C2ME 模组。
强烈建议安装 ScalableLux,因为光照很容易成为瓶颈。
注意
此模组需要 Java 25 才能正常工作,即使在 26.1 之前的版本也是如此。
在原版 worldgen 中,世界生成应与原版完全一致,只有一个例外:
由于原版实现依赖执行顺序,在极少数情况下,生物群系边界可能会偏移一到两个方块。(换句话说,这个模组和 Noisium 及其分支,比如 NoisiumForked 一样“原版”,尽管它们也存在相同问题却声称完全原版一致)
[常见的世界生成非确定性]() 同样适用。
当前只实现了噪声阶段和生物群系阶段。
在 CPU 成为瓶颈时,原版主世界预计可获得 80%+ 的性能提升。具体表现会因种子、数据包等因素而异。
此外,worldgen 现在也会包含 GPU 驱动 bug。请在用于现有世界之前先备份你的世界。
已知某些世界生成模组会灾难性失败。详见 模组兼容性 一节。
平台兼容性矩阵
-
Supported:已知总体可正常工作 -
Partial:已知可以工作,但有较大注意事项 -
Unsupported:已知完全无法工作 -
N/A:不适用,因为该组合不存在。
| 厂商 | 架构 | 驱动 | Windows | Linux | MacOS |
|---|---|---|---|---|---|
| NVIDIA | Maxwell 及之后 | 专有和开源 | Supported | Partial¹ | Unknown |
| NVIDIA | Kepler | 专有 | Unknown | Supported | Unknown |
| NVIDIA | 更老的显卡 | 任意 | Unknown | Unknown | Unknown |
| NVIDIA | 受 nouveau 支持的 GPU | nouveau 上的 Rusticl | N/A | Unknown | N/A |
| Intel | Gen9, Gen9.5⁵ | 官方² | Partial³ | Partial⁴ | Unknown |
| Intel | Gen11, Gen12, Gen12.5⁶ | 官方² | Unsupported¹² | Unsupported¹² | Unknown |
| Intel | Gen12.7, Xe2, Xe3 及之后⁷ | 官方² | Partial³ | Partial⁴ | Unknown |
| Intel | 更老的显卡 | 官方² | Unknown | Unknown | Unknown |
| Intel | 受 iris 支持的 GPU | iris 上的 Rusticl | N/A | Unknown | N/A |
| AMD | RDNA1 及之后¹⁴ | 官方⁸ | Supported⁹ | Supported | Unknown |
| AMD | GCN | 官方¹⁰ | Unsupported¹³ | Unsupported¹³ | Unknown |
| AMD | 受 radeonsi 支持的 GPU | radeonsi 上的 Rusticl | N/A | Partial¹¹ | N/A |
| Qualcomm | 任意 | 官方 | Unsupported¹² | Unsupported¹² | N/A |
| Apple | 任意 | MacOS 驱动 | N/A | N/A | Unsupported¹² |
| Apple | 任意 | asahi 上的 Rusticl | N/A | Unknown | N/A |
- ¹ 驱动已知会在一段时间后卡死。535 LTS 驱动分支似乎工作正常。
- ² Windows 上的官方驱动包。Gen9 和 Gen9.5 需要最新驱动:
Gen9: https://www.intel.com/content/www/us/en/download/762755/intel-6th-gen-processor-graphics-windows.html
Gen9.5: https://www.intel.com/content/www/us/en/download/776137/intel-7th-10th-gen-processor-graphics-windows.html
Linux 上: https://github.com/intel/compute-runtime
- ³ GPU 已知在几乎所有非原版 worldgen 下都会崩溃。实际表现可能不同。
- ⁴ GPU 已知会在某些复杂 worldgen 数据包中崩溃,例如 Terralith。实际表现可能不同。
- ⁵ Gen9 和 Gen9.5 是 6th-9th gen core 处理器,以及 10th gen non-G series core 处理器上的集成显卡
- ⁶ 这里的 Gen11 和 Gen12、Gen12.5 指的是 10th G-series core 处理器、11th-14th gen core 处理器中的集成显卡,以及 Arc DG1、Arc A-series
- ⁷ Gen12.7 指 Meteor Lake 和 Arrow Lake 的集成显卡。
此时它指的是 Core Ultra 100 series 及以上的集成显卡,以及 Battlemage 独立显卡及以上。
- ⁸ Windows 上的官方驱动包。Linux 上的 ROCm 运行时。
- ⁹ 已知 26.5.1 版本驱动会始终崩溃。现有安装升级到 26.6.1+ 也可能崩溃。
如果你在 26.6.1+ 上遇到崩溃,建议先用 DDU 再进行全新安装。
- ¹⁰ Windows 上的官方驱动包。Linux 上的 AMDGPU-Pro 运行时。
- ¹¹ Mesa 26.1.x 分支已知可在 RDNA3/4 上工作。任何硬件组合都可能发生任何情况,包括损坏的 worldgen。实际表现可能不同。
- ¹² 缺少 FP64 支持
- ¹³ 驱动崩溃
- ¹⁴ 不包括 Ryzen 7000 系列和 9000 系列的集成显卡。它们对这项任务来说太慢了。
此处未列出的任何硬件均处于 Unknown 状态。欢迎测试符合下述最低要求的其他硬件配置。
最低硬件要求
- 可工作的 OpenCL 1.2+ 驱动
-
clkhrfp64支持(fp64 支持)
额外加分项
- 可工作的 OpenCL 3.0 驱动
-
clkhrdevice_uuid,用于稳定设备匹配 -
CLQUEUEOUTOFORDEREXECMODE_ENABLE,用于最佳性能。AMD GPU 上不存在 -
clkhrpriorityhints和clkhrthrottlehints,用于队列优先级。已知仅 Intel GPU 上存在 - 非统一 workgroups,Nvidia GPU 和部分 AMD GPU 上不存在
使用 Chunky 的性能预期
对于原版主世界 1200+ cps 目标:
CPU:现代中端桌面处理器(9700X、9800X3D、245K)
GPU:
- Nvidia GTX 1060 或更高
- AMD Radeon RX 6500 XT 或更高
- Intel Arc B570 或更高(Intel 没有更弱的 GPU,所以就这样)
对于原版主世界 2500+ cps 目标:
CPU:现代旗舰桌面处理器(9950X、9950X3D、285K、270K+)
GPU:
- Nvidia GTX 1080 Ti 或更高,RTX 4060 Ti 或更高
- AMD Radeon RX 7600 XT 或更高
- Intel Arc B570 或更高(Intel 仍然没有更弱的 GPU)
使用方法
Windows
- 安装 Fabric
- 安装模组
- 完成
Linux
由于大多数 linux 发行版不会自带 OpenCL,你需要手动安装。
在 Flatpak 中运行是不受支持的配置
Flatpak 目前只支持 Rusticl(以及大概也支持 NVIDIA)作为 OpenCL 运行时,而这在 Linux 上相当粗糙。请参阅上面的兼容性矩阵。
对于 Nvidia 用户
通常你发行版提供的 nvidia 驱动包已经包含 OpenCL 驱动。你应该可以直接使用。如果没有,请查看以下各发行版的特定设置。
基于 Debian 的发行版(例如 Ubuntu)
所有厂商:安装 ocl-icd-opencl-dev
Nvidia:安装 nvidia-driver-full 包
AMD:安装 rocm-opencl-icd 包
Intel:Gen12 及以上安装 intel-opencl-icd,更老的 iGPU 安装 intel-opencl-icd-legacy(不过 Debian 13 上没有,你需要自己编译)
Arch Linux
https://wiki.archlinux.org/title/General-purposecomputingongraphicsprocessing_units#OpenCL
所有厂商:安装 ocl-icd
Nvidia:安装 opencl-nvidia
AMD:安装 rocm-opencl-runtime
Intel:Gen12 及以上安装 intel-compute-runtime,更老的 iGPU 从 AUR 安装 intel-compute-runtime-legacy
基于 Fedora 的发行版
注意:如果你在使用带 AMD GPU 的 Bazzite,你需要改用 Bazzite-DX,而不是按照下面步骤操作。
所有厂商:安装 ocl-icd-devel
Nvidia:https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/fedora.html
AMD:安装 rocm-opencl
Intel:Xe 使用 intel-opencl
使用 Rusticl(非常实验性)
这需要 Mesa 26.1 及以上,并且需要启用 rusticl+fp64。
兼容性
数据包兼容性
此功能保证可与能够在原版中加载的数据包一起工作。例如:
- Stardust Labs 数据包(Terralith、Incedium、...)
- Tectonic
- CliffTree
- ... 以及更多
模组兼容性
大多数非 worldgen 模组都应该可用。
对于 worldgen 模组:
- 重新打包数据包的模组(也就是:如果重命名为仍可作为数据包工作的 .zip),请参考数据包兼容性。
- Tectonic 3.0.20+ 作为模组可用
- 使用自定义密度函数的模组当前不工作。(例如 Enderscape、The Bumblezone)
- 重新实现整套新世界生成器的模组不工作,而且在没有大量工作前可能永远不会支持。(例如 Big Globe)
- 一些其他特殊情况:
- Biomes O' Plenty:会导致生物群系放置完全失败
- TerraBlender:也会导致生物群系放置完全失败
已知问题:
- 着色器编译已知会花费一段时间,具体取决于所使用的数据包。
- 着色器编译时预计会有额外的堆外内存使用。
- 使用 CPU 后端的 PoCL 即使在配置中将 pocl 加入黑名单,也几乎肯定会崩溃。解决方案是直接完全移除它。
- 直接引用
minecraft:beardifier密度函数的数据包,在地形形状上可能会出现轻微错误。这里没有计划修复,因为原版不受影响,而且修复会让 GPU 吞吐量减半。
调优建议,给只想让 worldgen 跑得更快的人
感谢 Discord 上的 skillnoob_。
模组:
- ScalableLux(光照引擎优化,高性能区块生成时的瓶颈)
- Lithium(各类通用优化模组)
- FerriteCore(内存使用改进)
- Structure Layout Optimizer(让结构生成更快)
- zFastNoise(加速 worldgen 中的噪声和表面生成器)
Java/JVM 参数:
-
-XX:+UseCompactObjectHeaders -Dchunky.maxWorkingCount=768(-Dchunky.maxWorkingCount=768仅在你使用 Chunky 时相关)。 - 如果分配超过 16GB 内存,请使用
-XX:+UseZGC,否则使用-XX:+UseG1GC -XX:G1HeapRegionSize=16M或-XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational。
然后在配置文件夹中的 c2me.toml 里,你可以把 globalExecutorParallelism = "default" 选项改成你的线程数,或者稍微低一点。
例如,如果你有一个 16 线程 CPU,就需要把它改成 globalExecutorParallelism = 16。
注意:如果你需要 fps 和 tps 稳定性,你需要为系统其余部分保留一些线程。
你还可以在配置中启用 gcFreeChunkSerializer = true,这可以提升区块生成性能。
常见问题
这会使用多个 GPU 吗?
默认情况下,它会对所有能找到的 OpenCL 设备进行“least-busy”调度。
不过,通常瓶颈其实在 CPU。见下文。
所以除非你只有一堆 GT1030,否则不要指望多 GPU 带来提升。
我的 GPU 几乎没在用,而 CPU 已经拉满了。发生了什么?
在一对合理的 CPU 和 GPU 组合下,你会受 CPU 限制。主要原因是目前只实现了噪声阶段和生物群系阶段。
未来可能会实现其他阶段。
我该如何选择 GPU?
你可以在配置文件里指定白名单和黑名单。设备 UUID 可以在日志中找到。
AMD GPU 在日志里显示为 gfx something,而不是它们的营销名称。
voxy 能和这个一起用吗?
可以。
简而言之,要为 voxy 生成渲染距离,请安装 Chunky,运行 /voxy import current,然后启动一个 chunky 任务。
建议加入他们的 Discord 服务器以获取更多信息。
Distant Horizons 能和这个一起用吗?
简短回答:不建议。请改用 Voxy。
长回答:
DH 太慢了,看不出这里带来的收益。
如果你仍然打算使用 DH,请在 DH 中使用 Internal Server / Full - Save Chunks 模式,这样加速才会生效。
即便如此,你也可能看不到提升,因为 LoD 生成本来就是这条链路里最慢的部分。
我遇到了 OpenCL error [-1001]。这是什么意思?
OpenCL ICD loader 无法找到任何 OpenCL 驱动。请检查你的驱动安装。
建议使用 clinfo 工具快速检查。
这在专用服务器上能用吗?
只要驱动就位,它在专用服务器和单人模式下都可用。
专用服务器仅提供 linux x8664、linux arm64 和 windows x8664 二进制文件。
如果初始化失败,能否回退到普通 worldgen?
默认不能。可以在配置文件中通过 openclAccel.allowIncompatibilityFallback 来实现。
我听说 Vulkan 才是正统图形 API。为什么用 OpenCL?
- 我熟悉它
- 我在 vulkan 里需要无类型指针,而这直到最近 Vulkan 里都没有
这实际上等同于要求 Vulkan 1.4,会大幅缩小硬件兼容范围
- Vulkan 并没有明确规定 FP64 精度,只说“至少达到 FP32 的精度”
- 正确舍入的 fp 除法和 sqrt 在 Vulkan 规范里仍然缺失
为什么不用 CUDA?或者 Rocm?或者 Level0?或者 Metal?
不使用厂商锁定的 API。
我在 AMD RDNA GPU 上,而且在世界生成甚至还没开始前就崩溃了。为什么?
已知 26.5.1 版本驱动会始终崩溃。升级到 26.6.1 的现有安装也可能崩溃。
如果你在 26.6.1 上遇到崩溃,建议先用 DDU 再进行全新驱动安装。
参见平台兼容性矩阵中的脚注 9。