Also hier ein bisschen Vorgeplänkel, ich weiß halt nicht ob es wichtig ist:
Ich soll ein Raytracer-Programm schreiben, um dreidimensionale Szenen zu erstellen, wo man irgenwo im Raum ein Auge hat und ein Fenster. Jetzt soll für jeden Pixel des Fensters bezüglich des Auges zurückverfolgt werden, von wo der Lichtstrahl kam. Einmal soll ich das mit einem sequentiellen und dann noch mit einem parallelen Renderer machen.
So sieht der Code des parallelen Renderers aus
Ich wollte jetzt eigentlich nur fragen, ob ich den Executor falsch benutzt habe oder so, weil ich dachte, dass man Multithreading benutzt, um schneller zu arbeiten, weil man halt einiges gleichzeitig machen kann, aber sowohl beim sequentiellen als auch beim parallelen Renderer brauche ich ziemlich genau 4,5 Sekunden - egal ob ich 2 oder 16 Threads nehme. Oder hat Multithreading eher einen anderen Sinn?
Danke schon mal
LG Michi
Ich soll ein Raytracer-Programm schreiben, um dreidimensionale Szenen zu erstellen, wo man irgenwo im Raum ein Auge hat und ein Fenster. Jetzt soll für jeden Pixel des Fensters bezüglich des Auges zurückverfolgt werden, von wo der Lichtstrahl kam. Einmal soll ich das mit einem sequentiellen und dann noch mit einem parallelen Renderer machen.
So sieht der Code des parallelen Renderers aus
Java:
public <T extends CameraRay> void render(SceneObject object,
Camera<T> camera, CameraImage<T> image)
{
Iterator<T> it=camera.iterator();
int allowedThreads=16;
class RendererThread extends Thread
{
public void run()
{
while(it.hasNext())
{
T t=it.next();
Collision col=object.collide(t.getRay());
Material mat=shader.shade(t.getRay(), col);
Color c=mat.getColor();
image.setColor(t,c);
}
interrupt();
}
}
RendererThread[] threads=new RendererThread[allowedThreads];
ExecutorService service=Executors.newFixedThreadPool(allowedThreads);
for(int i=0;i<threads.length;i++)
{
threads[i]=new RendererThread();
service.execute(threads[i]);
}
service.shutdown();
}
Ich wollte jetzt eigentlich nur fragen, ob ich den Executor falsch benutzt habe oder so, weil ich dachte, dass man Multithreading benutzt, um schneller zu arbeiten, weil man halt einiges gleichzeitig machen kann, aber sowohl beim sequentiellen als auch beim parallelen Renderer brauche ich ziemlich genau 4,5 Sekunden - egal ob ich 2 oder 16 Threads nehme. Oder hat Multithreading eher einen anderen Sinn?
Danke schon mal
LG Michi
Zuletzt bearbeitet: