【知识】对比Share mem/Pin mem/GPU mem之间的传输速度

news2024/9/23 15:21:49

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn]

如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~

目录

参考代码

运行结果


参考代码

import torch
import time
import matplotlib.pyplot as plt

# 初始化设备和张量
device = torch.device('cuda')
data_sizes = [100, 1000, 5000, 10000, 50000, 100000, 300000, 500000]  # 不同数据量
results = {'Shared to Pinned': [], 'Pinned to Shared': [],
           'GPU to Pinned': [], 'Pinned to GPU': [],
           'GPU to Shared': [], 'Shared to GPU': []}

# 测试不同数据量
for size in data_sizes:
    shared_tensor = torch.randn((size, 1000), dtype=torch.float32, device='cpu').share_memory_()
    pinned_tensor = torch.randn((size, 1000), dtype=torch.float32, device='cpu').pin_memory()
    gpu_tensor = torch.randn((size, 1000), dtype=torch.float32, device=device)

    # Shared Memory => Pinned Memory
    start_time = time.time()
    pinned_tensor.copy_(shared_tensor, non_blocking=True)
    end_time = time.time()
    results['Shared to Pinned'].append(end_time - start_time)
    torch.cuda.synchronize()

    # Pinned Memory => Shared Memory
    start_time = time.time()
    shared_tensor.copy_(pinned_tensor, non_blocking=True)
    end_time = time.time()
    results['Pinned to Shared'].append(end_time - start_time)
    torch.cuda.synchronize()

    # GPU Memory => Pinned Memory
    start_time = time.time()
    pinned_tensor.copy_(gpu_tensor, non_blocking=True)
    end_time = time.time()
    results['GPU to Pinned'].append(end_time - start_time)
    torch.cuda.synchronize()

    # Pinned Memory => GPU Memory
    start_time = time.time()
    gpu_tensor.copy_(pinned_tensor, non_blocking=True)
    end_time = time.time()
    results['Pinned to GPU'].append(end_time - start_time)
    torch.cuda.synchronize()

    # GPU Memory => Shared Memory
    start_time = time.time()
    shared_tensor.copy_(gpu_tensor, non_blocking=True)
    end_time = time.time()
    results['GPU to Shared'].append(end_time - start_time)
    torch.cuda.synchronize()

    # Shared Memory => GPU Memory
    start_time = time.time()
    gpu_tensor.copy_(shared_tensor, non_blocking=True)
    end_time = time.time()
    results['Shared to GPU'].append(end_time - start_time)
    torch.cuda.synchronize()

# 绘制图表
plt.figure(figsize=(10, 6))
for key, values in results.items():
    plt.plot(data_sizes, values, marker='o', label=key)

plt.xlabel('Data Size (rows)')
plt.ylabel('Time (seconds)')
plt.title('Memory Copy Time for Different Data Sizes')
plt.legend()
plt.grid(True)
plt.show()

运行结果

        所以,share to gpu是最慢的,而对于pin和gpu之间的互传非常快(异步传输)。以后如何选,心里也大概有个数了。

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

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

相关文章

float 或 double 运算的时候会有精度丢失的风险?

《阿里巴巴 Java 开发手册》中提到:“浮点数之间的等值判断,基本数据类型不能用 来比较,包装数据类型不能用 equals 来判断”。“为了避免精度丢失,可以使用 BigDecimal 来进行浮点数的运算”。 浮点数的运算竟然还会有精度丢失…

当AI遇上制药:加速跑向未来的快车道,还是布满荆棘的征途?

01 在全球科技领域,AI的崛起无疑掀起了一场变革的风暴,其影响力已渗透至各行各业,促使各领域积极寻求与AI技术的深度融合,以提升效率、创新产品及优化服务。在医疗健康领域,AI与制药的结合自2007年起航,历…

Servlet 简介+ Cookie和session+过滤器Filter和监听器Listener

目录 1.Servlet 介绍 1.1 什么是Servlet 1.2 Servlet的使用方法 1.3 Servlet接口的继承结构 2.Servlet的生命周期 2.1 servlet生命周期中重要的方法 3.获得前端提交数据 4.中文乱码的解决方案 5.重定向和转发 5.1 重定向 5.2 转发 6. Request对象 7. Response对象…

(南京观海微电子)——半导体制程介绍

半导体的制程: 1. IC 设计: 预先规划芯片的功能,功能包含算术逻辑、记忆功能、 浮点运算、 数据传输,各功能分布在芯片上各区域,并制作所需的电子元件,工程师使用(HDL)设计电路图&…

opencv之几何变换

文章目录 1 前言2 线性几何变换的主要类型2.1 平移 (Translation):2.1.1 定义2.1.2代码 2.2 缩放 (Scaling):2.2.1 定义2.2.2 代码 2.3 旋转 (Rotation):2.3.1 定义2.3.2 代码 2.4 仿射变换 (Affine Transformation):2.4.1 定义2.…

Git:版本控制的强大工具与全面解析

Git,作为现代软件开发中不可或缺的版本控制工具,凭借其高效、灵活和分布式的特性,赢得了全球开发者的青睐。无论是个人项目还是大型企业级应用,Git 都能够提供强大的版本管理、分支策略、远程协作等功能。本文将从Git的创建与初始…

【电子数据取证】Android APK静态分析与动态分析

文章关键词:电子数据取证、手机取证、安卓取证、云取证、APK分析 当前手机用户量增长越来越快,尤其是中国,手机用户量已超10亿,即大约75%的中国人拥有自己的手机。正因为手机越来越智能化,携带也方便,因此…

算法day08 链表

4.链表_哔哩哔哩_bilibili 一、判断链表为回文 暴力方式: 从链表头开始将链表每一个元素值依次放入数组中,按下标比较值。 从链表尾开始将链表一半元素值放入stack栈中;每次弹栈比较 弹出的值和 链表值。 快慢指针: 假设有这样一个…

python-Flask搭建简易登录界面

使用Flask框架搭建一个简易的登录界面&#xff0c;登录成功获取token数据 1 搭建简易登录界面 代码如下 from flask import Flask, jsonify from flask import request import time, hashlibapp Flask(__name__)login_html <html> <head> <title>Log…

ROS - Turtle Nest 使用说明

系列文章目录 前言 正如乌龟巢是小乌龟的出生地一样&#xff0c;ROS 2 Turtle Nest 也是新 ROS 软件包诞生和发展的地方。 Turtle Nest 为创建新的 ROS 软件包提供了一个简单的图形用户界面&#xff0c;简化了软件包的创建过程。 一、为什么使用 Turtle Nest 而不是 “ros2 pkg…

STM32CubeMX生成freertos默认设置卡死,卡在HAL_Init不动,裸机运行程序正常跑,解决方法

1、简介 最近通过STM32CubeMX生成freertos发现任务不执行&#xff0c;卡在HAL_Init不动&#xff0c;网上找很久不好使&#xff0c;刚开始怀疑硬件问题&#xff0c;但是裸机运行程序正常跑&#xff0c;然后怀疑软件有问题&#xff0c;但是对F1,F3系列都好使&#xff0c;仅仅对F…

Git版本控制策略:Rebase还是Merge?详解优缺点与适用场景

在团队合作中&#xff0c;如何高效地管理代码版本和保持主干代码的稳定性&#xff0c;常常是开发团队关注的焦点。在使用Git管理代码的常规操作中&#xff0c;Merge是最常见的操作&#xff0c;此外Rebase也是一种很实用的操作&#xff0c;尤其是我们想要保持更干净的提交历史时…

habor仓库

1.安装docker 现在打开不了docker官网&#xff0c;本人是在清华下载站下载的 Index of /docker-ce/linux/rhel/9/x86_64/stable/Packages/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 解压docker 错误&#xff1a; 原因&#xff1a;rhel9自带podman和runc&…

车辆种类检测数据集介绍

车辆种类检测数据集 数据集概述 本数据集专为车辆种类检测任务而设计&#xff0c;包含了大量的车辆图像&#xff0c;每张图像均带有详细的车辆种类标注信息。数据集旨在帮助研究人员和开发人员训练高精度的目标检测模型&#xff0c;以应用于车辆识别、交通监控等多个领域。 数…

使用mysql保存密码

登录MySQL 这行命令告诉MySQL客户端程序用户root准备登录&#xff0c;-p表示告诉 MySQL 客户端程序提示输入密码。 mysql -u root -p创建数据库 create database wifi; use wifi;create table password(user_password CHAR(8),primary key(user_password));源码 代码编译 …

《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层(2)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层&#xff08;1&#xff09; 7.1 数据链路层的组成结构 数据链路层使用ACK/NAK协议发送和接收TLP&#xff0c;由发送部件和接收部件组成。其中&#xff0c;发送部件由…

Ubuntu 20.04 上使用 Prometheus 和 Grafana 监控 PHP 8.0

本文方案监听php状态信息是采用php-php-exporter直接通过sock监控php-fpm信息。还可以通过nginx查询php状态信息从而监控&#xff0c;中间需要加上nginx配置。详见本文末尾 查找最新的 php-fpm_exporter 版本 访问 php-fpm_exporter 的 GitHub releases 页面 来查找最新版本。…

Nginx简单的安全性配置

文章目录 引言I Nginx简单的安全性配置禁止特定的HTTP方法限制URL长度禁止某些用户代理限制请求速率连接限制禁止访问某些文件类型II 常见的安全规则防御CC攻击User-Agent过滤GET-URL过滤GET-参数过滤POST过滤(sql注入、xss攻击 )引言 Nginx本身并不具备复杂的防火墙规则定制…

【电力电子】单相并网逆变器

摘要 单相并网逆变器是一种将直流电转换为单相交流电&#xff0c;并与电网同步输出的装置。它广泛应用于小型可再生能源系统&#xff0c;如光伏发电&#xff0c;确保产生的电能能够高效、安全地并入电网。本文探讨了单相并网逆变器的设计理论、控制策略以及其在不同负载条件下…

PAT--1002 写出这个数

题目描述 读入一个正整数 n&#xff0c;计算其各位数字之和&#xff0c;用汉语拼音写出和的每一位数字。 输入格式&#xff1a; 每个测试输入包含 1 个测试用例&#xff0c;即给出自然数 n 的值。这里保证 n 小于 10 100 。 输出格式&#xff1a; 在一行内输出 n 的各位数字…