对于Crystal-lang应用程序,CRYSTAL_WORKERS默认为4似乎太低了吗?还有其他基准更高吗?

问题描述 投票:0回答:1

我很高兴Crystal-lang现在具有多线程。是否有其他人为Crystal-lang做过一些多线程基准测试?如果是这样,您认为哪种CRYSTAL_WORKERS对基准测试有好处? (是的,我知道,每个基准都是不同的,因此里程可能会有所不同。)

CRYSTAL_WORKERS的默认值为4,但似乎应该更高,至少在更高内核的系统上应该如此。导致4值的基准是否可能与当时使用的内核数或其他因素有关?

我在8核(Intel)和16核(AMD)CPU上进行了一些斐波那契比较,并得到了一些大的峰值和谷值模式(https://github.com/drhuffman12/bench_vs/blob/master/threads/README.md)。 (对于简单的计算/转换,光纤/等的开销似乎不值得;但是对于像Fibinacci calcs这样的计算量较大的代码,具有较高CRYSTAL_WORKERS值和same_thread: false的光纤似乎有潜在的帮助。)

parallel-processing benchmarking crystal-lang fibers
1个回答
1
投票

此问题没有答案。工作者的数量很大程度上取决于应用程序的类型以及运行时系统上资源的可用性/管理。

当然,当您的系统具有4个以上的内核时,您希望有更多的内核才能使用更多可用的计算能力。但是您不一定要饱和所有内核,这取决于系统上正在运行的其他内核。特别是与IO绑定的应用程序并不一定会受益于太多的工作线程。因此设置CRYSTAL_WORKERS=$(nprocs)可能不是一个好主意。

CRYSTAL_WORKERS=4只是一个默认值,因为必须有一个。这是一个非常常见的默认设置,因为a)应该比单线程执行提供合理的改进,并且b)现代CPU通常至少具有4个内核。

[每当将应用程序部署到运行时系统时,都需要考虑什么是适用于此特定环境的适当的工作程序编号,并进行相应的配置。使用其他默认值无济于事。

© www.soinside.com 2019 - 2024. All rights reserved.