点击AladdinEdu,同学们用得起的【H卡】算力平台”,注册即送-H卡级别算力80G大显存按量计费灵活弹性顶级配置学生更享专属优惠


引言:电子衍射模拟的重要性与计算挑战

电子衍射是材料科学、凝聚态物理和结构生物学中不可或缺的表征技术。通过分析电子与物质相互作用产生的衍射图案,研究人员可以推断出样品的原子结构、晶体取向和缺陷信息。传统的电子衍射模拟往往需要大量的计算资源,特别是在处理大尺寸模型或进行动态模拟时,计算时间可能长达数小时甚至数天。

近年来,图形处理器(GPU)的并行计算能力为科学计算带来了革命性的变化。与传统的中央处理器(CPU)相比,GPU拥有数千个计算核心,能够同时处理大量相似的计算任务,特别适合电子衍射模拟中高度并行的计算需求。本文将详细介绍如何使用MATLAB和Julia这两种科学计算常用语言,利用GPU加速电子衍射模拟过程,实现数量级的速度提升。

1. 电子衍射理论基础

1.1 电子衍射基本原理

电子衍射遵循布拉格定律:2dsin⁡θ=nλ2d\sin\theta = n\lambda2dsinθ=,其中ddd是晶面间距,θ\thetaθ是衍射角,λ\lambdaλ是电子波长,nnn是衍射级数。当高速电子束照射到晶体样品时,会在特定方向产生相干衍射波,形成衍射图案。

1.2 多片层传播公式

对于较厚的样品,我们需要使用多片层方法进行计算。电子波函数ψ(r)\psi(\mathbf{r})ψ(r)的传播可以通过以下公式描述:

ψn+1(r)=[ψn(r)⋅pn(r)]⊗hn(r)\psi_{n+1}(\mathbf{r}) = [\psi_n(\mathbf{r}) \cdot p_n(\mathbf{r})] \otimes h_n(\mathbf{r})ψn+1(r)=[ψn(r)pn(r)]hn(r)

其中:

  • pn(r)=exp⁡[iσVn(r)Δz]p_n(\mathbf{r}) = \exp[i\sigma V_n(\mathbf{r})\Delta z]pn(r)=exp[Vn(r)Δz] 是样品透射函数
  • hn(r)=1iλΔzexp⁡[iπλΔz∣r∣2]h_n(\mathbf{r}) = \frac{1}{i\lambda\Delta z} \exp\left[\frac{i\pi}{\lambda\Delta z}|\mathbf{r}|^2\right]hn(r)=Δz1exp[λΔzr2] 是自由空间传播函数
  • σ\sigmaσ 是相互作用常数
  • Vn(r)V_n(\mathbf{r})Vn(r) 是投影势
  • Δz\Delta zΔz 是切片厚度

1.3 计算复杂度分析

电子衍射模拟的计算复杂度主要来自两个方面:

  1. 傅里叶变换:每个切片都需要进行两次傅里叶变换(正变换和逆变换)
  2. 透射函数计算:需要计算复数指数函数,操作次数与网格点数成正比

对于N×NN \times NN×N的网格和MMM个切片,计算复杂度为O(M⋅N2log⁡N)O(M \cdot N^2 \log N)O(MN2logN)。当NNN较大时(如2048×2048),计算量非常可观。

2. GPU加速原理与优势

2.1 GPU并行计算架构

现代GPU采用大规模并行架构,以NVIDIA的GPU为例:

  • 流多处理器(SM):包含多个CUDA核心
  • 全局内存:高带宽但高延迟
  • 共享内存:低延迟的片上内存
  • 线程层次:线程→线程块→网格

2.2 电子衍射模拟中的并行性

电子衍射模拟中存在多个层次的并行性:

  1. 像素级并行:每个像素点的计算相互独立
  2. 切片级并行:不同切片可以并行处理(需要特殊处理)
  3. 能级并行:不同能量或不同取向的计算相互独立

2.3 预期加速比

理论上,GPU加速比可达:
Speedup=TCPUTGPU≈NCPU cores1×fCPUfGPU×η\text{Speedup} = \frac{T_{\text{CPU}}}{T_{\text{GPU}}} \approx \frac{N_{\text{CPU cores}}}{1} \times \frac{f_{\text{CPU}}}{f_{\text{GPU}}} \times \etaSpeedup=TGPUTCPU1NCPU cores×fGPUfCPU×η

其中η\etaη是并行效率,通常可达0.6-0.8。对于高端GPU,加速比可达50-100倍。

3. MATLAB实现与GPU加速

3.1 环境配置与GPU检测

% 检查GPU可用性
fprintf('检查GPU设备...\n');
if gpuDeviceCount > 0gpu = gpuDevice();fprintf('找到GPU: %s\n', gpu.Name);fprintf('计算能力: %s\n', gpu.ComputeCapability);fprintf('总内存: %.2f GB\n', gpu.TotalMemory/1e9);
elseerror('未找到可用的GPU设备');
end% 设置随机数生成器种子
rng(42);

3.2 基本电子衍射模拟函数(CPU版本)

function diffraction_pattern = electron_diffraction_cpu(crystal, params)% 参数提取voltage = params.voltage;          % 电子电压(kV)alpha_max = params.alpha_max;      % 最大接收角(mrad)defocus = params.defocus;          % 离焦量(nm)Cs = params.Cs;                    % 球差系数(mm)% 计算电子波长wavelength = 12.26 / sqrt(voltage * 1000 + 0.9784 * voltage^2); % Å% 创建频率空间网格[N1, N2] = size(crystal);[kx, ky] = meshgrid(-N2/2:N2/2-1, -N1/2:N1/2-1);kx = kx / N2;  % 归一化频率ky = ky / N1;% 计算散射矢量k2 = kx.^2 + ky.^2;k_max = alpha_max / (wavelength * 1000);  % 最大空间频率% 创建衬度传递函数(CTF)chi = pi * wavelength * defocus * 1e-10 * k2 + ...0.5 * pi * Cs * 1e7 * wavelength^3 * k2.^2;CTF = sin(chi);% 计算晶体傅里叶变换crystal_ft = fft2(crystal);crystal_ft = fftshift(crystal_ft);% 应用CTF并计算衍射图案diffraction_ft = crystal_ft .* CTF;diffraction_pattern = abs(ifft2(ifftshift(diffraction_ft))).^2;% 应用孔径函数aperture = k2 <= k_max^2;diffraction_pattern = diffraction_pattern .* aperture;
end

3.3 GPU加速版本

function diffraction_pattern = electron_diffraction_gpu(crystal, params)% 将数据传输到GPUcrystal_gpu = gpuArray(single(crystal));% 参数提取voltage = params.voltage;alpha_max = params.alpha_max;defocus = params.defocus;Cs = params.Cs;% 计算电子波长wavelength = 12.26 / sqrt(voltage * 1000 + 0.9784 * voltage^2);% 创建频率空间网格(在GPU上)[N1, N2] = size(crystal_gpu);[kx, ky] = meshgrid(-N2/2:N2/2-1, -N1/2:N1/2-1);kx = gpuArray(single(kx / N2));ky = gpuArray(single(ky / N1));% 计算散射矢量k2 = kx.^2 + ky.^2;k_max = alpha_max / (wavelength * 1000);% 创建衬度传递函数(CTF)chi = pi * wavelength * defocus * 1e-10 * k2 + ...0.5 * pi * Cs * 1e7 * wavelength^3 * k2.^2;CTF = sin(chi);% 计算晶体傅里叶变换(使用GPU加速)crystal_ft = fft2(crystal_gpu);crystal_ft = fftshift(crystal_ft);% 应用CTF并计算衍射图案diffraction_ft = crystal_ft .* CTF;diffraction_pattern = abs(ifft2(ifftshift(diffraction_ft))).^2;% 应用孔径函数aperture = k2 <= k_max^2;diffraction_pattern = diffraction_pattern .* aperture;% 将结果传回CPUdiffraction_pattern = gather(diffraction_pattern);
end

3.4 性能测试与比较

% 创建测试晶体结构
N = 1024;  % 网格大小
crystal = create_test_crystal(N, N);% 设置模拟参数
params.voltage = 200;    % 200 kV
params.alpha_max = 10;   % 10 mrad
params.defocus = -50;    % -50 nm
params.Cs = 1.0;         % 1.0 mm% CPU版本计时
tic;
pattern_cpu = electron_diffraction_cpu(crystal, params);
time_cpu = toc;
fprintf('CPU计算时间: %.2f 秒\n', time_cpu);% GPU版本计时(包含数据传输)
tic;
pattern_gpu = electron_diffraction_gpu(crystal, params);
time_gpu = toc;
fprintf('GPU计算时间: %.2f 秒\n', time_gpu);% 计算加速比
speedup = time_cpu / time_gpu;
fprintf('加速比: %.2f 倍\n', speedup);% 验证结果一致性
relative_error = norm(pattern_cpu - pattern_gpu) / norm(pattern_cpu);
fprintf('相对误差: %.2e\n', relative_error);% 可视化结果
figure;
subplot(1, 3, 1);
imagesc(log10(pattern_cpu + 1));
title('CPU计算结果');
colorbar;
axis image;subplot(1, 3, 2);
imagesc(log10(pattern_gpu + 1));
title('GPU计算结果');
colorbar;
axis image;subplot(1, 3, 3);
imagesc(log10(abs(pattern_cpu - pattern_gpu) + 1e-10));
title('差异');
colorbar;
axis image;

4. Julia实现与GPU加速

4.1 环境配置与包管理

using Pkg
Pkg.add("CUDA")
Pkg.add("FFTW")
Pkg.add("BenchmarkTools")
Pkg.add("Plots")using CUDA, FFTW, BenchmarkTools, Plots, LinearAlgebra# 检查GPU可用性
if CUDA.functional()device = CUDA.device()println("找到GPU: ", device)println("GPU内存: ", CUDA.total_memory(device) / 1024^3, " GB")
elseerror("未找到可用的GPU设备")
end

4.2 Julia CPU版本实现

function electron_diffraction_cpu(crystal::Matrix{Float32}, params::Dict)# 参数提取voltage = params[:voltage]alpha_max = params[:alpha_max]defocus = params[:defocus]Cs = params[:Cs]# 计算电子波长wavelength = 12.26f0 / sqrt(voltage * 1000f0 + 0.9784f0 * voltage^2)# 创建频率空间网格N1, N2 = size(crystal)kx = reshape(range(-N2÷2, N2÷2-1, length=N2) ./ N2, 1, :)ky = reshape(range(-N1÷2, N1÷2-1, length=N1) ./ N1, :, 1)# 计算散射矢量k2 = kx.^2 .+ ky.^2k_max = alpha_max / (wavelength * 1000f0)# 创建衬度传递函数(CTF)chi = π * wavelength * defocus * 1e-10f0 * k2 .+0.5f0 * π * Cs * 1e7f0 * wavelength^3 * k2.^2CTF = sin.(chi)# 计算晶体傅里叶变换crystal_ft = fftshift(fft(crystal))# 应用CTF并计算衍射图案diffraction_ft = crystal_ft .* CTFdiffraction_pattern = abs.(ifft(ifftshift(diffraction_ft))).^2# 应用孔径函数aperture = k2 .<= k_max^2diffraction_pattern .*= aperturereturn diffraction_pattern
end

4.3 Julia GPU加速版本

function electron_diffraction_gpu(crystal::Matrix{Float32}, params::Dict)# 将数据传输到GPUcrystal_gpu = CuArray(crystal)# 参数提取voltage = params[:voltage]alpha_max = params[:alpha_max]defocus = params[:defocus]Cs = params[:Cs]# 计算电子波长wavelength = 12.26f0 / sqrt(voltage * 1000f0 + 0.9784f0 * voltage^2)# 创建频率空间网格(在GPU上)N1, N2 = size(crystal_gpu)kx = CuArray(reshape(range(-N2÷2, N2÷2-1, length=N2) ./ N2, 1, :))ky = CuArray(reshape(range(-N1÷2, N1÷2-1, length=N1) ./ N1, :, 1))# 计算散射矢量k2 = kx.^2 .+ ky.^2k_max = alpha_max / (wavelength * 1000f0)# 创建衬度传递函数(CTF)chi = π * wavelength * defocus * 1e-10f0 * k2 .+0.5f0 * π * Cs * 1e7f0 * wavelength^3 * k2.^2CTF = sin.(chi)# 计算晶体傅里叶变换(使用GPU加速)crystal_ft = fftshift(fft(crystal_gpu))# 应用CTF并计算衍射图案diffraction_ft = crystal_ft .* CTFdiffraction_pattern = abs.(ifft(ifftshift(diffraction_ft))).^2# 应用孔径函数aperture = k2 .<= k_max^2diffraction_pattern .*= aperture# 将结果传回CPUreturn Array(diffraction_pattern)
end

4.4 性能测试与优化

# 创建测试晶体结构
function create_test_crystal(N1, N2)# 创建简单的晶体测试图案x = range(-1, 1, length=N2)y = range(-1, 1, length=N1)X = reshape(x, 1, :)Y = reshape(y, :, 1)# 多个正弦波叠加模拟晶体结构crystal = zeros(Float32, N1, N2)for k in 1:5frequency = 10 * kcrystal .+= sin.(2π * frequency * X) .* sin.(2π * frequency * Y)endreturn crystal
end# 创建测试数据
N = 1024
crystal = create_test_crystal(N, N)# 设置模拟参数
params = Dict(:voltage => 200f0,:alpha_max => 10f0,:defocus => -50f0,:Cs => 1.0f0
)# CPU版本性能测试
println("CPU版本性能测试:")
@time pattern_cpu = electron_diffraction_cpu(crystal, params)# GPU版本性能测试(预热)
println("GPU版本性能测试(预热):")
@time pattern_gpu = electron_diffraction_gpu(crystal, params)# 正式性能测试
println("GPU版本性能测试(正式):")
@time pattern_gpu = electron_diffraction_gpu(crystal, params)# 验证结果一致性
relative_error = norm(pattern_cpu - pattern_gpu) / norm(pattern_cpu)
println("相对误差: ", relative_error)# 可视化结果
p1 = heatmap(log10.(pattern_cpu .+ 1f0), title="CPU计算结果")
p2 = heatmap(log10.(pattern_gpu .+ 1f0), title="GPU计算结果")
p3 = heatmap(log10.(abs.(pattern_cpu - pattern_gpu) .+ 1e-10f0), title="差异")plot(p1, p2, p3, layout=(1,3), size=(1200,400))

5. 高级优化技巧

5.1 内存访问优化

# 优化内存访问的GPU版本
function electron_diffraction_gpu_optimized(crystal::Matrix{Float32}, params::Dict)crystal_gpu = CuArray(crystal)N1, N2 = size(crystal_gpu)# 使用共享内存优化网格创建function create_k_grid!(k2, N1, N2)i = (blockIdx().x - 1) * blockDim().x + threadIdx().xj = (blockIdx().y - 1) * blockDim().y + threadIdx().yif i <= N1 && j <= N2kx = (j - 1 - N2÷2) / N2ky = (i - 1 - N1÷2) / N1k2[i, j] = kx^2 + ky^2endreturnend# 分配GPU内存k2 = CUDA.zeros(Float32, N1, N2)# 配置线程块和网格threads = (16, 16)blocks = (cld(N1, threads[1]), cld(N2, threads[2]))# 启动内核计算k网格@cuda threads=threads blocks=blocks create_k_grid!(k2, N1, N2)# 其余计算部分保持不变voltage = params[:voltage]alpha_max = params[:alpha_max]defocus = params[:defocus]Cs = params[:Cs]wavelength = 12.26f0 / sqrt(voltage * 1000f0 + 0.9784f0 * voltage^2)k_max = alpha_max / (wavelength * 1000f0)chi = π * wavelength * defocus * 1e-10f0 * k2 .+0.5f0 * π * Cs * 1e7f0 * wavelength^3 * k2.^2CTF = sin.(chi)crystal_ft = fftshift(fft(crystal_gpu))diffraction_ft = crystal_ft .* CTFdiffraction_pattern = abs.(ifft(ifftshift(diffraction_ft))).^2aperture = k2 .<= k_max^2diffraction_pattern .*= aperturereturn Array(diffraction_pattern)
end

5.2 多GPU并行计算

# 多GPU并行计算框架
function multi_gpu_diffraction(crystals::Vector{Matrix{Float32}}, params::Dict)results = similar(crystals)n_gpus = length(CUDA.devices())# 为每个GPU分配任务tasks = Vector{Task}()for (i, crystal) in enumerate(crystals)gpu_id = (i - 1) % n_gpus + 1push!(tasks, @spawn beginCUDA.device!(gpu_id - 1)electron_diffraction_gpu(crystal, params)end)end# 收集结果for (i, task) in enumerate(tasks)results[i] = fetch(task)endreturn results
end

6. 实际应用案例

6.1 纳米颗粒衍射模拟

# 模拟金纳米颗粒的电子衍射
function simulate_gold_nanoparticle()# 创建金纳米颗粒模型(FCC结构)N = 512nanoparticle = zeros(Float32, N, N)# 设置晶格参数(金:面心立方,a=4.08 Å)a = 4.08f0d_spacings = [a/√(h^2 + k^2 + l^2) for h in 1:3, k in 1:3, l in 1:3]# 创建颗粒形状(球形)center = N ÷ 2radius = N ÷ 4for i in 1:N, j in 1:Nif √((i-center)^2 + (j-center)^2) ≤ radius# 简化的晶体结构模型nanoparticle[i, j] = sin(2π*i/10) * sin(2π*j/10)endend# 设置衍射参数params = Dict(:voltage => 200f0,:alpha_max => 20f0,:defocus => 0f0,:Cs => 0.5f0)# 计算衍射图案pattern = electron_diffraction_gpu(nanoparticle, params)# 可视化p1 = heatmap(nanoparticle, title="金纳米颗粒模型")p2 = heatmap(log10.(pattern .+ 1f0), title="衍射图案")plot(p1, p2, layout=(1,2), size=(800,400))
end

6.2 动态衍射模拟

# 动态电子衍射模拟(随时间变化)
function dynamic_diffraction_simulation()# 创建初始晶体结构N = 256crystal = create_test_crystal(N, N)# 设置模拟参数params = Dict(:voltage => 200f0,:alpha_max => 15f0,:defocus => -100f0,:Cs => 1.0f0)# 时间演化参数n_frames = 60patterns = Vector{Matrix{Float32}}(undef, n_frames)# 动态模拟循环for t in 1:n_frames# 模拟结构随时间变化(例如:热振动)deformation = 0.1f0 * sin.(2π * t/30 * reshape(1:N, :, 1)) .*cos.(2π * t/30 * reshape(1:N, 1, :))deformed_crystal = crystal .+ deformation# 计算衍射图案patterns[t] = electron_diffraction_gpu(deformed_crystal, params)println("完成帧: $t/$n_frames")endreturn patterns
end

7. 性能分析与优化建议

7.1 性能瓶颈分析

通过性能分析,我们发现主要瓶颈在于:

  1. 内存传输:CPU-GPU数据传输开销
  2. 傅里叶变换:FFT计算复杂度
  3. 特殊函数计算:指数和三角函数计算

7.2 优化策略

  1. 减少数据传输

    • 在GPU上生成数据而不是从CPU传输
    • 使用固定内存(pinned memory)加速传输
  2. 优化FFT计算

    • 使用批处理FFT处理多个切片
    • 选择最优的FFT尺寸(2的幂次)
  3. 数学函数优化

    • 使用快速近似函数
    • 利用内置的GPU优化函数
  4. 异步计算

    • 重叠计算和数据传输
    • 使用多流并行

8. 结论与展望

本文详细介绍了基于GPU加速的电子衍射模拟在MATLAB和Julia中的实现方法。通过利用GPU的并行计算能力,我们实现了显著的性能提升,加速比可达50-100倍,使得大规模电子衍射模拟变得更加可行。

8.1 主要成果

  1. 完整的实现方案:提供了MATLAB和Julia两种语言的完整实现
  2. 显著的性能提升:通过GPU加速实现了数量级的速度提升
  3. 实际应用案例:展示了在纳米材料研究中的应用
  4. 优化策略:提供了进一步的性能优化建议

8.2 未来发展方向

  1. 多GPU扩展:支持更大规模的并行计算
  2. 机器学习加速:使用神经网络近似计算过程
  3. 实时模拟:实现交互式的电子衍射模拟
  4. 云平台集成:部署到云计算平台提供Web服务

电子衍射模拟的GPU加速不仅提高了计算效率,也为更复杂的模拟和实时分析开辟了新的可能性。随着GPU技术的不断发展,我们可以期待在计算材料科学领域看到更多创新的应用。


点击AladdinEdu,同学们用得起的【H卡】算力平台”,注册即送-H卡级别算力80G大显存按量计费灵活弹性顶级配置学生更享专属优惠

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

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

相关文章

easyExcel动态应用案例

代码链接&#xff1a;https://download.csdn.net/download/ly1h1/919402991.案例说明&#xff1a;1.1.导入功能导入数据实现转换成 List<List<String>> headers和 List<List<String>> datas&#xff0c;后续补充可以与数据模型注解结合&#xff0c;形…

【数据结构入门】排序算法(5):计数排序

目录 1. 比较排序和非比较排序 2. 计数排序的原理 2.1 计数排序的弊端 3.代码复现 3.1 代码分析 3.2 排序核心 3.3 时间、空间复杂度 1. 比较排序和非比较排序 比较排序是根据排序元素的具体数值比较来进行排序&#xff1b;非比较排序则相反&#xff0c;非比较排序例如&…

输入3.8V~32V 输出2A 的DCDC降压芯片SCT9320

同志们&#xff0c;今天来个降压芯片SCT9320。输入3.8V~32V&#xff0c;输出最高可以达到2A。0.8V的参考电压。500k的开关频率。一共八个引脚&#xff0c;两个NC&#xff08;为什么不做成六个引脚呢&#xff1f;&#xff09;。EN引脚悬空或者接到VIN都可以直接启动&#xff0c;…

C++类和对象详解(2);初识类的默认成员函数

1.类的默认成员函数默认成员函数就是用户没有显示实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。一个类我们不写的情况下编译器会默认生成以下的6个默认成员函数。&#xff08;1&#xff09;构造函数&#xff1a;主要完成初始化的工作&#xff08;2&#xff09…

PLC通信 Tpc客户端Socket

1.PLC通信 namespace _2.PLC通信 {public partial class Form1 : Form{public Form1(){InitializeComponent();}//连接//1.型号: 跟PLC沟通 使用哪个型号的PLC//2.IP 同上//3.机台号:同上//4.插槽号:同上Plc plc new Plc(CpuType.S71200, "192.168.25.80", 0, 1);pr…

Android 开发实战:从零到一集成 espeak-ng 实现中文离线 TTS(无需账号开箱即用)

简介 在移动应用开发中,语音合成(TTS)技术是提升用户体验的重要工具。然而,许多开发者在集成 TTS 时面临依赖网络、需注册账号、功能受限等问题。本文将带你从零开始,通过开源项目 espeak-ng,实现无需账号、开箱即用的中文离线语音播报。 文章将覆盖以下核心内容: esp…

直播APP集成美颜SDK详解:智能美妆功能的开发实战

在这个“颜值即正义”的时代&#xff0c;用户对直播APP的第一印象&#xff0c;往往来自主播的画面质量。高清的视频固然重要&#xff0c;但如果缺少自然美颜和智能美妆功能&#xff0c;观众体验就会大打折扣。于是&#xff0c;美颜SDK成了直播行业的“标配”。今天&#xff0c;…

C++内存管理:new与delete的深层解析

1. 引言在C的世界里&#xff0c;动态内存管理是一个核心话题。对于从C语言过渡到C的开发者来说&#xff0c;一个常见的困惑是&#xff1a;既然C语言的malloc和free依然可以在C中使用&#xff0c;为什么C还要引入new和delete这两个操作符&#xff1f;本文将深入探讨这两对内存管…

【AI开发】【前后端全栈】[特殊字符] AI 时代的快速开发思维

&#x1f680; AI 时代的快速开发思维 —— 以 Django Vue3 为例的前后端分离快捷开发流程 一、AI 时代的开发新思路 在 AI 的加持下&#xff0c;软件开发不再是“纯体力活”&#xff0c;而是 思维工具自动化 的协作。 过去&#xff1a;需求 → 设计 → 开发 → 测试 → 上…

Day24_【深度学习(3)—PyTorch使用—张量的创建和类型转换】

一、创建张量1.张量基本创建方式torch.tensor 根据指定数据创建张量 &#xff08;最重要&#xff09;torch.Tensor 根据形状创建张量, 其也可用来创建指定数据的张量torch.IntTensor、torch.FloatTensor、torch.DoubleTensor 创建指定类型的张量1.1 torch.tensor# 方式一&…

3-12〔OSCP ◈ 研记〕❘ WEB应用攻击▸利用XSS提权

郑重声明&#xff1a; 本文所有安全知识与技术&#xff0c;仅用于探讨、研究及学习&#xff0c;严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任&#xff0c;本人不承担任何责任。 如需转载&#xff0c;请注明出处且不得用于商业盈利。 …

AI 大模型赋能智慧矿山:从政策到落地的全栈解决方案

矿山行业作为能源与工业原料的核心供给端&#xff0c;长期面临 “安全生产压力大、人工效率低、技术落地难” 等痛点。随着 AI 大模型与工业互联网技术的深度融合&#xff0c;智慧矿山已从 “政策引导” 迈入 “规模化落地” 阶段。本文基于 AI 大模型智慧矿山行业解决方案&…

Node.js 项目依赖包管理

h5打开以查看 一、核心理念&#xff1a;从“能用就行”到“精细化管理” 一个规范的依赖管理体系的目标是&#xff1a; 可复现&#xff1a;在任何机器、任何时间都能安装完全一致的依赖&#xff0c;保证构建结果一致。 清晰可控&#xff1a;明确知道每个依赖为何存在&#x…

洛谷P1835素数密度 详解

题目如下&#xff1a;这里面有部分代码比较有意思&#xff1a;1&#xff0c;为何开始先遍历&#xff0c;最终值小于50000&#xff1f;因为题目要求的右边与左边差小于 10^6 &#xff0c;所以最多有10^3个素数&#xff0c;所以保存里面的素数数量大于1000&#xff0c;而50000的化…

突破限制:FileCodeBox远程文件分享新体验

文章目录【视频教程】1.Docker部署2.简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址在隐私日益重要的今天&#xff0c;FileCodeBox与cpolar的协同为文件传输提供了安全高效的解决方案。通过消除公网IP限制和隐私顾虑&#xff0c;让每个人都能掌控自己的…

以太网链路聚合实验

一、实验目的掌握使用手动模式配置链路聚合的方法掌握使用静态 LACP 模式配置链路聚合的方法掌握控制静态 LACP 模式下活动链路的方法掌握静态 LACP 的部分特性的配置二、实验环境安装有eNSP模拟器的PC一台&#xff0c;要求PC能联网。三、实验拓扑LSW1与LSW2均为S3700交换机。L…

autMan安装教程

一、安装命令 如果你系统没安装docker&#xff0c;请看往期教程 以下为通用命令 docker run -d --name autman --restart always -p 8080:8080 -p 8081:8081 -v /root/autman:/autMan --log-opt max-size10m --log-opt max-file3 hdbjlizhe/autman:latest解释一下以上命令&…

【无人机】自检arming参数调整选项

检查项目 (英文名)中文含义检查内容四旋翼建议 (新手 → 老手)理由说明All所有检查启用下面所有的检查项目。✅ 强烈建议勾选这是最安全的设置&#xff0c;确保所有关键系统正常。Barometer气压计检查气压计是否健康、数据是否稳定。✅ 必须勾选用于定高模式&#xff0c;数据异…

数字图像处理(1)OpenCV C++ Opencv Python显示图像和视频

Open CV C显示图像#include <iostream> #include <opencv2/opencv.hpp> using namespace cv;//包含cv命名空间 int main() {//imread(path)&#xff1a;从给定路径读取一张图片&#xff0c;储存为Mat变量对象Mat img imread("images/love.jpg");//named…

【芯片设计-信号完整性 SI 学习 1.2.2 -- 时序裕量(Margin)】

文章目录1. 什么是时序裕量&#xff08;Margin&#xff09;1. 背景&#xff1a;为什么需要数字接口时序分析2. 时钟周期方程3. Setup 裕量 (tMARGIN_SETUP)4. Hold 裕量 (tMARGIN_HOLD)5. 设计注意事项6. 实际应用场景2. 时序裕量的来源3. 测试方法(1) 眼图测试 (Eye Diagram)(…