windows程序转鲲鹏服务器踩坑记【持续更新中】
1.鲲鹏处理器和Intel处理器的区别
处理器/对比项 | Intel | Kunpeng |
厂家 | 因特尔(美国) | 华为(中国) |
指令集 | X86架构 | ARM-V8 |
架构与指令集 | - x86 CISC复杂指令集 - 单核性能强(如至强8380主频3.8GHz) - 三级缓存优化,支持DDR4-3200和Optane内存 | - ARMv8-A RISC精简指令集 - 64核设计(超线程至128线程) - 多级缓存优化,支持PCIe 4.0和高速内存 |
单核性能 | - 单核主频高(3.8GHz+),单线程性能强 | - 主频2.6GHz,NEON指令优化 |
多核性能 | 28~40核主流型号,依赖超线程优化多任务 | 64核整数运算性能领先33%(对比28核Intel) |
能效与功耗 | 10/14nm工艺,TDP较高(如至强8180达205W),但支持动态功耗优化 | 7nm工艺,TDP低,适合绿色数据中心 |
兼容性 | - 全球90%服务器生态支持 - 原生兼容Windows/Linux及专业软件(如Oracle、VMware) | - 依赖ARM生态适配(如欧拉OS) - 需二进制翻译运行x86应用 |
硬件扩展 | 支持PCIe 5.0和Optane持久内存 | 集成昇腾NPU和RoCEv2网络加速 |
典型应用场景 | - 高性能计算(HPC) - 实时性工业控制 - CUDA加速的深度学习 | - 云计算(高并发虚拟化) - AI推理/大数据处理 - 国产化数据中心 |
安全性 | - 依赖软件层安全(如SGX) - 全球化供应链风险 | - 硬件级加密引擎(HiSec 3.0) - 国产化供应链可控 |
2.欧拉系统系统
Intel服务器可以使用windows或者linux(centos、ubuntu等都可支持)。
首先是系统安装,鲲鹏服务器使用的是华为鲲鹏处理器,基于ARM架构,也可安装centos等,建议安装华为欧拉系统。
- 访问欧拉系统的官方网站(https://www.euler.com)或者官方下载页面,下载最新版本的欧拉系统安装文件。
- 系统安装完成后进入系统、连接外网,通过命令行安装图形化界面
sudo dnf groupinstall "UKUI Desktop" # UKUI界面[5](@ref)
sudo systemctl set-default graphical.target # 默认启动图形模式
3.安装qt
qt我们使用5.9.8,当然其他版本也是OK的,因为服务器找不到对应的QT-ARM安装包。所以我们从源码编译:参考鲲鹏官方文档:
- 使用PuTTY工具,以root用户登录服务器。
- 执行以下命令进入Qt安装目录。
cd /path/to/QT
- 执行以下命令解压Qt安装包。
tar -Jxvf qt-everywhere-src-5.13.0.tar.xz
- 执行以下命令进入解压后的目录。
cd qt-everywhere-src-5.13.0
- 执行以下命令进行编译配置。
./configure -qt-xcb
- 选择安装类型。
- 输入o,表示开源版。
- 输入yes,接受GPL协议。
- 执行以下命令进行编译安装。
gmake –j64 gmake install
- 执行以下命令设置环境变量。
export QTDIR=/usr/local/Qt-5.13.0 export PATH=$QTDIR/bin:$PATH export MANPATH=$QTDIR/man:$MANPATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
编译和安装-Qt 5.13.0 移植指南(openEuler 20.03)-生命科学-开源应用软件移植指南-HPC行业应用-鲲鹏HPC开发文档-鲲鹏社区
安装QT会有各种编译问题,需要挨个去网络上查找问题修改代码和宏定义解决
4安装svn或git等相关工具
yum install svn -y
5安装devkit工具查看迁移方案
从鲲鹏社区下载Devkit
鲲鹏DevKit开发套件-学习资源-鲲鹏社区
选择立即下载,然后解压安装包,其中“x.x.x”表示版本号,请用实际情况代替
tar --no-same-owner -zxvf DevKit-All-x.x.x-Linux-Kunpeng.tar.gz
安装 ,其中“x.x.x”表示版本号,请用实际情况代替
cd DevKit-All-x.x.x-Linux-Kunpeng
./install.sh
安装过程中有很多配置,具体见官方文档:安装-安装鲲鹏DevKit-WebUI-用户指南-鲲鹏开发套件开发文档-鲲鹏社区
安装后通过IP:8086访问WEBUI
通过devadmin和安装过程中设置的密码登录
可通过应用评估,选择对应操作系统,编译器版本额构建工具等,上传源码查看应用迁移建议
扫描完成后,查看依赖库可源码修改建议
按照建议下载对应库和修改源码。
6.加速库替代
在程序中使用了大量Intel相关加速库,如ipp库
Intel-ipp库接口定义 | 函数接口定义 |
pp8u、Ipp32f、Ipp32fc等 | 数据类型: |
ippsMalloc_32f等 | 开辟空间函数 |
ippsFree | 空间释放函数 |
ippsMeanStdDev_64f等 | 均值方差计算 |
ippsSortAscend_64f_I等 | 排序 |
ippsReplaceNAN_32f_I等 | 替换无效值 |
ippsCplxToReal_32fc等 | FFT相关 |
ippsPowerSpectr_32f等 | FFT相关 |
ippsCopy_64fc等 | FFT相关 |
ippsRealToCplx_64f | FFT相关 |
ippsCplxToReal_64fc | FFT相关 |
ippsDFTInit_C_64fc | FFT相关 |
ippsDFTFwd_CToC_64fc | FFT相关 |
ippsFFTFwd_CToC_64fc | FFT相关 |
参考文档定义,intel-ipp库专为intel服务器设计,鲲鹏基于鲲鹏处理器,这些函数全部要重新替代,查看鲲鹏服务器相关文档、发现鲲鹏服务器在FFT的计算上有KML-FFT库可对FFT进行加速计算。
函数说明-KML_FFT库函数说明-基础数学库-鲲鹏数学库 开发指南-开发指南-HPCKit-鲲鹏HPC开发文档-鲲鹏社区
得、空间开辟用C++标准库替代,求和方差等可通过std库搞定,其他的通过KML-FFT替换。
现在要测试下Intel相关函数与标准c++提升了多少呢,代码如下:
#include <QCoreApplication>
#include <QElapsedTimer>
#include <iostream>
#include "./Include/ipp/ipp.h"
#include <cstring> // 标准库函数
#include <random>
#include <algorithm>
#include <iterator>// Windows环境需要显式链接IPP库
#pragma comment(lib, "ippsmt.lib")
#pragma comment(lib, "ippcoremt.lib")constexpr int SIZE = 1 << 20; // 1MB数据(262,144个float)
constexpr int TRIALS = 1000; // 测试次数// 测试IPP函数
void testIPP() {Ipp32f* src = nullptr, * dst = nullptr;QElapsedTimer timer;// 内存分配timer.start();for (int i = 0; i < TRIALS; ++i) {src = ippsMalloc_32f(SIZE);ippsFree(src);}auto mallocTime = timer.nsecsElapsed() / TRIALS;// 内存赋值src = ippsMalloc_32f(SIZE);timer.start();for (int i = 0; i < TRIALS; ++i) {ippsSet_32f(3.14159f, src, SIZE);}auto setTime = timer.nsecsElapsed() / TRIALS;ippsFree(src);// 内存置零src = ippsMalloc_32f(SIZE);timer.start();for (int i = 0; i < TRIALS; ++i) {ippsZero_32f(src, SIZE);}auto zeroTime = timer.nsecsElapsed() / TRIALS;ippsFree(src);// 内存拷贝src = ippsMalloc_32f(SIZE);dst = ippsMalloc_32f(SIZE);ippsSet_32f(2.71828f, src, SIZE);timer.start();for (int i = 0; i < TRIALS; ++i) {ippsCopy_32f(src, dst, SIZE);}auto copyTime = timer.nsecsElapsed() / TRIALS;ippsFree(src);ippsFree(dst);std::cout << "[IPP] Malloc: " << mallocTime << " ns\n"<< "[IPP] Set: " << setTime << " ns\n"<< "[IPP] Zero: " << zeroTime << " ns\n"<< "[IPP] Copy: " << copyTime << " ns\n";
}// 测试标准库
void testSTD() {float* src = nullptr, * dst = nullptr;QElapsedTimer timer;// 内存分配timer.start();for (int i = 0; i < TRIALS; ++i) {src = new float[SIZE];delete[] src;}auto mallocTime = timer.nsecsElapsed() / TRIALS;// 内存赋值(循环)src = new float[SIZE];timer.start();for (int i = 0; i < TRIALS; ++i) {
#pragma omp simd forfor (int i = 0; i < SIZE; ++i)src[i] = 3.14159f;//std::fill_n(src, SIZE, 3.14159f);}auto setTime = timer.nsecsElapsed() / TRIALS;delete[] src;// 内存置零(memset)src = new float[SIZE];timer.start();for (int i = 0; i < TRIALS; ++i) {memset(src, 0, SIZE * sizeof(float));}auto zeroTime = timer.nsecsElapsed() / TRIALS;delete[] src;// 内存拷贝(memcpy)src = new float[SIZE];dst = new float[SIZE];memset(src, 0, SIZE * sizeof(float));timer.start();for (int i = 0; i < TRIALS; ++i) {memcpy(dst, src, SIZE * sizeof(float));}auto copyTime = timer.nsecsElapsed() / TRIALS;delete[] src;delete[] dst;std::cout << "[STD] Malloc: " << mallocTime << " ns\n"<< "[STD] Set: " << setTime << " ns\n"<< "[STD] Zero: " << zeroTime << " ns\n"<< "[STD] Copy: " << copyTime << " ns\n";
}// 生成随机浮点数组
void generateRandomData(float* data, size_t size) {std::random_device rd;std::mt19937 gen(rd());std::uniform_real_distribution<float> dist(0.0f, 1000.0f);for (size_t i = 0; i < size; ++i) {data[i] = dist(gen);}
}// 标准库计算均值与标准差
void stdMeanStdDev(const float* data, size_t size, float& mean, float& stdDev) {double sum = 0.0, sumSq = 0.0;for (size_t i = 0; i < size; ++i) {sum += data[i];sumSq += data[i] * data[i];}mean = sum / size;stdDev = std::sqrt((sumSq - sum * sum / size) / (size - 1)); // 样本标准差
}// 性能测试主函数
void performanceTest(size_t dataSize, int iterations) {// 内存分配与数据初始化Ipp32f* ippData = ippsMalloc_32f(dataSize);std::vector<float> stdData(dataSize);generateRandomData(ippData, dataSize);std::copy(ippData, ippData + dataSize, stdData.begin());// 预热缓存(可选)std::sort(stdData.begin(), stdData.end());// 测试排序性能auto start = std::chrono::high_resolution_clock::now();for (int i = 0; i < iterations; ++i) {ippsSortAscend_32f_I(ippData, dataSize); // IPP原地排序}auto ippSortTime = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - start).count();start = std::chrono::high_resolution_clock::now();for (int i = 0; i < iterations; ++i) {std::sort(stdData.begin(), stdData.end()); // 标准库排序}auto stdSortTime = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - start).count();// 测试均值与标准差计算性能float ippMean, ippStdDev;start = std::chrono::high_resolution_clock::now();for (int i = 0; i < iterations; ++i) {ippsMeanStdDev_32f(ippData, dataSize, &ippMean, &ippStdDev, ippAlgHintFast); // IPP计算}auto ippStatTime = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - start).count();float stdMean, stdStdDev;start = std::chrono::high_resolution_clock::now();for (int i = 0; i < iterations; ++i) {stdMeanStdDev(stdData.data(), dataSize, stdMean, stdStdDev); // 标准库计算}auto stdStatTime = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - start).count();// 输出结果std::cout << "===== 性能对比 (数据量: " << dataSize << ", 迭代次数: " << iterations << ") =====\n";std::cout << "排序:\n"<< " IPP ippsSortAscend_32f_I: " << ippSortTime << " ms\n"<< " std::sort: " << stdSortTime << " ms\n";std::cout << "统计计算:\n"<< " IPP ippsMeanStdDev_32f: " << ippStatTime << " ms\n"<< " 标准库实现: " << stdStatTime << " ms\n";ippsFree(ippData);
}int main(int argc, char* argv[])
{QCoreApplication a(argc, argv);std::cout << "=== Intel IPP Performance ===\n";testIPP();std::cout << "\n=== Standard Library Performance ===\n";testSTD();performanceTest(1e6, 10); // 测试100万数据,迭代10次return 0;
}
使用1000次对1MB数据(262,144个float)的效率对比。对比结果如下:
Windows系统Debug模式
=== Intel IPP Performance ===
[IPP] Malloc: 1293522 ns
[IPP] Set: 174418 ns
[IPP] Zero: 94937 ns
[IPP] Copy: 501033 ns=== Standard Library Performance ===
[STD] Malloc: 1202868 ns
[STD] Set: 1940080 ns
[STD] Zero: 93922 ns
[STD] Copy: 190766 ns
===== 性能对比 (数据量: 1000000, 迭代次数: 10) =====
排序:IPP ippsSortAscend_32f_I: 240 msstd::sort: 1404 ms
统计计算:IPP ippsMeanStdDev_32f: 2 ms标准库实现: 26 msF:\Workspace\Code\Qt\TestIntelIpps\x64\Debug\TestIntelIpps.exe (进程 21008)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
Windows系统Release模式
=== Intel IPP Performance ===
[IPP] Malloc: 48886 ns
[IPP] Set: 301834 ns
[IPP] Zero: 87169 ns
[IPP] Copy: 544983 ns=== Standard Library Performance ===
[STD] Malloc: 44820 ns
[STD] Set: 710 ns
[STD] Zero: 85777 ns
[STD] Copy: 211307 ns
===== 性能对比 (数据量: 1000000, 迭代次数: 10) =====
排序:IPP ippsSortAscend_32f_I: 229 msstd::sort: 109 ms
统计计算:IPP ippsMeanStdDev_32f: 3 ms标准库实现: 0 msF:\Workspace\Code\Qt\TestIntelIpps\x64\Release\TestIntelIpps.exe (进程 26764)已退出,代码为 0 (0x0)。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
Linux系统(Centos 7.9) Debug模式
=== Intel IPP Performance ===
[IPP] Malloc: 350 ns
[IPP] Set: 206298 ns
[IPP] Zero: 104632 ns
[IPP] Copy: 766895 ns=== Standard Library Performance ===
[STD] Malloc: 145 ns
[STD] Set: 2213560 ns
[STD] Zero: 143366 ns
[STD] Copy: 837936 ns
===== 性能对比 (数据量: 1000000, 迭代次数: 10) =====
排序:IPP ippsSortAscend_32f_I: 300 msstd::sort: 1437 ms
统计计算:IPP ippsMeanStdDev_32f: 3 ms标准库实现: 31 ms
按 <RETURN> 来关闭窗口...
Linux系统(Centos 7.9) Release模式
=== Intel IPP Performance ===
[IPP] Malloc: 214 ns
[IPP] Set: 230157 ns
[IPP] Zero: 88688 ns
[IPP] Copy: 509544 ns=== Standard Library Performance ===
[STD] Malloc: 42 ns
[STD] Set: 725504 ns
[STD] Zero: 274262 ns
[STD] Copy: 614060 ns
===== 性能对比 (数据量: 1000000, 迭代次数: 10) =====
排序:IPP ippsSortAscend_32f_I: 231 msstd::sort: 109 ms
统计计算:IPP ippsMeanStdDev_32f: 3 ms标准库实现: 12 ms
按 <RETURN> 来关闭窗口...
本机系统为Windows 11 专业版 24H2 CPU类型为Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz 3.60 GHz。
综合对比下来,除Set外、其余函数标准库优化相当不错。接近与IPP库的性能。而SET函数IPP库有10倍以上的速度提升。
好像也可以接受,接下下开始验证FFT。
查看官网说明,天塌了
不行,紧急社区求助。
查看本机服务器
等等,这里好像是kml_fft开头接口,而文档说的是kml_ffth,是不是这里不展示还是写错了,继续追问
整个记录如下:
工单详情-鲲鹏社区
得到支持的回复、接下来验证FFT结果吧,代码如下:
int rank = 2; int *n; n = (int*)kml_fft_malloc(sizeof(int) * rank); n[0] = 2; n[1] = 3; double init[6][2] = {{120, 0}, {8, 8}, {0, 0}, {0, 16}, {0, 16}, {-8, 8}}; kml_fft_complex *in; in = (kml_fft_complex*)kml_fft_malloc(sizeof(kml_fft_complex) * n[0] * n[1]); for (int i = 0; i < n[0] * n[1]; i++) { in[i][0] = init[i][0]; in[i][1] = init[i][1]; } kml_fft_complex *out; out = (kml_fft_complex*)kml_fft_malloc(sizeof(kml_fft_complex) * n[0] * n[1]); kml_fft_plan plan; plan = kml_fft_plan_dft(rank, n, in, out, KML_FFT_FORWARD, KML_FFT_ESTIMATE); kml_fft_execute_dft(plan, in, out); kml_fft_destroy_plan(plan); kml_fft_free(n); kml_fft_free(in); kml_fft_free(out); /* * out = {{1.200000e+02, 4.800000e+01}, {1.338564e+02, -1.385641e+01}, * {1.061436e+02, 1.385641e+01}, {1.360000e+02, -3.200000e+01}, * {1.120000e+02, -8.000000e+00}, {1.120000e+02, -8.000000e+00}} */
保存结果文件使用matlab验证,matlab代码如下:
clear; clc;data = importdata('F:\Workspace\input_signal.txt'); % 快速读取数值矩阵[6](@ref)M = data(:,1)+1j*data(:,2);CV = abs(fft(M));data1 = importdata('F:\Workspace\fft_output.txt'); % 快速读取数值矩阵[6](@ref)M1 = data1(:,1)+1j*data1(:,2);CV1 = abs(M1);plot(1:1024,CV,1:1024,CV1); legend('line1', 'line2');
结果完全一致:
相关文章:
windows程序转鲲鹏服务器踩坑记【持续更新中】
1.鲲鹏处理器和Intel处理器的区别 处理器/对比项IntelKunpeng厂家因特尔(美国)华为(中国)指令集X86架构ARM-V8架构与指令集- x86 CISC复杂指令集 - 单核性能强(如至强8380主频3.8GHz) - 三级缓存优化,支持DDR4-3200和Optane内存- ARMv8-A RI…...
【阿里云大模型高级工程师ACP习题集】2.6.用插件扩展答疑机器人的能力边界
习题集: 【单选题】在构建Agent系统时,使用Assistant API创建Agent时,若想让Agent具备查询员工信息和发送请假申请的功能,以下对instructions参数设置最合理的是( ) A. “你可以做任何事情” B. “你能查询员工信息和发送请假申请” C. “你是公司助手,功能有:1.查询员…...
程序进程多任务线程
1.程序 程序(program)是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。 2.进程 进程(process)是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。进程是操作系统资源分配和处理器调度的基本单位,拥有独立的代码、内部数…...
Finish技术生态计划: FinishRpc
finishRpc 简介 纯个人兴趣设计的项目: 因为失业在家摆烂 所以没事就想写点代码 本身也比较喜欢自己写一些好玩的demo 这个项目的设计完全是取悦自己又菜又有一个创造框架的梦想 可以用于提升框架设计思路以及实践一些常用技术的练习 可以用于校园中的练习 , 如果能对你有所…...
《商业世界的开源法则:协议选择与商业模式创新》
引言 在当今数字化时代,开源软件已成为技术生态系统中不可或缺的一部分。从Linux操作系统到Apache Web服务器,从MySQL数据库到React前端框架,开源项目支撑着全球大部分互联网基础设施和企业IT系统。然而,关于开源协议与商业使用之…...
Kubernetes》》k8s》》explain查 yaml 参数
在创建json 和yaml 时,我们可能不知道具体的参数该怎么写。同样 我们可以通过explain这个 命令来查看 每个参数具体的作用与写法 # 查看 pod类性有哪些参数 kubectl explain pod# 查看pod中 spec下面有哪些参数 kubectl explain pod.spec...
Kubernetes(k8s)学习笔记(三)--部署 Kubernetes Master
前文已经使用docker安装了kubeadm,因此本文使用kubeadm部署master节点。 一.先拉取必要的镜像库到本地。 在拉取之前,先配下镜像加速 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"registry-mirrors": [&qu…...
《数据结构之美--二叉树》
一:引言: 上次我们学习了栈和队列这两个数据结构,今天我们来学习一个新的数据结构–二叉树中的堆。 堆其实就是一种特殊的二叉树,具有二叉树的性质的同时,还具有其他的性质。 那么在学习堆之前还是先来了解一下树。 …...
Prompt Engineering 提示工程:释放大语言模型潜力的关键技术与实践指南
提示工程:释放大语言模型潜力的关键技术与实践指南 提示工程(Prompt Engineering)作为与大型语言模型(LLM)交互的核心技术,已成为AI应用开发的关键技能。本文将系统介绍提示工程的定义与发展历程,深入剖析其核心知识点,提供实用的设计框架与技巧,并通过丰富的实战案例展示…...
std::print 和 std::println
一、基本概念 std::print 和 std::println 是 C23 新增的格式化输出函数,旨在替代传统的 std::cout 链式调用。它们基于 std::format 实现,支持类型安全的格式化字符串,语法更简洁,性能更优15。 功能特点: 直接输出到…...
高压直流输电MATLAB/simulink仿真模型+说明文档
1.模型简介 本仿真模型基于MATLAB/Simulink(版本MATLAB 2018Ra)软件。建议采用matlab2018 Ra及以上版本打开。(若需要其他版本可联系代为转换) 使用一个传输功率为1000MW(500 kV,2 kA)直流互连…...
第十四章-PHP与HTTP协议
第十四章-PHP与HTTP协议 一,HTTP 协议详解 HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最广泛的协议之一,用于客户端(如浏览器)与服务器之间的通信。它是 Web 技术的基石…...
【阿里云大模型高级工程师ACP学习笔记】2.6.用插件扩展答疑机器人的能力边界
一、学习目标 备考阿里云大模型高级工程师ACP认证,深入学习《2.6.用插件扩展答疑机器人的能力边界》这部分内容,主要期望达成以下目标: 理解智能体应用核心概念:理解智能体(Agent)应用的核心概念,包括其如何拓展大模型能力,突破传统答疑机器人局限。掌握构建Agent系统…...
用远程代理模式轻松实现远程服务调用,打开编程新大门
通过远程代理来实现一个简易的远程过程调用实例。带你打开新的大门。 Socket 远程代理服务案例 基于 Socket 的远程服务,我们需要完成以下步骤: 服务端实现:创建一个远程服务,通过 Socket 接受客户端请求并提供计算服务。 客户端…...
(001)Excel 快捷键
文章目录 时间 时间 当前日期:ctrl ; (分号)。当前时间:ctrl Shift ; (分号)。...
TMI投稿指南(二):投稿文章注意事项
文章结构: https://journals.ieeeauthorcenter.ieee.org/create-your-ieee-journal-article/create-the-text-of-your-article/structure-your-article/ 补充材料:准备补充材料 - IEEE 作者中心期刊 --- Prepare Supplementary Materials - IEEE Author…...
从困局到破局的AI+数据分析
从困局到破局的AI数据分析 困局:数据分析的四道高墙破局:AI赋能全流程数据分析远见:AI数据分析的革命性意义 数据是新时代的石油,人工智能是炼油厂。当两者强强联合,一场数据分析的革命正悄然发生。 多少次你面对Excel…...
12. RANSAC点云多平面拟合分割
本文看了博客RANSAC点云多平面拟合分割-CSDN博客的文章,该博客将多平面拟合分割讲的很详细了,这里只是作为笔记用。 1.RANSAC算法原理 三维平面拟合(最小二乘法) 具体实现见下面代码: def SVD(points):# 二维&#…...
Prompt
提示工程指南 | Prompt Engineering GuideGoogle 官方提示工程 (Prompt Engineering)白皮书 | 宝玉的分享https://www.geeksforgeeks.org/what-is-prompt-engineering-the-ai-revolution/Prompt Engineering for Reasoning ModelsPrompt Engineering with Reasoning Models 1.p…...
[特殊字符] SpringCloud项目中使用OpenFeign进行微服务远程调用详解(含连接池与日志配置)
📚 目录 为什么要用OpenFeign? 在cart-service中整合OpenFeign 2.1 引入依赖 2.2 启用OpenFeign 2.3 编写Feign客户端 2.4 调用Feign接口 开启连接池,优化Feign性能 3.1 引入OkHttp 3.2 配置启用OkHttp连接池 3.3 验证连接池生效 Feign最佳…...
迈瑞医疗:国际业务增长21.28% 发展中国家成重要增长引擎
4月28日,迈瑞医疗(300760.SZ)发布2024年年度报告。报告期内,公司实现营业收入367.26亿元,同比增长5.14%;实现归母净利润116.68亿元,同比增长0.74%;经营活动产生的现金流量净额124.25…...
「地平线」创始人余凯:自动驾驶尚未成熟,人形机器人更无从谈起
温馨提示:运营团队2025年最新原创报告(共210页) —— 正文: 近日,国内智驾芯片上市公司[地平线]创始人兼CEO余凯(先生)接受腾讯新闻访谈时,提到如今大火的人形机器人,核…...
R 语言科研绘图第 43 期 --- 桑基图-冲击
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.weixin.qq.c…...
SpringBoot应用原生或docker镜像容器集成Skywalking
相关组件及版本 序号 组件 版本 备注 1 skywalking-oap-server 8.9.1 2 elasticsearch 7.17.6 3 skywalking-ui 8.9.1 4 apache-skywalking-java-agent 8.15.0 一、JAR包方式部署服务 下载apache-skywalking-java-agent jar文件 使用如下名称执行 java \ -j…...
模板--进阶
1. 非类型模板参数 模板解决了两类问题 1控制数据类型 2控制某种设计逻辑 类域可以直接访问什么? 1static修饰的静态成员变量 2typedef定义的内嵌类型 3 内部类 下面我们就要引出一个模板的知识点----------再用类模板的时候从类模板里面去取东西的时候 要…...
PostgreSQL无法查看表中数据问题排查
在 PostgreSQL 中,恢复数据库后,使用 DBeaver 等工具可以看到数据库和表名,但无法查询到表中数据,可能是以下原因之一。以下是可能的原因和解决方法: 1. 恢复未完全成功 原因:数据库恢复过程中可能未完全成…...
实验研究 | 千眼狼高速摄像机驱动精密制造创新
研究背景 小模数齿轮作为精密制造领域的核心组件,以“结构紧凑、重量轻、精度高”等优势,广泛应用于航空航天、工业机器人、精密仪器、医疗设备、新能源和微电机等领域。传统抛光技术效率低、成本高、表面质量不足,电解等离子体抛光技术&am…...
AWS虚拟专用网络全解析:从基础到高级实践
导语 AWS虚拟专用网络是连接企业本地数据中心与AWS云环境的关键桥梁。本文将深入探讨AWS VPN的核心概念、配置方法、最佳实践以及常见问题解决方案,助您构建安全、可靠的混合云网络架构。 一、AWS VPN概述 1. 定义 AWS VPN是一种网络服务,允许用户通过加密隧道将本地网络…...
工业园区工厂企业数字IP广播应急呼叫对讲系统:数字IP广播极大提升工厂企业管理效率与应急响应效能
工业园区工厂企业数字IP广播应急呼叫对讲系统:数字IP广播极大提升工厂企业管理效率与应急响应效能 北京海特伟业科技有限公司任洪卓发布于2025年4月28日 在数字化转型浪潮下,IP应急广播呼叫对讲广播系统凭借其网络化、智能化、融合化、多元化等优势,已…...
我的HTTP和HTTPS
注释:本文章架构跟随小林coding,在此基础上加深个人理解 小林coding:https://xiaolincoding.com/network/2_http/http_interview.html HTTP基本概念 HTTP是什么? http的中文名是超文本传输协议,超文本就是html&…...
python_股票月数据趋势判断
目录 前置 代码 视频&月数据 前置 1 A股月数据趋势大致判断,做一个粗略的筛选 2 逻辑: 1)取最近一次历史最高点 2)以1)中最高点为分界点,只看右侧数据,取最近一次最低点 3…...
计算机考研精炼 计网
第 19 章 计算机网络体系结构 19.1 基本概念 19.1.1 计算机网络概述 1.计算机网络的定义、组成与功能 计算机网络是一个将分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。 …...
大数据应用开发和项目实战-Matplotlib
Matplotlib的介绍 Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。 Matplotlib 可以用来绘制各种静态,动态,交互式的图表。比如说散点图、柱状图等等。 Matplotlib的安装与…...
SQLMesh CLI 实战教程: 构建和维护数据转换管道的快速指南
在数据工程领域,构建和维护数据转换管道是一项复杂而关键的任务。SQLMesh 是一个强大的工具,可以帮助你简化这一过程。本文将带你快速了解如何使用 SQLMesh CLI 来构建和维护数据转换管道。本文的目标是在 30 分钟或更短的时间内,让你熟悉 SQ…...
行政区划代码
本文数据来源:中华人民共和国民政部 在平常数据研究和开发中,经常会用到行政区划代码。而行政区划代码的使用,因年份不同可能也不尽完全相同。故整理了1980年到2024年所有的行政区划代码。 这样不仅仅适用于研究区划代码的变更研究…...
Spring生命周期
在Spring框架中,Bean的生命周期指的是从Bean的创建到销毁的整个过程。这个过程包括了多个阶段,每个阶段都有特定的操作。下面是一个典型的Spring Bean生命周期的概述: 一. 实例化(Instantiation) 当Spring容器启动时&…...
前端连接websocket服务报错 Unexpected response code: 301
前端连接websocket服务报错 Unexpected response code: 301 引直连测试301重定向修改nginx配置 引 websocket后端服务正常,监听正常,可以通过简单的前端代码进行连接,但是通过nginx反向代理后报错Error during WebSocket handshake: Unexpec…...
C语言(5)—操作符详解
文章目录 一、操作符分类概览二、二进制与进制转换2.1 进制基本概念 三、原码、反码与补码3.1 基本概念 四、位操作符详解 一、操作符分类概览 C语言中的操作符可以分为以下几大类: 算术操作符:, -, *, /, % 移位操作符:<<, >>…...
ubuntu新增磁盘挂载
1. 确认新磁盘 使用 lsblk 命令查看系统中所有的块设备,找出新增的磁盘。 rootzzwl:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 60G 0 disk ├─sda1 8:1 0 …...
【计网】计算机网络的类别与性能
一、计算机网络的分类 计算机网络可以根据不同的标准进行分类。下面是两种常见的分类方法: 1.按照网络的作用范围进行分类 广域网 (WAN): 广域网覆盖的范围非常广泛,通常跨越城市、国家或甚至是全球。WAN主要用于连接地理位置相隔较远的计算机和网络设…...
Field访问对象int字段,对象访问int字段,通过openjdk17 C++源码看对象字段访问原理
在Java反射机制中,访问对象的int类型字段值(如field.getInt(object))的底层实现涉及JVM对内存偏移量的计算与直接内存访问。本文通过分析OpenJDK 17源码,揭示这一过程的核心实现逻辑。 一、字段偏移量计算 1. Java层初始化偏移量…...
香橙派打包qt文件报错“xcb 插件无法加载”与“QObject::moveToThread”线程错误的解决方案
PyQt 报错总结:打包文件过程,“xcb 插件无法加载”与“QObject::moveToThread”线程错误的解决方案全解析 在使用 PyQt5 搭建图形界面时,打包文件的过程中出现的问题,真难绷,搞了半天。 Qt 平台插件 xcb 无法加载QOb…...
Flutter 学习之旅 之 flutter 作为 module ,在 Android 的界面中嵌入Flutter界面功能的简单整理
Flutter 学习之旅 之 flutter 作为 module ,在 Android 的界面中嵌入Flutter界面功能的简单整理 目录 Flutter 学习之旅 之 flutter 作为 module ,在 Android 的界面中嵌入Flutter界面功能的简单整理 一、简单介绍 二、在同一个布局中同时显示 Androi…...
在android 系统上qnn sdk转换,运行模型示例
前面讲了如何配置qnn sdk的环境,这一篇总结下qnn 实际转换一个onnx 模型,并运行的实现步骤。 设备: 1. ubuntu22.04 的Linux 服务器。 2. 一台android手机。 一、下载模型 from optimum.onnxruntime import ORTModelForSequenceClassifi…...
docker安装Canal1.1.5,MySQL5.7踩坑
docker安装Canal 前情提示安装MySQLdocker安装MySQL1. 拉取镜像2. 创建容器映射宿主机目录3. docker run 配置mysql重启mysql新建canal用户 安装Canal创建docker网络安装Canal1.拉取canal镜像2.创建目录3.运行容器 踩坑问题1 前情提示 关于版本问题,官方也没有详细…...
SpringBoot 接口国际化i18n 多语言返回 中英文切换 全球化 语言切换
介绍 Spring Boot通过MessageSource接口来实现国际化,它可以加载不同的消息资源文件,通常是.properties格式。通过定义不同的语言文件(例如:messages_en.properties、messages_zh.properties等),可以根据用…...
C++ 嵌套类 (详解 一站式讲解)
目录 嵌套类 嵌套类的定义 嵌套类结构的访问权限 pimpl模式(了解) 嵌套类 嵌套类的定义 首先介绍两个概念: 类作用域(Class Scope) 类作用域是指在类定义内部的范围。在这个作用域内定义的成员(包括…...
EasyCVR视频汇聚平台助力大型生产监控项目摄像机选型与应用
一、方案背景 在300路大型生产监控项目中,由于生产环境复杂多样,涵盖室外厂区、大型车间、室内办公区域等不同场景,单一类型的摄像机难以满足全方位、精细化的监控需求。EasyCVR作为一款功能强大的视频融合管理平台,具备灵活的视…...
解决leensa无法使用的办法:平替教程
Leensa已经完全连不上,并显示超时,至于之前有传言称他们会恢复服务也完全是无稽之谈。 那么,Leensa停止服务后,广大的外贸人,设计人,留学生以及技术人学习,查资料以及开发客户该怎么办呢&#…...
算法思想之哈希表
欢迎拜访:雾里看山-CSDN博客 本篇主题:算法思想之哈希表 发布时间:2025.4.28 隶属专栏:算法 目录 算法介绍哈希表作用什么时候使用哈希表怎么使用哈希表 例题两数之和题目链接题目描述算法思路代码实现 判定是否互为字符重排题目链…...