TensorRT及CUDA自学笔记004 内核函数以及两个简单的内核函数demo

TensorRT及CUDA自学笔记004 内核函数以及两个简单的内核函数demo

内核函数是能够在GPU上被线程并发执行的函数

CUDA程序中的函数修饰符

修饰符执行位置调用注意
global在设备(device)上执行主机和compute capabilitiy 3(计算能力三级)的设备可以调用必须有一个void type的返回值
device在设备(device)上执行只有设备可以调用,只能在设备上执行
host在主机(host)上执行只有主机能调用,只能在主机上执行__host__可以省略,也就是说__host__是默认的修饰符

内核函数的特性

  1. 只能访问GPU memory
  2. 必须返回void type
  3. 不能用变长参数,不能使用静态变量,不能使用函数指针
  4. 有异步性,当内核函数执行时,CPU上的程序可以和内核函数并行执行

demo1 能在GPU上运行并打印信息的内核函数

代码

#include<stdio.h>__global__ void HellofromGPU(){printf("Hello from GPU!\n");
}int main(){printf("Hello from CPU!\n");HellofromGPU<<<1,6>>>();//<<<grid,block>>>cudaDeviceReset();//释放GPU资源return 0;
}

注意:文件后缀名应为.cu

nvcc ./main.cu -o main.exe

然后运行使用nvcc编译的可执行文件

运行结果

luke@ubuntu:~/workspace/TensorRT_course/02_kenel_demo$ ./main.exe
Hello from CPU!
Hello from GPU!
Hello from GPU!
Hello from GPU!
Hello from GPU!
Hello from GPU!
Hello from GPU!

demo2 能在GPU上运行并打印thread 标识和thread ID的内核函数

代码

#include<stdio.h>   
#include<iostream>__global__ void hellowfromGPU(){printf("Hello from block(%d,%d,%d) thread(%d,%d,%d)\t thread ID is %d \n",blockIdx.x,blockIdx.y,blockIdx.z,threadIdx.x,threadIdx.y,threadIdx.z,threadIdx.x  + threadIdx.y * blockDim.x + threadIdx.z * blockDim.x * blockDim.y);
}int main(){std::cout <<"Hello from CPU!"<<std::endl;//block被grid包含dim3 grid1(2,2,1);//指定name为grid1的grid内部含有2x2x1=4个block块dim3 block1(2,2,2);//指定name为block1的block内部含有2x2x2=8个thread// printf("Launching kernel width gridDim:%d %d %d blockDim:%d %d %d ",gridDim.x,gridDim.y,gridDim.z,blockDim.x,blockDim.y,blockDim.z);// 实际测试发现不能在CPU端直接访问gridDim和blockDimstd::cout <<"Launching kernel..."<<std::endl;hellowfromGPU<<<grid1,block1>>>();//会调用4x8=32个thread并行运行//std::cout <<"Work done!"<<std::endl;cudaDeviceReset();std::cout <<"Work done!"<<std::endl;return 0; 
}

注意:文件后缀名应为.cu

nvcc ./main.cu -o main.exe

然后运行使用nvcc编译的可执行文件

运行结果

luke@ubuntu:~/workspace/TensorRT_course/03_cuda_idx$ ./main.exe
Hello from CPU!
Launching kernel...
Hello from block(1,1,0) thread(0,0,0)    thread ID is 0 
Hello from block(1,1,0) thread(1,0,0)    thread ID is 1 
Hello from block(1,1,0) thread(0,1,0)    thread ID is 2 
Hello from block(1,1,0) thread(1,1,0)    thread ID is 3 
Hello from block(1,1,0) thread(0,0,1)    thread ID is 4 
Hello from block(1,1,0) thread(1,0,1)    thread ID is 5 
Hello from block(1,1,0) thread(0,1,1)    thread ID is 6 
Hello from block(1,1,0) thread(1,1,1)    thread ID is 7 
Hello from block(1,0,0) thread(0,0,0)    thread ID is 0 
Hello from block(1,0,0) thread(1,0,0)    thread ID is 1 
Hello from block(1,0,0) thread(0,1,0)    thread ID is 2 
Hello from block(1,0,0) thread(1,1,0)    thread ID is 3 
Hello from block(1,0,0) thread(0,0,1)    thread ID is 4 
Hello from block(1,0,0) thread(1,0,1)    thread ID is 5 
Hello from block(1,0,0) thread(0,1,1)    thread ID is 6 
Hello from block(1,0,0) thread(1,1,1)    thread ID is 7 
Hello from block(0,1,0) thread(0,0,0)    thread ID is 0 
Hello from block(0,1,0) thread(1,0,0)    thread ID is 1 
Hello from block(0,1,0) thread(0,1,0)    thread ID is 2 
Hello from block(0,1,0) thread(1,1,0)    thread ID is 3 
Hello from block(0,1,0) thread(0,0,1)    thread ID is 4 
Hello from block(0,1,0) thread(1,0,1)    thread ID is 5 
Hello from block(0,1,0) thread(0,1,1)    thread ID is 6 
Hello from block(0,1,0) thread(1,1,1)    thread ID is 7 
Hello from block(0,0,0) thread(0,0,0)    thread ID is 0 
Hello from block(0,0,0) thread(1,0,0)    thread ID is 1 
Hello from block(0,0,0) thread(0,1,0)    thread ID is 2 
Hello from block(0,0,0) thread(1,1,0)    thread ID is 3 
Hello from block(0,0,0) thread(0,0,1)    thread ID is 4 
Hello from block(0,0,0) thread(1,0,1)    thread ID is 5 
Hello from block(0,0,0) thread(0,1,1)    thread ID is 6 
Hello from block(0,0,0) thread(1,1,1)    thread ID is 7 
Work done!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【非递归版】归并排序算法(2)

目录 MergeSortNonR归并排序 非递归&归并排序VS快速排序 整体思想 图解分析​ 代码实现 时间复杂度 归并排序在硬盘上的应用&#xff08;外排序&#xff09; MergeSortNonR归并排序 前面的快速排序的非递归实现&#xff0c;我们借助栈实现。这里我们能否也借助栈去…

国产服务器操作系统

为何记录 最近的开发工作经常接触到国产服务器操作系统的业务&#xff0c;经常被x86、arm、龙芯、鲲鹏、欧拉...搞得一脸懵逼&#xff0c;遂记之&#xff01; 操作系统 这里按照应用场景分&#xff1a; 桌面操作系统&#xff1a;主要用于pc&#xff0c;如Windows、macOS、Li…

MATLAB练习题:电子管的更换策略问题

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 在一台设备上&#xff0c;安装有四只型号和规格完全相同的电子…

腾讯design vue项目 上传桶 腾讯云的桶 对象存储 打包web端项目上传dist

1.说明 将腾讯design 项目上传到 腾讯云的对象存储中 &#xff0c;但是发现 再这个腾讯design项目中 直接npm run build 打包以后 上传 发现 不能用 需要配置东西 2.解决 使用腾讯云的cos-nodejs-sdk-v5 插件 代码上传 cos-nodejs-sdk-v5 - npm npm i cos-nodejs-sdk-v5 …

[算法沉淀记录]排序算法 —— 快速排序

排序算法 —— 快速排序介绍 基本概念 快速排序&#xff08;Quicksort&#xff09;是一种排序算法&#xff0c;最早由东尼霍尔提出。在平均状况下&#xff0c;排序 n 个项目要 Ο(n log n) 次比较。在最坏状况下则需要 Ο(n2) 次比较&#xff0c;但这种状况并不常见。事实上&…

《论文阅读》一个基于情感原因的在线共情聊天机器人 SIGIR 2021

《论文阅读》一个基于情感原因的在线共情聊天机器人 前言简介数据集构建模型架构损失函数实验结果咨询策略总结前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《Towards an Online Empathetic Chatbot…

EMQX Enterprise 5.5 发布:新增 Elasticsearch 数据集成

EMQX Enterprise 5.5.0 版本已正式发布&#xff01; 在这个版本中&#xff0c;我们引入了一系列新的功能和改进&#xff0c;包括对 Elasticsearch 的集成、Apache IoTDB 和 OpenTSDB 数据集成优化、授权缓存支持排除主题等功能。此外&#xff0c;新版本还进行了多项改进以及 B…

设计模式(二)单例模式的七种写法

相关文章设计模式系列 面试的时候&#xff0c;问到许多年轻的Android开发他所会的设计模式是什么&#xff0c;基本上都会提到单例模式&#xff0c;但是对单例模式也是一知半解&#xff0c;在Android开发中我们经常会运用单例模式&#xff0c;所以我们还是要更了解单例模式才对…

vue3 使用qrcodejs2-fix生成二维码并可下载保存

直接上代码 <el-button click‘setEwm’>打开弹框二维码</el-button><el-dialog v-model"centerDialogVisible" align-center ><div class"code"><div class"content" id"qrCodeUrl" ref"qrCodeUrl&q…

【Vue】组件通信组件通信

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;JVM ⛺️稳中求进&#xff0c;晒太阳 组件通信 组件通信&#xff0c;就是指组件与组件之间的数据传递 组件的数据是独立的&#xff0c;无法直接访问其他组件的数据想用其他组件的数据--&…

网络编程中的问题总结

1、服务端重启后bind失败&#xff0c;因为TCP 套接字状态 TIME_WAIT 引起&#xff0c;该状态在套接字关闭后约保留 2 到 4 分钟。在 TIME_WAIT 状态退出之后&#xff0c;套接字被删除&#xff0c;该地址才能被重新绑定而不出问题。可以通过setsockopt()设置Socket描述符的选项S…

Qt5转Qt6笔记

背景 现在的主程序和扩展的dll库都是qt5环境下编译发布的。但是想以后用qt6。所以考虑是否能够在qt5中兼容qt6的动态链接库进行加载。于是...就开始吧 开始 2024-02-23 安装好qt6后&#xff0c;在vs2019中需要新增qt6版本的安装路径。目录在&#xff1a;扩展->QT VS Tools…

Linux笔记--硬链接与软链接

一、硬链接 1.inode和block 文件包含两部分数据&#xff1a;文件属性和实际内容&#xff0c;属性放在inode中&#xff0c;实际内容放在data block中。还有个超级区块&#xff08;superblock&#xff09;记录整个文件系统的整体信息&#xff0c;包括inode和block的总量&#x…

大语言模型LLM分布式训练:大规模数据集上的并行技术全景探索(LLM系列03)

文章目录 大语言模型LLM分布式训练&#xff1a;大规模数据集上的并行技术全景探索&#xff08;LLM系列03&#xff09;1. 引言1.1 大语言模型&#xff08;LLM&#xff09;的重要性及其规模化挑战1.2 分布式训练策略的需求 2. 分布式训练基础原理2.1 并行计算的基本概念与分类 3.…

python 循环语句 while 循环

while循环 Python 编程中 while 语句用于循环执行程序&#xff0c;即在某条件下&#xff0c;循环执行某段程序&#xff0c;以处理需要重复处理的相同任务。其基本形式为&#xff1a; while 判断条件(condition)&#xff1a; 执行语句(statements)…… 执行语句可以是单个语句…

使用axios 封装大文件上传,支持断点续传的功能

使用 Axios 实现断点续传、重试、暂停、开始和上传进度功能 简介 在许多应用程序中&#xff0c;我们经常需要上传大文件。但是&#xff0c;由于网络连接不稳定或其他原因&#xff0c;上传过程可能会中断。为了解决这个问题&#xff0c;我们可以使用断点续传功能。断点续传允许…

[Docker 教学] 常用的Docker 命令

Docker是一种流行的容器化技术。使用Docker可以将数据科学应用程序连同代码和所需的依赖关系打包成一个名为镜像的便携式工件。因此&#xff0c;Docker可以简化开发环境的复制&#xff0c;并使本地开发变得轻松。 以下是一些必备的Docker命令列表&#xff0c;这些命令将在你下一…

UI学习-学习内容

教程网址1&#xff1a;UI 新手如何从设计规范中提升自己 推荐一下高质量的设计规范 满屏干货 语雀 B站地址1&#xff1a;新像素 UI 新手如何从设计规范中提升自己 推荐一下高质量的设计规范 满屏干货 UI设计培训_哔哩哔哩_bilibili 教程地址2&#xff1a;UI 新手成长经验分享…

golang学习6,glang的web的restful接口传参

1.get传参 //get请求 返回json 接口传参r.GET("/getJson/:id", controller.GetUserInfo) 1.2.接收处理 package controllerimport "github.com/gin-gonic/gin"func GetUserInfo(c *gin.Context) {_ c.Param("id")ReturnSucess(c, 200, &quo…

基于雷达影像的洪水监测技术方法详解

洪水发生时候大多数是阴雨天气&#xff0c;光学影像基本上拍不到有效影像。雷达影像这时候就能发挥其不受天气影像的优点。现在星载的雷达卫星非常多&#xff0c;如高分三号、陆探一号、海丝一号&#xff08;巢湖一号&#xff09;、哨兵1号等。本文以哨兵1号L1地距(GRD)产品来介…