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>
<

在学习CUDA教程时,作者发现了一个关于Julia图像生成的错误,涉及cuComplex结构体的初始化。正确做法是在初始化方法前添加`__device__`关键字,以确保在显卡上运行。同时,作者用OpenCV的Mat替换了原始的bitmap,并在CPU生成随机数,之后传输到GPU处理。完整代码示例中包含了CUDA内核函数和主机代码,用于生成和显示Julia集合图像。
最低0.47元/天 解锁文章
145

被折叠的 条评论
为什么被折叠?



