【问题标题】:Chess engine in c or java, performance difference?c或java中的国际象棋引擎,性能差异?
【发布时间】:2023-04-03 18:38:02
【问题描述】:

我有一个基于 iOS 设备上 Fruit 引擎的简单国际象棋应用程序。现在我想为Android做一个国际象棋应用程序。看来我有以下选择:

  • 将 c Fruit 引擎移植到 Java
  • 在 Java 中使用另一个国际象棋引擎
  • 在 Java 中将 Android NDK 用于 c 国际象棋引擎和 UI

我的问题是,假设使用相同的算法,如果将国际象棋引擎从 c 移植到 Java,性能会下降吗?

我可以承受 5% 或更少的差异(在同一设备上运行的 c 和 java 引擎之间)。谢谢。

【问题讨论】:

  • 性能差异(如果有的话)将很大程度上取决于代码的细节,无法为这个问题提供任何有意义的答案。
  • 不仅是代码的细节,还有用户硬件设备的规格。有几款 iOS 设备不到所有 Android 设备的 2%。
  • 我想知道两种语言的相关实现在哪里比较,例如最小最大树搜索、Zobrist 哈希等。
  • @MarsAtomic 我说的是在同一个 Android 设备上运行的两个程序(一个在 c 中,一个在 java 中)
  • “移植引擎”或“按原样使用引擎”嗯..我知道我会选择哪个。只是说。如果有一些仅限 Java 的选项,我会先尝试它们,如果它们足够,只需使用它们以避免创建 NDK wrapper - 根据需要,您可以编写一个小的外观,以便以后可以“不那么痛苦地”更改引擎。 在任何情况下,我都不会将引擎移植到其他语言。

标签: java android c chess


【解决方案1】:

如果国际象棋引擎从 c 移植到 Java,性能会下降吗?

会有降级。多少取决于您的低级 Java 编程技能有多好。如果你尽可能地翻译代码,它会非常相似。

我可以承受 5% 或更少的差价。

如果是 10%,它会给你带来多大的改变?如果您等待几个月,手机型号之间的性能差异可能会超过 30%,无论如何手机会比这快得多。

【讨论】:

  • 我认为手机上的 C/C-In-Java 差异比桌面上的 C/C-In-Java 差异更大(这是我见过的所有基准测试)。 . 虽然我期望相同的复杂性界限,但由于移动设备上不太复杂的 JIT(或缺乏),我也期望更高的常数因子。因此,如果应该支持的模糊断言是移动 (Android) Java/Dalvik 实现的经验证据,我相信“如果您尽可能接近地翻译代码,它将非常相似”。
  • 另外,虽然我喜欢关于设备性能变化(和改进)的观点,但我认为它错过了基本的(如果不是最初可能被误导〜5%)“要求” - 它现在需要在可接受的范围内运行,在任何特定设备上运行速度慢 X% 可能是良好体验和糟糕体验之间的区别。也就是说,它确实是关于它确实如何运行(在它所针对的特定设备/硬件上),而不管“损失”的任何百分比性能如何。测试将显示哪些方法可以达到目标。
猜你喜欢
  • 2012-03-22
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
  • 2022-01-11
  • 2022-01-05
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多