【发布时间】:2021-10-23 06:10:01
【问题描述】:
我尝试计算分形图像,并且随着分辨率的增加,计算可能会很长,我想知道是否可以使用超线程来计算最终图像的“图块”,然后得到结果。 但是我所有拆分线程或任务的尝试都以比我在下面显示的方式更慢的计算结束(只是暴力强制 for 循环中的所有值)。
另外,我没有 NVidia GPU,我想知道我可以通过 OpenCL 加快这种计算?
现在我所拥有的只是创建一个具有给定分辨率和每边点数的位图。
Image Generate() {
DateTime n = DateTime.Now;
Console.WriteLine("Generating...");
Image img = new Bitmap(resolution, resolution);
Graphics g = Graphics.FromImage(img);
double step = ((px - mx) / points) * 0.5d;
for (double x = mx; x < px; x += step) {
for (double y = my; y < py; y += step) {
ParseDot(CreateDot(new Complex(x, y)), g);
}
}
Console.WriteLine("Dots parsed (" + (DateTime.Now - n).TotalMilliseconds + ")");
pictureBox1.BackgroundImage = img;
pictureBox1.Refresh();
isComputing = false;
return img;
}
感谢任何提示:)
【问题讨论】:
-
几年前我这样做的时候,我没有计算图像,而是计算了一个二维整数数组,我认为(或者可能是浮点数)。这些行可以并行访问。
-
你的代码的“超线程”版本在哪里?
-
顺便说一句,“固定”意味着系上或固定。 “加速”这个词的意思是加快速度。
标签: c# multithreading opencl fractals hyperthreading