電子衍射模擬:基于GPU加速的MATLAB/Julia實現

點擊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)=Δz1?exp[λΔz?r2] 是自由空間傳播函數
  • σ\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(M?N2logN)。當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=TGPU?TCPU??1NCPU?cores??×fGPU?fCPU??×η

其中η\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)(…