首页 > 编程语言 >C++编程笔记(GPU并行编程)

C++编程笔记(GPU并行编程)

时间:2022-11-10 18:23:57浏览次数:71  
标签:__ 编程 C++ CUDA printf device GPU CPU

目录

一、配置并使用

环境:Windows10 + CLion + VS2019

cuda的安装,并行的话只需要安装cuda,cuDNN就不必了

编译器设置,windows下建议使用MSVC,因为是官方支持的,记得架构一定要设置amd64

在这里插入图片描述
GPU版本架构查询网址
CmakeList.txt编写

cmake_minimum_required(VERSION 3.22)#跟据自己的cmake版本来设置

project(CUDA_TEST2 LANGUAGES CXX CUDA)

set(CMAKE_CUDA_STANDARD 17)
set(CMAKE_BUILD_TYPE Release)

set(CMAKE_CUDA_ARCHITECTURES 61)

#设置device函数的声名和定义分开,为了性能,不建议这样
set(CMAKE_CUDA_SEPARABLE_COMPILATION ON)

add_executable(CUDA_TEST2 main.cu)

#clion加的,好像可以不要
#set_target_properties(CUDA_TEST2 PROPERTIES
#        CUDA_SEPARABLE_COMPILATION ON)

至此,就可以开始写代码了


二、代码

  • __global__:定义在GPU上的核函数,GPU执行,从CPU调用,可以有参数,不能有返回值,global就是GPU的main函数,device就是其他函数
  • __device__:device修饰的函数定义在GPU上,device是设备函数,GPU执行,只能由GPU调用,调用规则与普通函数一样
  • __host__:host修饰的函数定义在CPU上,只能在CPU上调用,调用规则与普通函数一样
  • 同时加上host和device修饰符表示同时定义在CPU和GPU上,二者都可调用
__global__ void kernel() {
  //sayHi();
  printf("Block %d of %d, Thread %d of %d\n", blockIdx.x, gridDim.x, threadIdx.x, blockDim.x);
  //printf("Thread Numbers %d\n",blockDim.x);
  //线程编号
  //printf("Thread %d\n",threadIdx.x);
  //sayHello();
}

__device__ void sayHi() {
  printf("Hi , GPU\n");
}

__host__ void sayHiCpu() {
  printf("Hi , CPU\n");
}

__host__ __device__ void sayHello() {
  //从GPU上调用就有这个宏
#ifdef __CUDA_ARCH__
  printf("Hello , GPU CUDA_ARCH=%d\n", __CUDA_ARCH__);
#else
  printf("Hello , CPU NO CUDA_ARCH\n");
#endif
}

一个kernel就是一个网格
网格内有多个板块,板块内有多个线程组
核函数调用时,parm1:板块 parm2:线程数量

#include <iostream>
#include <cuda_runtime.h>

int main() {
  kernel<<<2, 3>>>();

  kernel<<<dim3(2, 2, 2), dim3(2, 2, 2)>>>();
  cudaDeviceSynchronize();

  return 0;
}

标签:__,编程,C++,CUDA,printf,device,GPU,CPU
From: https://www.cnblogs.com/Lhh-9999/p/16877979.html

相关文章

  • C++ 之string类常用接口功能解析(7千字长文带你玩懂string!)
    C++之string常用接口功能解析关于string的背景我们可以看到string的本质就是一个类模板!**为什么使用的是类模板因为字符串涉及到了编码的问题!——有ACCII,utf-8utf-1......
  • C++软件编码规范推荐--文件结构
    1文件结构每个C/C++程序通常分为两个文件,头文件(保存程序的声明)和定义文件(保持程序的实现)。头文件以“.h”为后缀;C程序的定义文件以“.c”为后缀,C++程序的定义文......
  • 各种编译环境中如何为C++添加命令行参数(Command-line parameter)
    因恐其内容丢失所以重新编辑到本博文中在实际的编程中,我们经常使用命令行参数。命令行参数的英文是Command-lineparameter或者是argument,下面是wikipedia中关于​​Command......
  • C++'s most vexing parse
    本文地址https://www.cnblogs.com/wanger-sjtu/p/16876846.htmlC++'smostvexingparse是ScottMeyers在其名著《EffectiveSTL》中创造的一个术语。Scott用这个术......
  • C++语言程序设计课程设计任务书
    C++语言程序设计课程设计任务书一.课程设计的目的全面系统的学习面向对象程序设计的基本概念、基本语法和编程方法。正确理解掌握C++面向对象程序设计的基本特性:类、对......
  • 一文带你入门 Java 函数式编程
    Java在最开始是不支持函数式编程的,想来也好理解,因为在Java中类Class才是第一等公民,这就导致在Java中实现编程不是件那么容易的事儿,不过虽然难,但是结果我们也已经知道......
  • 中文书籍对《人月神话》的引用(161-175本):编程匠艺、产品设计蓝图(20211109更新)
    ​​中文书籍对《人月神话》的引用(第001到160本)>>​​《人月神话》于1975年出版,1995年出二十周年版。自出版以来,该书被大量的书籍和文章引用,直到现在热潮不退。UMLChina摘录......
  • H5游戏开发-面向对象编程
    七、面向对象编程1.认识类与对象类是一种复杂的数据结构,他是将不同类型的数据与这些数据相关的操作封装在一起的集合体。对象是类的实例,是类描述的具体事物。(类是对象的......
  • windows 环境安装C++
    #进入网页进行下载https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/seh/?td......
  • C++ 单例模式
    有时候用到单例模式,记录一下。另外,有时候也用静态函数。头文件:1#ifndefDATABASEMANAGER_H2#defineDATABASEMANAGER_H345#include"operatesqlite.h"......