当前位置: 首页 > news >正文

cuda矩阵转置算子(共享内存)

cpu版本

即为按行遍历行列互换

// 主机上的矩阵转置函数,用于验证结果
void cpuTranspose(const float *input, float *output, int n)
{for (int row = 0; row < n; ++row){for (int col = 0; col < n; ++col){output[col * n + row] = input[row * n + col];}}
}

gpu未优化版本

每个线程单独处理一个元素

__global__ void transpose(float *input, float *output, int n)
{int row = blockDim.y * blockIdx.y + threadIdx.y;int col = blockDim.x * blockIdx.x + threadIdx.x;if (row < n && col < n){output[col * n + row] = input[row * n + col];}
}

gpu共享内存

对齐访问:对齐访问顾名思义即当设备内存事务的第一个地址是用于事务服务的缓存粒度的偶数倍时(32字节的二级 缓存或128字节的一级缓存),就会出现对齐内存访问。运行非对齐的加载会造成带宽浪 费。
如下图为对齐访问的情况,假设带宽为128B,则只需要加载一次内存
在这里插入图片描述
下面是非对齐的情况,访问的地址是分散的,那么至少需要3次访存
在这里插入图片描述合并访问,如果一个warp中的所有线程访问的是一片连续的内存,那么就会合并访问,反之则反,直接上图。
假设一个线程访问4B的数据,下图warp中所有线程访问的地址是连续的,则为合并访问,没有浪费带宽,总线占用率为100%
在这里插入图片描述

另外一种情况为虽然按线程id顺序访问的内存地址不是有顺序的,但是总的额访问的内存仍然是一块连续的地址,那么总线占用率还是100%

在这里插入图片描述

下面回到我们的矩阵转置中,在实际的矩阵存储中是一维的,如下图所示
在这里插入图片描述

在我们按行读取的时候,属于我们的合并访问,因为访问的地址是连续的,但是我们转置后,按列存储到一维数组的时候时,地址是分散的,则就是非合并访问了,需要访存多次。
或者我们按行去写,这个时候写地址是连续的,是合并访问的,但是读的时候需要按列读,地址不连续,则读不是合并访问了。所以无论我们按行还是按列读都无法避免合并访问。
在这里插入图片描述

那么有没有什么办法能够使得按行读数据,按行写数据呢,那么引入中间一小块内存就能做到,我们知道共享内存在一个block内对于所有线程是可见的,而我们可以申请一小块共享内存,这一块地址是连续的,这个时候,如下图所示,在一个block处理矩阵中一小块元素的时候,我们就能将原本地址不连续的元素,重新排布到在共享内存上面,就变得地址连续了。
在这里插入图片描述
那么我们再将共享内存的数据,按照转置,写入到结果矩阵中,此时读数据按行读,写数据也是按行写,那么读写都是合并访问,而共享内存中地址是连续的,读共享内存的数据也是合并访问,虽然我们每个线程由刚开始读入(行,列)的数据到共享内存中,到从共享内存中读取(列,行)的数据按行输出到矩阵中,访问的元素在逻辑顺序上变了,但是还是处于共享内存的这一片连续的内存中,是不是就是前面说过的这一种合并访问情况
在这里插入图片描述

代码:

__global__ void transposeShared(float *input, float *output, int N)
{// 每个线程块都有一个 BLOCK_SIZE ✕ BLOCK_SIZE 的共享内存数组,用于存储其内部处理的数据__shared__ int sharedMemory [blocksize] [blocksize];// global index	int indexX = threadIdx.x + blockIdx.x * blockDim.x;int indexY = threadIdx.y + blockIdx.y * blockDim.y;// transposed global memory indexint tindexX = threadIdx.x + blockIdx.y * blockDim.x;int tindexY = threadIdx.y + blockIdx.x * blockDim.y;// local indexint localIndexX = threadIdx.x;int localIndexY = threadIdx.y;int index = indexY * N + indexX;int transposedIndex = tindexY * N + tindexX;// reading from global memory in coalesed manner and performing tanspose in shared memorysharedMemory[localIndexX][localIndexY] = input[index];__syncthreads();// writing into global memory in coalesed fashion via transposed data in shared memoryoutput[transposedIndex] = sharedMemory[localIndexY][localIndexX];
}

时间消耗

cpu
Time taken: 16.800961 ms
普通cuda
Time taken: 0.522752 ms
共享内存cuda
Time taken: 0.395680 ms

汇总代码如下:

#include <iostream>
#include <cuda_runtime.h>
#define blocksize 32
#define BSIZEX 32
#define BSIZEY 32__global__ void transpose(float *input, float *output, int n)
{int row = blockDim.y * blockIdx.y + threadIdx.y;int col = blockDim.x * blockIdx.x + threadIdx.x;if (row < n && col < n){output[col * n + row] = input[row * n + col];}
}__global__ void transposeShared(float *input, float *output, int N)
{// 每个线程块都有一个 BLOCK_SIZE ✕ BLOCK_SIZE 的共享内存数组,用于存储其内部处理的数据__shared__ int sharedMemory [blocksize] [blocksize];// global index	int indexX = threadIdx.x + blockIdx.x * blockDim.x;int indexY = threadIdx.y + blockIdx.y * blockDim.y;// transposed global memory indexint tindexX = threadIdx.x + blockIdx.y * blockDim.x;int tindexY = threadIdx.y + blockIdx.x * blockDim.y;// local indexint localIndexX = threadIdx.x;int localIndexY = threadIdx.y;int index = indexY * N + indexX;int transposedIndex = tindexY * N + tindexX;// reading from global memory in coalesed manner and performing tanspose in shared memorysharedMemory[localIndexX][localIndexY] = input[index];__syncthreads();// writing into global memory in coalesed fashion via transposed data in shared memoryoutput[transposedIndex] = sharedMemory[localIndexY][localIndexX];
}// 主机上的矩阵转置函数,用于验证结果
void cpuTranspose(const float *input, float *output, int n)
{for (int row = 0; row < n; ++row){for (int col = 0; col < n; ++col){output[col * n + row] = input[row * n + col];}}
}int main()
{float *A, *B, *outputcpu;int n = 1024;size_t size = n * n * sizeof(float);A = (float *)malloc(size);B = (float *)malloc(size);outputcpu = (float *)malloc(size);for (int i = 0; i < n * n; i++){A[i] = i + 1;}float *input, *output;cudaMalloc((void **)&input, size);cudaMalloc((void **)&output, size);cudaMemcpy(input, A, size, cudaMemcpyHostToDevice);// 定义CUDA事件cudaEvent_t start, stop;cudaEventCreate(&start);cudaEventCreate(&stop);dim3 blockDim(BSIZEX, BSIZEY);dim3 gridDim((n + BSIZEX - 1) / BSIZEX, (n + BSIZEY - 1) / BSIZEY);// 记录开始时间cudaEventRecord(start);transposeShared<<<gridDim, blockDim>>>(input, output, n);// 记录结束时间cudaEventRecord(stop);// 等待直到事件完成cudaEventSynchronize(stop);// 计算耗时float milliseconds = 0;cudaEventElapsedTime(&milliseconds, start, stop);printf("Time taken: %f ms\n", milliseconds);// 清理事件cudaEventDestroy(start);cudaEventDestroy(stop);cudaMemcpy(B, output, size, cudaMemcpyDeviceToHost);cpuTranspose(A, outputcpu, n);for (int i = 0; i < n * n; ++i){if (fabs(outputcpu[i] - B[i]) > 1e-5){printf("result error!");break;}}free(A);free(B);free(outputcpu);cudaFree(input);cudaFree(output);return 0;
}

参考文献:

https://deployment.gitbook.io/love/whitepaper/cuda/global_memory
https://zhuanlan.zhihu.com/p/568769940

相关文章:

cuda矩阵转置算子(共享内存)

cpu版本 即为按行遍历行列互换 // 主机上的矩阵转置函数&#xff0c;用于验证结果 void cpuTranspose(const float *input, float *output, int n) {for (int row 0; row < n; row){for (int col 0; col < n; col){output[col * n row] input[row * n col];}} }gp…...

GB28181视频监控流媒体平台LiveGBS如何自定义收流端口区间以便减少收流端口数或解决端口冲突问题

LiveGBS GB28181流媒体服务在接收视频的时候默认是使用30000-30249&#xff0c; webrtc流播放端口区间默认是UDP的30250-30500区间。有些网络环境不方便开放这么大的端口区间&#xff0c;下面介绍下如何修改配置这个区间。 从页面上修改这个区间&#xff0c;端口区间尽量设置大…...

在Go语言中,判断变量是否为“空”(零值或未初始化状态)的方法总结

在Go语言中,判断变量是否为“空”(零值或未初始化状态)的方法因数据类型而异。以下是各类型变量的判断方法总结: 1. 基本类型 整数(int) 判断是否等于零值 0。 var i int if i == 0 { // 空 } 字符串(string) 判断是否等于空字符串 ""。 var s string if s =…...

VUE3开发-9、axios前后端跨域问题解决方案

VUE前端解决跨域问题 前端页面需要改写 如果无效&#xff0c;记得重启服务器 后端c#解决跨域问题 前端js取值&#xff0c;后端c#跨域_c# js跨域-CSDN博客...

利用 requestrepo 工具验证 XML外部实体注入漏洞

1. 前言 在数字化浪潮席卷的当下&#xff0c;网络安全的重要性愈发凸显。应用程序在便捷生活与工作的同时&#xff0c;也可能暗藏安全风险。XXE&#xff08;XML外部实体&#xff09;漏洞作为其中的典型代表&#xff0c;攻击者一旦利用它&#xff0c;便能窃取敏感信息、掌控服务…...

嵌入式开发之串行数据处理

前题 前面几篇文章写了关于嵌入式软件开发时&#xff0c;关于串行数据处理的一些相关内容&#xff0c;有兴趣的可以看看《嵌入式开发&#xff1a;软件架构、驱动开发与串行数据处理》、《嵌入式软件开发之生产关系模型》和《嵌入式开发之Modbus-RTU协议解析》相关的内容。从业十…...

深入解析 JVM —— 从基础概念到实战调优的全链路学习指南

文章目录 一、为什么要学习 JVM&#xff1f;1. 面试必备与技能提升2. 性能优化与问题诊断3. 编写高质量代码 二、JVM 基础概念与体系结构1. JVM 简介2. JDK、JRE 与 JVM 三、JVM 内存模型1. 线程私有区2. 线程共享区 四、类加载机制与双亲委派1. 类加载过程2. 双亲委派模型3. 动…...

LTC6804、LTC6811、LTC6813的使用

FSEC自制BMS第一步&#xff1a;从零开发使用LTC6804采集电池电压 LTC6811特性 LTC6811 是 LTC6804 的引脚兼容型升级器件&#xff0c;LTC6804官方已经不推荐选用 可测量多达 12 节串联电池 1.2mV 最大总测量误差 可堆叠式架构能支持几百个电池 内置 isoSPI™ 接口 可在 290μ…...

Spring 构造器注入和setter注入的比较

一、比较说明 在 Spring 框架中&#xff0c;构造器注入&#xff08;Constructor Injection&#xff09;和 Setter 注入&#xff08;Setter Injection&#xff09;是实现依赖注入&#xff08;DI&#xff09;的两种主要方式。它们的核心区别在于依赖注入的时机、代码设计理念以及…...

【LangChain】对话历史管理

1 历史记录的剪裁 trimmed_messages from langchain_core.messages import (AIMessage,HumanMessage,SystemMessage,trim_messages, ) from langchain_openai import ChatOpenAImessages [SystemMessage("youre a good assistant, you always respond with a joke."…...

【无人机三维路径规划】基于CPO冠豪猪优化算法的无人机三维路径规划Maltab

代码获取基于CPO冠豪猪优化算法的无人机三维路径规划Maltab 基于CPO冠豪猪优化算法的无人机三维路径规划 一、CPO算法的基本原理与核心优势 冠豪猪优化算法&#xff08;Crested Porcupine Optimizer, CPO&#xff09;是一种新型元启发式算法&#xff0c;其灵感来源于冠豪猪的…...

CAN协议介绍

目录 一、CAN协议 1.1 CAN协议简介 1.2 CAN物理层 1.3 CAN协议层 二、CAN控制器 2.1 CAN控制内核 2.2 CAN发送邮箱 2.3 CAN接收FIFO 2.4 CAN验收筛选器 一、CAN协议 1.1 CAN协议简介 CAN 是控制器局域网络 (Controller Area Network) 的简称&#xff0c;它是由研发和生…...

树莓派 Interface Option 中没有camera选项

最近重温树莓派的视觉&#xff0c;烧录了树莓派的新系统后发现在 raspi-config 中的 Interface Option 没有 camera 选项&#xff0c;同时在终端用 vcgencmd get_camera 查看摄像头时没有检测到树莓派的 CSI 摄像头&#xff0c;在 Thonny 中调用树莓派摄像头出现报错&#xff1…...

大数据学习(55)-BI工具数据分析的使用

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

轻松上手 —— 通过 RPM 包快速部署 NebulaGraph

前言 在当今大数据时代&#xff0c;处理复杂关系数据的需求与日俱增&#xff0c;图数据库应运而生并逐渐崭露头角。NebulaGraph 作为一款高性能、分布式且易扩展的图数据库&#xff0c;专为应对大规模图数据处理而精心打造。它不仅具备丰富的查询语言&#xff0c;还拥有强大高效…...

nginx作为下载服务器配置

一、Nginx 作为下载服务器配置笔记 基本配置指令 server块配置&#xff1a; 在 Nginx 的配置文件&#xff08;通常是/etc/nginx/nginx.conf或在/etc/nginx/conf.d/目录下的特定配置文件&#xff09;中&#xff0c;首先需要定义一个server块来监听特定的端口并处理下载请求。例如…...

第六课:数据存储三剑客:CSV/JSON/MySQL

在Python的数据存储与处理领域&#xff0c;CSV、JSON和MySQL被广大开发者誉为“数据存储三剑客”。它们各自在不同的场景下发挥着重要作用&#xff0c;无论是简单的数据交换、轻量级的数据存储&#xff0c;还是复杂的关系型数据库管理&#xff0c;都能找到它们的身影。本文将详…...

Dify 开源大语言模型应用开发平台使用(一)

文章目录 一、创建锂电池专业知识解答应用1.1 应用初始化二、核心功能模块详解2.1 知识库构建2.2 工作流与节点编排节点类型说明工作流设计示例:锂电池选型咨询2.3 变量管理三、测试与调试3.1 单元测试3.2 压力测试3.3 安全验证四、部署与优化建议4.1 部署配置4.2 持续优化结论…...

PyQt高亮代码

PyQt高亮代码 安装 Pygments支持的格式支持的样式详解参考 Qt中使用 安装 Pygments Pygments 是Python中的一个高亮代码的包&#xff0c;挺好用的 pip install Pygments支持的格式 支持的格式比较多&#xff0c;不列出来了 # coding:utf-8 from pygments.lexers import get_all…...

小白学Agent技术[1]

文章目录 课程地址Agent介绍原理架构任务规划记忆工具使用程序开发范式的变化Agent开发注意事项 课程地址 Agent课程地址 Agent介绍 AI Agent&#xff08;人工智能代理、AI智能体&#xff09;&#xff0c;一种模拟人类智能行为的人工智能系统&#xff0c;以大模型语言&#…...

以商业思维框架为帆,驭创业浪潮前行

创业者踏入商海&#xff0c;如同航海家奔赴未知海域&#xff0c;需有清晰的思维罗盘指引方向。图中“为什么—用什么—怎么做—何人做—投入产出”的商业框架&#xff0c;正是创业者破解商业谜题的密钥&#xff0c;从需求洞察到落地执行&#xff0c;为创业之路铺就逻辑基石。 …...

开源宝藏 Tigshop,开启电商新征程

在电商竞争愈发激烈的当下&#xff0c;一个强大且适配的商城系统是商家制胜的法宝。 Tigshop官网&#xff1a;Tigshop官网 - 开源商城系统Tigshop开源商城系统&#xff0c;支持b2b2c、多商户、多店铺、商家入驻、分销系统、跨境电商、连锁商城等解决方案&#xff0c;免费下载&…...

java多线程实现方式

目录 1. 继承 Thread 类 2. 实现 Runnable 接口 3. 实现 Callable 接口 4. 使用线程池 5. 使用 CompletableFuture&#xff08;Java 8&#xff09; 6. 使用 ForkJoinPool&#xff08;Java 7&#xff09; 7. 使用 Timer 和 TimerTask 8. 使用 ScheduledExecutorService …...

windows:curl: (60) schannel: SEC_E_UNTRUSTED_ROOT (0x80090325)

目录 1. git update-git-for-windows 报错2. 解决方案2.1. 更新 CA 证书库2.2. 使用 SSH 连接&#xff08;推荐&#xff09;2.3 禁用 SSL 验证&#xff08;不推荐&#xff09; 1. git update-git-for-windows 报错 LenovoLAPTOP-EQKBL89E MINGW64 /d/YHProjects/omni-channel-…...

python:pymunk + pygame 模拟六边形内小球弹跳运动

向 chat.deepseek.com 提问&#xff1a;编写 python 程序&#xff0c;用 pymunk, 有一个正六边形&#xff0c;围绕中心点缓慢旋转&#xff0c;六边形内有一个小球&#xff0c;六边形的6条边作为墙壁&#xff0c;小球受重力和摩擦力、弹力影响&#xff0c;模拟小球弹跳运动&…...

vulnhub靶场之【digitalworld.local系列】的vengeance靶机

前言 靶机&#xff1a;digitalworld.local-vengeance&#xff0c;IP地址为192.168.10.10 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.6 kali采用VMware虚拟机&#xff0c;靶机选择使用VMware打开文件&#xff0c;都选择桥接网络 这里官方给的有两种方式&#xff…...

shiro550-cve-2016-4437复现

shiro550-cve-2016-4437 复现环境&#xff1a;docker desktop idea远程调试jdk版本必须与容器里的jdk1.8.0_102 匹配上&#xff0c;下载资源翻我CC1链那篇文章 注意burpsuite的proxy listeners端口改一下别跟docker容器的重了。 ysoserial工具&#xff1a;https://github.c…...

【DeepSeek】Ubuntu快速部署DeepSeek(Ollama方式)

文章目录 人人都该学习的DeepSeekDeepSeek不同版本功能差异DeepSeek与硬件直接的关系DeepSeek系统兼容性部署方式选择部署步骤&#xff08;Ollama方式&#xff09;1.选定适合的deepseek版本2.环境准备3.安装Ollama4.部署deepseek5.测试使用 人人都该学习的DeepSeek DeepSeek 作…...

Windows 版本Nmap使用报错“无法打开device eth0”

背景 使用nmap在win10上进行扫描工作正常&#xff0c;换到win server 2012 r2以后&#xff0c;扫描报错“无法打开device eth0” 使用了重装、重启大法&#xff0c;未彻底解决 PS&#xff1a;这台服务器之前完装过wireshark&#xff0c;实际已经安装了npcap 解决步骤 查询了…...

java字符串

字符串构造 1.使用常量串构造 String h1 "hello";System.out.println(h1); 2.new对象 String h2 new String("hello");System.out.println(h2); 3.使用字符数组构造 char[] array {h,e,l,l,o};String h3 new String(array);System.out.println(h3);…...

Uniapp 页面返回不刷新?两种方法防止 onShow 触发多次请求!

目录 前言1. 变量&#xff08;不生效&#xff09;2. 延迟&#xff08;生效&#xff09; 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 在 Uniapp 中&#xff0c;使用 onShow() 钩子来监听页面显示&#xff0…...

鸿蒙生态日日新,夸克、顺丰速运、驾校一点通等多款应用功能更新

3月5日鸿蒙生态日日新PLOG&#xff1a;吉事办、健康甘肃等政务服务App上架原生鸿蒙应用市场&#xff1b;夸克、顺丰速运、驾校一点通等多款应用功能更新。...

库制作与原理

什么是库 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复用的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个人的代码都从零开始&#xff0c;因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式&#xff0c;可以被操作系统载入…...

《量子Java:从超导芯片到光子计算的编程革命》——解析Google量子AI中心的混合架构,揭秘如何用Java控制量子比特!

标题:《量子Java:从超导芯片到光子计算的编程革命》——解析Google量子AI中心的混合架构,揭秘如何用Java控制量子比特! 引言:当Java代码撞上量子叠加态——Google量子AI中心的0.003秒奇迹 Google量子AI中心首次实现Java程序对1200量子比特光量子芯片的实时控制,仅耗时3毫…...

音频3A测试--AGC(自动增益)和NS(降噪)测试

一、测试前期准备 一台电脑&#xff1a;用于作为控制播放和录制数据&#xff1b; 一台音频处理器(调音台)&#xff1a;控制每个通道播放的数据&#xff0c;如噪声、人工头、模拟设备B输入的数据、收集标准麦克风&#xff0c;设备A处理完成的数据&#xff1b; 四个高保真音响&…...

点云数据处理--splat转3dtiles

文章目录 处理流程简介核心功能实现数据读取与格式转换数据读取splat转gltf 点云数据分割定义四叉树递归生成3dtiles瓦片 生成tileset.json递归生成tileset.json计算box 主函数调用渲染 下一步工作性能优化渲染效果调优其他 源码地址&#xff1a; github 处理流程简介 基本流…...

deepseek使用记录18——艺术的追问

一 好的&#xff0c;基于前面学习结果&#xff0c;再写一篇有艺术美的文章 《美的起义》 凌晨四点的茶摊在电子支付二维码下苏醒&#xff0c;蒸腾的水汽中浮动着八百年前建盏的釉色。老板娘把栀子花插在共享单车车筐里&#xff0c;花瓣的弧度与北宋汝窑青瓷的冰裂纹暗合&…...

ArcGIS操作:13 生成最小外接矩阵

应用情景&#xff1a;筛选出屋面是否能放下12*60m的长方形&#xff0c;作为起降场候选点&#xff08;一个不规则的形状内&#xff0c;判断是否能放下指定长宽的长方形&#xff09; 1、面积初步筛选 Area ≥ 720 ㎡ 面积计算见 2、打开 ArcToolbox → Data Management Tools …...

Manus AI Agent 技术解读:架构、机制与竞品对比

目录 1. Manus 是什么&#xff1f; 1.1 研发背景 1.2 技术特点 1.3 工具调用能力 1.4 主要应用场景 2. Manus 一夜爆火的原因何在&#xff1f; 2.1 技术突破带来的震撼 2.2 完整交付的产品体验 2.3 生态与开源策略 3. Manus 与其他 AI Agent 的对比分析 3.1 技术架构…...

npm 执行安装报错

Fix the upstream dependency conflict, or retry this command with --force or --legacy-peer-deps to accept an incorrect (and potentially broken) dependency resolution. 原因​ 主要的原因是 npm7 以上的版本&#xff0c;新增了一个对等依赖的特性&#xff0c;在以…...

Django 模型的逆向工程

模型的逆向工程&#xff1a;通过 inspectdb 命令从数据库表创建 Django 模型 在Django开发中&#xff0c;模型&#xff08;Model&#xff09;是定义数据库结构的关键组件。通常&#xff0c;我们根据业务需求先设计模型&#xff0c;然后通过Django的迁移系统创建相应的数据库表…...

启动wsl里的Ubuntu24报错:当前计算机配置不支持 WSL2,HCS_E_HYPERV_NOT_INSTALLED

问题&#xff1a;启动wsl里的Ubuntu24报错 报错信息&#xff1a; 当前计算机配置不支持 WSL2。 请启用“虚拟机平台”可选组件&#xff0c;并确保在 BIOS 中启用虚拟化。 通过运行以下命令启用“虚拟机平台”: wsl.exe --install --no-distribution 有关信息&#xff0c;请访…...

Electron:点击右键保存图片到本地

前期插件 前端请求后台的一种方法 npm install got -S用于获取ArrayBuffer文件类型 npm install image-type -S生成随机数 npm install randomstring -D增加右击事件 点击右击事件的时候加载菜单 const imageRightSave require("./ImageRightSave") // 创建右…...

C语言中0UL和1UL

0UL 表示 无符号长整型 0 1UL 表示 无符号长整型 1 如果不写UL后缀&#xff0c;系统默认为&#xff1a;int, 即&#xff0c;有符号整数。 数值常数分为&#xff1a;整型常数和浮点常数&#xff1b; 数值常数后缀不区分字母大小写&#xff1b; 1.整型常数的后缀&#xff1a…...

6. 机器人实现远程遥控(具身智能机器人套件)

1. 启动控制脚本 远程作到 Raspberry Pi 中&#xff0c;并运行以下脚本&#xff1a; conda activate lerobotpython lerobot/scripts/control_robot.py \--robot.typelekiwi \--control.typeremote_robot登录笔记本电脑上&#xff0c;同时运行以下脚本&#xff1a; conda ac…...

C++ 学生成绩管理系统

一、项目背景与核心需求 成绩管理系统是高校教学管理的重要工具,本系统采用C++面向对象编程实现,主要功能模块包括: 学生信息管理(学号/姓名/3门课程成绩) 成绩增删改查(CRUD)操作 数据持久化存储 统计分析与报表生成 用户友好交互界面 二、系统架构设计 1. 类结构设计 …...

网络安全配置截图 网络安全i

网络安全概念及规范 1.网络安全定义 网络安全的概述和发展历史 网络安全 广义的网络安全&#xff1a;Cyber Security&#xff08;网络空间安全&#xff09; 网络空间有独立且相互依存的信息基础设施和网络组成&#xff0c;包括互联网、电信网、计算机系统、嵌入式处理器和控…...

Facebook营销自动化—— Python脚本 + 代理IP实现内容高效分发

目录 1. 引言&#xff1a;内容分发与Facebook营销的现状与痛点 2. 环境搭建与前期准备 2.1 开发环境与工具选择 2.2 获取代理IP 2.3 Facebook账号与开发者平台配置 3. Facebook内容分发的基本流程与策略 3.1 内容规划与策略制定 3.2 内容分发方式选择 3.3 风控与风险防…...

Centos的ElasticSearch安装教程

由于我们是用于校园学习&#xff0c;所以最好是关闭防火墙 systemctl stop firewalld systemctl disable firewalld 个人喜欢安装在opt临时目录&#xff0c;大家可以随意 在opt目录下创建一个es-standonely-docker目录 mkdir es-standonely-docker 进入目录编辑yml文件 se…...

香港地区上线独立多用户电商平台系统需要注意哪些问题

在香港地区上线独立多用户电商平台系统时&#xff0c;需结合本地化需求、技术架构、法律合规及用户体验等多方面因素&#xff0c;以下是需要注意的关键问题及建议&#xff1a; 一、技术架构与服务器部署 服务器配置与带宽选择 根据业务规模选择合适的香港服务器配置&#xff0…...