在visual studio上配置cuda运行环境,并实现Julia集

部署运行你感兴趣的模型镜像

之前在vscode上配置好环境后,发现cl编译器的错误提示总是出现乱码,经过各种尝试后无果,于是索性换回vs。

#cs新手,如有错误烦请大佬们指正!!!

一.配置vs环境

1.新建项目

2.添加include文件

右键---属性---VC++目录---包含目录---添加cuda的include

3.添加lib文件

同一属性页中

编译库目录

4.添加lib的链接

同一属性页下---链接器---常规---附加依赖项

5.生成依赖项

勾选cuda选项

注:如果这里没有cuda选项,则尝试重新安装cuda。

6.cuda工具目录

属性页---cudaC/C++---common---CUDA Toolkkit Custom Dir---输入cuda所在路径

二、实现julia集

Julia 集(Julia Set)是由法国数学家加斯顿·朱利亚(Gaston Julia)在20世纪初研究的一个分形图形。它是复数平面上的一种特殊的点集,通过迭代一个简单的数学公式生成,具有非常复杂和美丽的图形结构。

数学定义

Julia 集是通过以下递归公式生成的:  其中:

  • z 是一个复数,表示平面上的点。
  • c 是一个固定的复常数。
  • n 是迭代次数。

在这个公式中,从一个初始值 z0z_0z0​ 开始,不断迭代计算新的值 Zn+1。Julia 集的定义取决于这些点在经过无穷次迭代后是否会逃离到无穷大。

  • 如果在无限次迭代后,∣Zn∣ 仍然保持有限,那么这个点 Z0​ 就属于 Julia 集。
  • 如果 ∣Zn∣ 趋向无穷大,那么这个点 Z0​ 就不属于 Julia 集。
#include "cuda-by-example-master\common\book.h"
#include "cuda-by-example-master\common\cpu_bitmap.h"
#include <device_launch_parameters.h>

#define DIM 1000
struct cuComplex
{
    float r;
    float i;
    __device__ cuComplex(float a, float b) : r(a), i(b) {}
    __device__ float magnitude2()
    {
        return r * r + i * i;
    }

    __device__ cuComplex operator*(const cuComplex& a)
    {
        return cuComplex(r * a.r - i * a.i, i * a.r + r * a.i);
    }

    __device__ cuComplex operator+(const cuComplex& a)
    {
        return cuComplex(r + a.r, i + a.i);
    }
};

__device__ int julia(int x, int y)
{
    const float scale = 1.5;
    float jx = scale * (float)(DIM / 2 - x) / (DIM / 2);
    float jy = scale * (float)(DIM / 2 - y) / (DIM / 2);

    cuComplex c(-0.8, 0.156);
    cuComplex a(jx, jy);

    int i = 0;
    for (i = 0; i < 200; i++)
    {
        a = a * a + c;
        if (a.magnitude2() > 1000)
            return 0;
    }

    return 1;
}

__global__ void kernel(unsigned char* ptr)
{
    int x = blockIdx.x;
    int y = blockIdx.y;
    int offset = x + y * gridDim.x;

    int juliaValue = julia(x, y);
    ptr[offset * 4 + 0] = 255 * juliaValue;
    ptr[offset * 4 + 1] = 0;
    ptr[offset * 4 + 2] = 0;
    ptr[offset * 4 + 3] = 255;
}

int main()
{
    CPUBitmap bitmap(DIM, DIM);
    unsigned char* dev_bitmap;

    HANDLE_ERROR(cudaMalloc((void**)&dev_bitmap, bitmap.image_size()));

    dim3 grid(DIM, DIM);
    kernel << <grid, 1 >> > (dev_bitmap);

    HANDLE_ERROR(cudaMemcpy(bitmap.get_ptr(), dev_bitmap, bitmap.image_size(), cudaMemcpyDeviceToHost));

    bitmap.display_and_exit();

    HANDLE_ERROR(cudaFree(dev_bitmap));
}

这个例子来源于CUDA-BY-EXAMPLE这本书,而book.h和cpu_bitmap.h则是本书中配套的头文件

其链接如下:tpn/cuda-by-example: Code for NVIDIA's CUDA By Example Book. (github.com)icon-default.png?t=O83Ahttps://github.com/tpn/cuda-by-example

下载完成后解压得到 cuda-by-example-master文件夹

进入cu项目的文件目录

将其复制到该目录下

配置链接器的附加依赖项

附加依赖项中添加glut64.lib的地址(相对于项目的地址也可以,这里为了方便直接拿到了绝对地址)

运行代码,就可以看到美丽的julia集了

#在一步步配置环境的过程中遇到了很多奇怪的错误,不过也是遇水架桥,逢山开路,总算是有了一个可靠的cuda开发环境。

#参考资料:VS2019--c++CUDA环境配置与编程实例 - 知乎 (zhihu.com)

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值