我是一个软件包的首席开发人员,该软件包的性能是最重要的。当某些设施可用时,所述软件的性能可以大大提高,例如:
- 软件库(例如 BLAS、LAPACK、...)
- 支持 SSE、MMX、...
我处于一种情况,我发现很难决定最明智的方法。我看待事物的方式,这些是我的选择:
- 确保可移植性和正确的交叉编译:通过使用可选的可用设施并强制用户使用 -enable-X 标志等显式启用它们。这对于可移植性是必要的,因为构建平台上可用的设施可能不存在于目标平台上. PRO:可移植性和交叉编译工作正常。缺点:新手用户会忘记优化并因此遭受性能损失。
- 让新手用户的生活更轻松:在配置阶段自动检查库和功能(如 SSE)的可用性,然后使用所有可用的工具。PRO:用户无需烦躁即可获得软件的优化版本。CON:不保证可移植性(例如,当主机有 SSE 而目标没有时,交叉编译会被破坏。我不希望我的用户交叉编译,但死亡和税收是生活中唯一的确定性。)。
我目前倾向于选项 2,因为这是我希望大多数用户欣赏的。此外,在默认行为方面迎合新手可能更有意义。我知道这在可移植性方面构成了大罪。大家觉得最明智的做法是什么?
有什么我不知道的解决方案可以解决我的困境吗?