CUDA笔记2

1.硬件理解

1.1对应

在这里插入图片描述

1.2 不一定是同时执行

  • 例如只有13个sm,每个sm有128个core,而我们创建了1百万个threads,就要同步执行
    在这里插入图片描述
  • 因此,我们倾向于在block的x维设置为32的倍数,防止浪费warp
    在这里插入图片描述
  • warp id打印
#include <stdio.h>
#include <stdlib.h>#include "cuda_runtime.h"
#include "device_launch_parameters.h"__global__ void print_details_of_warps()
{int gid = blockIdx.y * gridDim.x * blockDim.x + blockIdx.x * blockDim.x + threadIdx.x;int warp_id = threadIdx.x / 32;int gbid = blockIdx.y * gridDim.x + blockIdx.x;printf("tid : %d, bid.x : %d, bid.y : %d, gid : %d, warp_id : %d, gbid : %d \n",threadIdx.x, blockIdx.x, blockIdx.y, gid, warp_id, gbid);
}int main(int argc , char** argv)
{dim3 block_size(42);dim3 grid_size(2,2);print_details_of_warps << <grid_size,block_size >> > ();cudaDeviceSynchronize();cudaDeviceReset();return EXIT_SUCCESS;
}
  • 需要注意,条件语句不总是会导致发散,当我申请blocksize为64时会分配2个warp(此处能优化计算速度)
    在这里插入图片描述

  • 代码效率计算
    在这里插入图片描述

  • grid对应kernal函数
    在这里插入图片描述

  • 对kernal函数而言

    • thread-core
    • block-sm
    • grid-device在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
  • 同一个block里执行的数据尽量要靠近
    在这里插入图片描述
    在这里插入图片描述

  • CudaDeviceSynchronize (会阻塞CPU,直到所有先前的CUDA调用都完成为止)

  • CudaMemcpy()调用之前会调用CudaDeviceSynchronize

  • cudaMemcpyAsync()这个不会调用,用在stream中,pipeline
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 优化矩阵乘法
    在这里插入图片描述

  • 内存中线性分布,一行行的串联
    在这里插入图片描述

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

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

相关文章

Layui关于如何添加连接数据库的选项卡(三)

目录 1.实现效果&#xff1a; 2.思路&#xff1a; 3.PermissionDao类&#xff08;增加属性&#xff09; 4.主页&#xff1a;jsp 5.简洁风格修改选项卡的样式&#xff1a; 6.关于style中的属性设置使用 7.关于Element 组件介绍&#xff1a; 8. Layui 中的页面进行更新和…

MySQL基础篇第8章(聚合函数)

文章目录 1、聚合函数介绍1.1 AVG和SUM函数1.2 MIN和MAX函数1.3 COUNT函数 2、GROUP BY2.1 基本使用2.2 使用多个分组2.3 GROUP BY中使用WITH ROLLUP 3、HAVING3.1 基本使用3.2 WHERE和HAVING的对比 4、SELECT的执行过程4.1 查询的结构4.2 SELECT执行顺序4.3 SQL的执行原理 1、…

Leetcode-每日一题【147.对链表进行插入排序】

题目 给定单个链表的头 head &#xff0c;使用 插入排序 对链表进行排序&#xff0c;并返回 排序后链表的头 。 插入排序 算法的步骤: 插入排序是迭代的&#xff0c;每次只移动一个元素&#xff0c;直到所有元素可以形成一个有序的输出列表。 每次迭代中&#xff0c;插入排序…

关于VUE报错“TypeError: Converting circular structure to JSON“

关于VUE报错“TypeError: Converting circular structure to JSON" 问题&#xff1a; [Vue warn]: Error in nextTick: "TypeError: Converting circular structure to JSON--> starting at object with constructor Vue| property $options -> object wit…

SonarQube安装、汉化及使用

一、环境准备 SonarQube下载&#xff1a;https://www.sonarqube.org/downloads/Java 11 或以上版本安装 多环境共存&#xff0c;指定 SonarQube 的java运行版本&#xff08;注意地址改为自己的java路径&#xff0c;最后面必须带java&#xff09;&#xff1a; 解压目录下 &#…

第二十八章:索引优化与优化查询

第二十八章&#xff1a;索引优化与优化查询 哪些维度可以进行数据库调优 索引失效、没有充分利用到索引 —— 索引建立关联查询太多JOIN(设计缺陷或不得已的需求) —— SQL优化服务器调优及各个参数设置(缓冲、线程数等) —— 调整my.cnf数据过多 —— 分库分表 虽然SQL查询…

Windows 操作系统架构介绍

Windows 操作系统架构介绍 4 种基本类型的用户模式进程用户进程服务进程系统进程环境子系统服务进程Windows 内核模式组件 重要的系统组件环境子系统和子系统 DLL子系统的启动Windows 子系统Windows 10 和 Win32k.sys 其他子系统执行体内核内核对象内核处理器控制区&#xff08…

力扣 239. 滑动窗口最大值

一、题目描述 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 示例 1&#xff1a; 输入&#xff1a;nums [1,3,-1,-3,5,3,6…

工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…

深入理解Linux网络——本机网络IO

文章目录 一、相关实际问题二、跨机网络通信过程1&#xff09;跨机数据发送2&#xff09;跨机数据接收3&#xff09;跨机网络通信汇总 三、本机发送过程1&#xff09;网络层路由2&#xff09;网络设备子系统3&#xff09;驱动程序 四、本机接收过程五、问题解答 系列文章&#…

Canal adapter同步MySQL到ES,部分时间字段始终同步不过来

1.需要看一下包含_date字段的映射类型&#xff0c;如果是date那么就需要格式化一下&#xff0c;如果不是直接字符串存进去就行了 DATE_FORMAT(a.IN_OUT_DATE, ‘%Y-%m-%d’) as IN_OUT_DATE, sql中也需要验证包含_date字段同时es中也是date类型的&#xff0c;是否都格式化 2.还…

0基础学习VR全景平台篇 第59篇:专业版功能-跨账号复制

功能位置示意 一、本功能将用在哪里&#xff1f; 跨账号复制&#xff0c;是指将本账号中已发布的VR漫游作品一键复制给其他账号使用。 复制成功后&#xff0c;其他账号中也会生成同样的作品以及获得相关的全景、音频、图片、视频等素材。 并且原作品和复制品可以独立编辑&am…