2015-12-30 37 views
1

我目前正在通过MIT 6.006课程的在线课程材料获得乐趣。我在问题集#2(找到了here),并对koch雪花问题(问题#1)渐近渲染时间的计算有疑问。Koch雪花渲染时间(以及如何使用龟绘制雪花)

根据这些解决方案,当CPU负责渲染和坐标计算时,渐进渲染时间比CPU和GPU之间的分离过程更快。数学对我来说是有道理的,但是有没有人对此有直觉?

在我看来,CPU仍然需要计算渲染雪花(Theta(4^n)时间)的坐标,然后必须渲染图像。在我看来,这些应该是加法的,而不是乘法的。因为每个三角形/线段较短(对于问题1中的最后两个子问题),所以运行时间减少为Theta((4/3)^ n)或Theta (1)!

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

另外,我玩了一些python乌龟模块的乐趣。下面有一些非常不完美的代码来绘制一个Koch雪花在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) 
+0

我把你的代码和相当多的修改与我的一些补充,我可以发布CodeReview问题与我的版本? (我会给你归属) – Caridorc

+0

当然可以!我不在乎 – lstbl

+0

你可以看到我的这段代码的版本(起初是基于你的) - > http://codereview.stackexchange.com/questions/115453/koch-snowflake-in-python-with-turtle it结果需要相当多的代码来制作动画,就像我想要的那样。 – Caridorc

回答

1

正如对问题集的小五的评论指出,由CPU和GPU所采用的方法是不同的。

仅限CPU(无硬件加速)appproach首先计算需要绘制的内容,然后将其发送到GPU进行绘制。由于我们假定光栅化的成本大于收集线段的成本,因此绘制图像的时间将由GPU控制,其成本将与其实际需要的像素数成比例画。

GPU-CPU(带硬件加速)方法计算所有三角形,大小,然后将它们发送到GPU绘制大三角形,删除中间像素,绘制较小的三角形,删除不需要的像素, 等等。由于绘图需要很长时间,因此GPU必须花费绘图和擦除的时间将占用花费的总时间;因为大多数(渐近地,100%)被绘制的像素将最终被擦除,所花费的总时间将远远大于实际上必须绘制的像素的数量。换句话说,硬件加速场景将大部分工作转移到GPU上,这比CPU要慢得多。如果CPU在GPU正在处理时还有其他事情需要处理,这是可以的;然而,这里并不是这样;所以,CPU正在浪费周期,而GPU正在进行绘制。

+0

这对我来说现在是有意义的:问题表明,当CPU向GPU发送信息时,每个三角形的渲染时间是等效的。但是,当CPU自行处理计算时,渲染时间与三角形的大小成比例地减小。因此,整个计算在时间上大量减少,因为它将常数因子改变为指数减少的因子。非常感谢Alex! – lstbl