gpt4 book ai didi

opencl - MandelBrot 设置使用 openCL

转载 作者:行者123 更新时间:2023-12-04 05:02:16 25 4
gpt4 key购买 nike

尝试使用与我在使用 TBB(线程构建块)运行时使用的代码相同的代码(有点)。

我对 OpenCL 没有太多经验,但我认为大部分主要代码是正确的。我相信错误在 .cl文件,它在那里进行数学运算。

这是我在 TBB 中的 mandelbrot 代码:

Mandelbrot TBB



这是我在 OpenCL 中的代码

Mandelbrot OpenCL



任何帮助将不胜感激。

最佳答案

我更改了内核中的代码,它运行良好。我的新内核代码如下:

// voronoi kernels

//
// local memory version
//
kernel void voronoiL(write_only image2d_t outputImage)
{
// get id of element in array
int x = get_global_id(0);
int y = get_global_id(1);
int w = get_global_size(0);
int h = get_global_size(1);

float4 result = (float4)(0.0f,0.0f,0.0f,1.0f);
float MinRe = -2.0f;
float MaxRe = 1.0f;
float MinIm = -1.5f;
float MaxIm = MinIm+(MaxRe-MinRe)*h/w;
float Re_factor = (MaxRe-MinRe)/(w-1);
float Im_factor = (MaxIm-MinIm)/(h-1);
float MaxIterations = 50;


//C imaginary
float c_im = MaxIm - y*Im_factor;

//C real
float c_re = MinRe + x*Re_factor;

//Z real
float Z_re = c_re, Z_im = c_im;

bool isInside = true;
bool col2 = false;
bool col3 = false;
int iteration =0;

for(int n=0; n<MaxIterations; n++)
{
// Z - real and imaginary
float Z_re2 = Z_re*Z_re, Z_im2 = Z_im*Z_im;

//if Z real squared plus Z imaginary squared is greater than c squared
if(Z_re2 + Z_im2 > 4)
{
if(n >= 0 && n <= (MaxIterations/2-1))
{
col2 = true;
isInside = false;
break;
}
else if(n >= MaxIterations/2 && n <= MaxIterations-1)
{
col3 = true;
isInside = false;
break;
}
}
Z_im = 2*Z_re*Z_im + c_im;
Z_re = Z_re2 - Z_im2 + c_re;
iteration++;
}
if(col2)
{
result = (float4)(iteration*0.05f,0.0f, 0.0f, 1.0f);
}
else if(col3)
{
result = (float4)(255, iteration*0.05f, iteration*0.05f, 1.0f);
}
else if(isInside)
{
result = (float4)(0.0f, 0.0f, 0.0f, 1.0f);
}


write_imagef(outputImage, (int2)(x, y), result);
}

你也可以在这里找到它:

https://docs.google.com/file/d/0B6DBARvnB__iUjNSTWJubFhUSDA/edit

关于opencl - MandelBrot 设置使用 openCL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15999758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com