【问题标题】:Koch snowflake rendering time (and how to draw a snowflake using turtle)Koch 雪花渲染时间(以及如何使用海龟绘制雪花)
【发布时间】:2015-12-31 03:57:03
【问题描述】:

我目前正在研究 MIT 6.006 课程的在线课程材料以获取乐趣。我正在处理问题集#2(找到here)并且对科赫雪花问题(问题#1)的渐近渲染时间的计算有疑问。

根据解决方案,当 CPU 负责渲染和坐标计算时,渐近渲染时间比 CPU 和 GPU 拆分进程更快。数学对我来说很有意义,但有没有人对为什么这是真的有直觉?

在我看来,CPU 仍然需要计算坐标来渲染雪花(Theta(4^n) 时间),然后必须渲染图像。在我看来,这些应该是加法的,而不是乘法的。

但是,解决方案表明这些是相乘的,因此由于每个三角形/线段较短(对于问题 1 中的最后两个子问题),运行时间减少到 Theta((4/3)^n) 或 Theta( 1)!

我不是计算机科学家——这些东西对我来说只是一个有趣的爱好。我真的很感谢你们其中一位天才的回答:)

此外,我在玩 python 乌龟模块时也获得了一些乐趣。这里有一些非常不完美的代码来在 python 中绘制科赫雪花:

import turtle

def snowflake(n,size=200):
    try: turtle.clear()
    except: pass
    turtle.tracer(0,0)
    snowflake_edge(n,size)
    turtle.right(120)
    snowflake_edge(n,size)
    turtle.right(120)
    snowflake_edge(n,size)
    turtle.update()
    turtle.hideturtle()

def snowflake_edge(n,size=200):
    if n==0:
        turtle.forward(size)
    else:
        snowflake_edge(n-1,size/3.0)
        turtle.left(60)
        snowflake_edge(n-1,size/3.0)
        turtle.right(120)
        snowflake_edge(n-1,size/3.0)
        turtle.left(60)
        snowflake_edge(n-1,size/3.0)

【问题讨论】:

  • 我使用了您的代码并对其进行了很多修改,并添加了一些内容,我可以在我的版本中发布 CodeReview 问题吗? (我会给你归因)
  • 没问题!我不在乎
  • 你可以看到我的这段代码的版本(最初基于你的这里)-> codereview.stackexchange.com/questions/115453/… 结果需要相当多的代码来生成我想要的动画。

标签: python big-o asymptotic-complexity


【解决方案1】:

问题集P.5的cmets表示,CPU和GPU采用的方法是不同的。

纯 CPU(无硬件加速)的方法是先计算需要绘制的内容,然后将其发送到 GPU 进行绘制。由于我们假设光栅化的成本大于收集线段的成本,那么绘制图像的时间将由 GPU 控制,其成本将与它实际需要的像素数成正比画。

GPU-CPU(带硬件加速)方法计算所有大小的三角形,然后将它们发送到 GPU 以绘制大三角形,删除中间像素,绘制较小的三角形,删除不需要的像素,等等。由于绘制需要很长时间,那么 GPU 绘制和擦除所花费的时间将主导所花费的总时间;由于大部分(渐近地,100%)被绘制的像素最终都会被擦除,因此所花费的总时间将大大超过实际必须绘制的像素数量。

换句话说:硬件加速场景将大部分工作转储到 GPU 上,这比 CPU 慢得多。如果在 GPU 进行处理时 CPU 有其他事情要处理,这是可以的;但是,这里不是这种情况;因此,在 GPU 进行绘图时,CPU 只是在浪费周期。

【讨论】:

  • 这对我来说很有意义:问题表明当 CPU 向 GPU 发送信息时,每个三角形的渲染时间是相等的。但是,当 CPU 自己负责计算时,渲染时间会与三角形的大小成比例地减少。因此,整个计算在时间上大大减少,因为它将常数因子变为指数递减因子。非常感谢亚历克斯!
猜你喜欢
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
  • 2013-10-08
  • 1970-01-01
  • 2015-01-25
  • 2017-09-03
  • 2022-07-10
  • 2021-07-22
相关资源
最近更新 更多