gpt4 book ai didi

python - 实现函数的优化和非优化版本的最简洁方法?

转载 作者:行者123 更新时间:2023-12-05 07:06:13 25 4
gpt4 key购买 nike

对于一个大学项目,我想用 python 实现一些代码。稍后,它的一部分应该替换为对 native CUDA 代码的调用。

现在,我正在考虑在我的模块中放置一个模块范围的开关 OPTIMIZED

def set_optimized(b):
# possible check for CUDA device first
OPTIMIZED = b

def my_fun(arg1, arg2):
if OPTIMIZED:
# some c-calls here
return retval
else:
# some python code here
return retval

这个实现有一些不错的特性:

  • 测试用例可以轻松比较优化和未优化版本的结果和性能。
  • 对于每一个优化的函数都有一个非优化的备份。例如,在没有 CUDA 设备的机器上,我禁止切换到优化版本,程序仍然运行而无需更改代码。

另一种选择是将所有函数实现为 class NonOpt 的方法。可以使用 class Opt(NonOpt) 中的优化版本覆盖这些函数。感觉这个选项的样板代码更少,但有一个缺点:实例化和使用类的算法必须知道底层的 opt/nonopt 版本。

有没有规范的方法来做到这一点?或者这是一个坏主意,我忽略了一些基本的东西?

旁注:对我来说,这个问题很笼统。过去我曾无意中遇到过这个问题,当时我想在 Julia 中维护优化和未优化的代码。每当我不得不更改数学时,我可以简单地更改易于阅读的非优化版本。测试用例会告诉我,我是否在更复杂的优化版本中获得了相同的结果。

最佳答案

将另一个选项添加到您的列表并可能“隔离”您的函数是在导入期间使用 if 语句。取决于您的风格,只需确保它们以相同的名称结束并包含相同的函数名称即可。

if OPTIMIZED:
from optimized import mymodule
else:
from non_optimized import mymodule

另一种方法称为猴子修补(在运行时替换导入的方法)。

关于python - 实现函数的优化和非优化版本的最简洁方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62572633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com