cuda教程里有一个Julia图像生成案例,自己用cuda和opencv模仿写了一下,发现结构体cuComplex的一处写法错了。
原文写法是:
struct cuComplex
{
float r;
float i;
cuComplex(float a, float b):r(a), i(b) {}
};
现在正确写法是:
struct cuComplex
{
float r;
float i;
__device__ cuComplex(float a, float b) {
r = a;
i = b;
}
};
不同之处在于初始化方法前要加__device__,指明是要在显卡上运行的,然后要用改进后方法来进行初始化。
此外,bitmap自己改为opencv的Mat来代替,并添加了随机数,实时生成不同效果。这里不建议使用cuda的随机数生成器,太麻烦了。自己投了懒,在cpu上生成随机数后,送到gpu里进行处理。
完整代码如下:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <opencv2/opencv.hpp>
#include <cstdlib>
#include <ctime>
<