我目前正在阅读麻省理工学院6.006课程的在线课程材料,以获得乐趣。我遇到问题集#2(找到here)并对koch雪花问题(问题#1)的渐近渲染时间的计算有疑问。
根据解决方案,当CPU负责渲染和坐标计算时,渐近渲染时间比在CPU和GPU之间分割进程的速度快。数学对我来说很有意义,但是有没有人对这为什么是真的有直觉?
在我看来,CPU仍然需要计算坐标来渲染雪花(Theta(4 ^ n)时间),然后必须渲染图像。在我看来,这些应该是加法的,而不是乘法的。
然而,解决方案表明它们是乘法的,因此每个三角形/线段都较短(对于问题1中的最后两个子问题),运行时间减少到Theta((4/3)^ n)或Theta( 1)!
我不是计算机科学家 - 这对我来说只是一个有趣的爱好。我非常感谢你们其中一位天才的答案:)
此外,我在玩python龟模块时也有一些乐趣。下面是一些非常不完美的代码,用于在python中绘制koch雪花:
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)
答案 0 :(得分:1)
如问题集P.5的评论所示,CPU和GPU采用的方法不同。
仅CPU(没有硬件加速)appproach是首先计算需要绘制的内容,然后将其发送到GPU进行绘制。由于我们假设栅格化的成本大于收集线段的成本,因此绘制图像的时间将由GPU控制,其成本将与其实际拥有的像素数成比例。绘制。
GPU-CPU(带硬件加速)方法计算所有三角形,无论大小,然后将它们发送到GPU绘制大三角形,删除中间像素,绘制较小的三角形,删除不需要的像素,等等。由于绘图需要很长时间,因此GPU必须花费绘图和擦除的时间将占据花费的总时间;由于大多数(渐近地,100%)被绘制的像素最终将被擦除,因此所花费的总时间将远远超过实际必须绘制的像素数。
换句话说:硬件加速方案将大部分工作转储到GPU上,这比CPU慢得多。如果CPU在进行处理时还有其他工作要做,这是可以的。但是,这不是这种情况;所以,CPU只是在GPU正在绘制时浪费周期。