首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现函数的优化和非优化版本的最干净的方法?

实现函数的优化和非优化版本的最干净的方法?
EN

Stack Overflow用户
提问于 2020-06-25 09:54:39
回答 1查看 62关注 0票数 3

对于一个大学项目,我想在python中实现一些代码。稍后,应该用调用本地CUDA代码来替换它的部分内容。

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

代码语言:javascript
复制
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

这个实现有一些很好的特性:

performance.

  • For每个优化的函数都有一个非优化的备份,
  • 测试用例可以很容易地比较优化版本和非优化版本。例如,在没有CUDA设备的机器上,我禁止切换到优化版本,程序仍然运行而不更改代码。

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

有什么规范的方法吗?或者这是个坏主意,我忽略了一些基本的东西?

对我来说,这个问题相当笼统。过去,当我想在Julia中维护优化的和非优化的代码时,我遇到了这个问题。当我不得不改变数学时,我可以简单地改变易读、非优化的版本。测试案例会告诉我,在更复杂的优化版本中,我是否获得了同样的结果。

EN

回答 1

Stack Overflow用户

发布于 2020-06-25 10:14:07

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

代码语言:javascript
复制
if OPTIMIZED:
    from optimized import mymodule
else:
    from non_optimized import mymodule

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62572633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档