【笔记】cuda大师班1-4

一.基本概念

进程(process)一个正在被执行的计算机程序的实例
上下文(context):待处理数据的集合,允许处理器暂停,保持处理的执行和恢复处理
并发:上下文切换,主要应用于单核处理器,循环赛
在这里插入图片描述
并行:多线程执行

二.第一个cuda

2.1cuda安装

在这里插入图片描述
了解自己电脑的微架构和算力,下载对应版本cuda
p.s.这部分网上有大量教程

2.2 第一个cuda

2.2.1 在visual studio 配置cuda 模板

大致可以参考这一博客
但是我是先安装cuda,在安装vs,因此配置完好像也没有成功。我尝试了所有不重装cuda的方式都失败了,重新安装cuda

三.cuda编程的基本步骤在这里插入图片描述

host code :在cpu上运行的代码
device code : 在gpu上运行的代码

3.1 一个简单示范程序

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <stdio.h>

__global__ void hello_Cuda()
{
	printf(
		"hello CUDA world \n"
	); 
}

int main()
{
	//hello_Cuda << <1, 1 >> > ();
	//多个线程执行同一个操作
	//hello_Cuda << <20, 20 >> > ();
	//hello_Cuda << <1, 20 >> > ();//和下面输出相同
	hello_Cuda << <20, 1 >> > ();

	//host 不必等待 kenel执行完成

	//为了强制等待内核执行完毕,即同步
	cudaDeviceSynchronize();

	//往往需要将结果复制到主机
	//这里使用复位
	cudaDeviceReset();

	return 0;
}


3.2 关键概念

block 和 grid
在这里插入图片描述
内核启动的前两个参数:

  1. block数量
  2. 每个block中线程的数量
    在这里插入图片描述
	dim3 block(4);//y,z 默认是1
	dim3 grid(8);
	hello_Cuda << <grid, block >> > ();

通过这种方式可以动态的设置每个维度的块数


int nx, ny;
nx = 16;
ny = 4;
dim3 block(8, 4);
dim3 grid(nx / block.x, ny / block.y);
hello_Cuda << <grid, block >> > ();

3.3 block 和 grid 的限制

在这里插入图片描述
在这里插入图片描述

4. 线程序号

threadidx根据位置进行初始化
在这里插入图片描述

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <stdio.h>

__global__ void print_thread_idx()
{
	printf(
		"threadIdx.x : %d , threadIdx.y : %d,threadIdx.z : %d \n",
		threadIdx.x, threadIdx.y, threadIdx.z

	);
}

int main()
{

	int nx, ny;
	nx = 16;
	ny = 16;
	dim3 block(8, 8);
	dim3 grid(nx / block.x, ny / block.y);
	print_thread_idx << <grid, block >> > ();

	cudaDeviceSynchronize();

	cudaDeviceReset();

	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二叉搜索树中的众数

1题目 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c;可以按 任意顺序 返回。 假定 BST 满足如下定义&…

用Python分析周杰伦歌曲并进行数据可视化

大家好&#xff0c;今天我们用python分析下周杰伦歌曲。为了尽量完整地呈现从原始数据到可视化的过程&#xff0c;接下来我们会先简单讲解数据的预处理过程&#xff0c;即如何将 JSON 数据转化为Excel 格式&#xff0c;以及如何对周杰伦的歌曲进行分词。 本案例中的歌词数据来…

对顶堆模板!!【DS对顶堆】ABC281 E - Least Elements

我想的思路和正解是差不多的 就是滑动窗口&#xff0c;每过去一个用DS维护一下前k个元素和sum 本来想的是用优先队列维护前k个 然后想着multiset维护前k个&#xff0c;但是具体不知道怎么操作 这里用的是multiset维护对顶堆 关于对顶堆&#xff0c;我在寒假的时候总结过 …

从根本上理解Synchronized的加锁过程

作为一个Java开发&#xff0c;对于Synchronized这个关键字并不会陌生&#xff0c;无论是并发编程&#xff0c;还是与面试官对线&#xff0c;Synchronized可以说是必不可少。 在JDK1.6之前&#xff0c;都认为Synchronized是一个非常笨重的锁&#xff0c;就是在之前的《谈谈Java…

ChatGPT真的有那么牛吗?

ChatGPT真的有那么牛吗&#xff1f;ChatGPT真的有那么牛吗&#xff1f; 作为一款大型语言模型&#xff0c;ChatGPT确实具有很高的自然语言处理和生成能力&#xff0c;可以生成流畅、准确和有逻辑性的语言&#xff0c;而且能够理解和回答广泛的问题。 它是目前最先进和最强大的…

八股+面经

文章目录 项目介绍1.不动产项目数据机器学习算法调研图像提取算法调研数据集-ImageNetXceptionVGGInceptionDensenetMobilenet 2.图书项目技术栈面试问题 Java基础反射接口和抽象类MapHashMap v.s Hashtable(5点)ConcurrentHashMap v.s Hashtable(2点)代理模式1. 静态代理2. 动…

Rust - 变量与数据的交互方式(clone)

在上一篇文章中我们介绍了变量与数据的交互方式-move&#xff0c;通过底层原理我们知道Rust 永远也不会自动创建数据的 “深拷贝”。因此&#xff0c;任何 自动的复制可以被认为对运行时性能影响较小。 但是如果我们 确实需要深度复制 String中堆上的数据&#xff0c;而不仅仅…

mitmproxy抓包

0.mitmproxy功能简介 实时拦截、修改 HTTP/HTTPS 请求和响应可保存完整的 http 会话&#xff0c;方便后续分析和重放支持反向代理模式将流量转发到指定服务器支持 macOS 和 Linux上的透明代理模式支持用 Python 脚本对 HTTP 通信进行修改 1. 安装mitmproxy pip3 install mit…

你知道如何使用C语言实现递归吗?

本篇博客会讲解如何使用C语言实现递归&#xff0c;以及2个注意事项。 递归是什么 递归&#xff0c;简单来说&#xff0c;就是自己调用自己。C语言中&#xff0c;可以使用函数来实现递归&#xff0c;也就是让一个函数自己调用自己。举一个简单的例子&#xff1a; 请你求斐波…

考验大家指针功底的时候到了:请问如何理解 (int*)1 + 1 ?

来&#xff0c;猜猜看&#xff0c;这里的执行结果是什么&#xff1f; 这是今天课上的一道理解题&#xff0c;给大家一点点思考时间。 &#xff08;心里有答案了再往下滑哦&#xff09; 5 4 3 2 1 . 答案是&#xff0c;报warning&#xff01;因为%d不是用来输出指针的哈…

PromQL,让你轻松实现监控可视化!快来了解一下吧!

Prometheus 中的一些关键设计&#xff0c;比如注重标准和生态、监控目标动态发现机制、PromQL等。 PromQL 是 Prometheus 的查询语言&#xff0c;使用灵活方便&#xff0c;但很多人不知道如何更好利用它&#xff0c;发挥不出优势。 PromQL主要用于时序数据的查询和二次计算场…

学习系统编程No.23【信号实战】

引言&#xff1a; 北京时间&#xff1a;2023/4/23&#xff0c;最近学习状态不怎么好&#xff0c;总是犯困&#xff0c;没精力的感觉&#xff0c;可能是病没有好彻底的原因&#xff0c;也可能是我内心因为生病而认为摆烂理所应当&#xff0c;反正最后导致摆烂&#xff0c;课现在…

Postman预请求脚本、测试脚本(pre-request scripts、tests常用工作总结)

文章目录 Postman预请求脚本&#xff08;pre-request scripts工作常用总结&#xff09;Postman预请求脚本Postman测试脚本预请求脚本和测试脚本有什么区别常用工作总结登录接口返回的是Set-Cookie标头 Postman预请求脚本&#xff08;pre-request scripts工作常用总结&#xff0…

2008-2019年主要城市PITI指数

2008-2019年主要城市PITI指数 1、来源&#xff1a;附在文件内 2、时间区间&#xff1a;2008-2019年 3、具体时间分布&#xff1a;、2008、2009-2010、2011、2012、2013-2014、2014-2015、2015-2016、2016-2017、2017-2018、2018-2019、 4、范围&#xff1a;包括110个城市&a…

Afkayas.1(★)

软件运行 要输入正确的Name和Serial 查壳 一个VB程序&#xff0c;没有加壳 载入OD 直接开搜索字符串。 这里看到了错误的提示&#xff0c;“You Get It”应该就是成功的字符串了。 前面的“AKA-”应该是在什么时候拼接的字符串 去成功的字符串附近看看 这个字符串上面…

网络编程 总结三

一、并发服务器模型 【1】 循环服务器 1>一次只能处理一个客户端的请求&#xff0c;等待这个客户端退出后&#xff0c;才能处理下一个客户端 2>缺点&#xff1a;循环服务器所处理的客户端不能有耗时操作 //*****模型****** sfd socket(); bind(); listen(); while(1)…

js 操作数组内容

js 操作数组内容 数组添加元素&#xff08;更改原数组&#xff09; push和unshift会返回添加了新元素的数组长度 push从数组最后加入&#xff0c;unshift从数组最前面加入 const arr ["a", "b", "c"]; arr.push("d"); //返回4…

【高危】泛微 e-cology <10.57 存在 SQL注入漏洞(POC)(MPS-ndqt-0im5)

漏洞描述 泛微协同管理应用平台(e-cology)是一套企业大型协同管理平台。 泛微 e-cology 受影响版本存在SQL注入漏洞&#xff0c;未经授权的远程攻击者可通过发送特殊的HTTP请求来获取数据库的敏感信息。 漏洞名称GeoServer 存在 sql 注入漏洞漏洞类型SQL注入发现时间2023/4/…

解密PyTorch动态计算图:打破深度学习束缚的秘密武器

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

Linux 用户管理与文件权限

Linux 是一个多用户系统&#xff0c;它允许多个用户同时登陆主机&#xff0c;并为他们分配不同的资源和工作环境进行使用。当然&#xff0c;不同的用户都有文件的私有需求&#xff0c;所以设置不同用户文件的权限管理十分重要。 01 用户与用户组 Linux 中一般将文件访问权限的…