【C++游戲引擎開發】《線性代數》(2):矩陣加減法與SIMD集成

一、矩陣加減法數學原理

1.1 定義

  • ?逐元素操作:運算僅針對相同位置的元素,不涉及矩陣乘法或行列變換。
  • ?交換律與結合律:
    加法滿足交換律(A + B = B + A)和結合律( ( A + B ) + C = A + ( B + C ) )。
    ?減法不滿足交換律(A ? B ≠ B ? A)。

1.2 公式

? C i j = A i j + B i j (矩陣加法) C_{ij} = A_{ij} + B_{ij} \quad \text{(矩陣加法)} Cij?=Aij?+Bij?(矩陣加法)
C i j = A i j ? B i j (矩陣減法) C_{ij} = A_{ij} - B_{ij} \quad \text{(矩陣減法)} Cij?=Aij??Bij?(矩陣減法)

?前提條件:兩個矩陣的行列數必須相同。


二、SIMD指令集簡介

2.1 AVX2基礎

  • 256位寄存器(__m256),單寄存器可存儲8個float
  • 關鍵指令:
_mm256_load_ps()    // 從對齊內存加載數據到寄存器  
_mm256_add_ps()     // 寄存器加法
_mm256_sub_ps()     // 寄存器減法  
_mm256_store_ps()   // 將寄存器數據存回內存  

2.2 頭文件

#include <immintrin.h>  // AVX指令集頭文件  

三、SIMD優化矩陣加法實現

3.1 內存管理與對齊

Matrix(size_t rows, size_t cols): rows_(rows), cols_(cols),data_(static_cast<float*>(_aligned_malloc(rows* cols * sizeof(float), kSimdAlignment))) {if (!data_) throw std::bad_alloc();// 顯式初始化內存為0std::memset(data_, 0, rows * cols * sizeof(float));
}~Matrix() { _aligned_free(data_); }
  • 功能:確保矩陣數據內存按32字節對齊(AVX2指令集要求)
  • ?關鍵點
    a) 使用 _aligned_malloc 分配對齊內存
    b) 析構時通過 _aligned_free 釋放內存
    c) 內存不足時拋出 bad_alloc 異常

3.2 二維下標訪問

class RowProxy {
public:float& operator[](size_t col) {if (col >= cols_) throw std::out_of_range("Column index out of range");return row_start_[col];}// ...
};RowProxy operator[](size_t row) {if (row >= rows_) throw std::out_of_range("Row index out of range");return RowProxy(data_ + row * cols_, cols_);
}
  • 設計目標:實現類似原生二維數組的 matrix[i][j] 語法
  • 實現原理
    a) operator[] 返回臨時代理對象 RowProxy
    b) 代理對象二次重載 operator[] 實現列訪問
    c) 每次訪問自動驗證行列索引合法性
  • 優勢
    a) 語法直觀:mat[1][2] = 3.0f;
    b) 安全性:自動邊界檢查
    c) 性能:代理對象輕量(僅存儲指針和列數)

3.3 SIMD優化加減法

Matrix add_simd(const Matrix& other) const {validate_dimension(other); // 維度校驗Matrix result(rows_, cols_);// AVX指令處理主體數據(每次8個float)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899281.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899281.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899281.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

openGauss關聯列數據類型不一致引起謂詞傳遞失敗

今天分享一個比較有意思的案例 注意&#xff1a;因為原始SQL很長&#xff0c;為了方便排版&#xff0c;簡化了SQL 下面SQL跑60秒才出結果&#xff0c;客戶請求優化 select dtcs.owner, dtcs.table_name, dtcs.column_name, dct.commentsfrom dba_tab_columns dtcsleft outer j…

01 相機標定與相機模型介紹

學完本文,您將了解不同相機模型分類、內參意義,及對應的應用代碼模型 標定的意義 建模三維世界點投影到二維圖像平面的過程。標定輸出的是相機模型。 相機模型 相機模型可以解理解為投影模型 +

Hyperlane:Rust Web開發的未來,釋放極致性能與簡潔之美

Hyperlane&#xff1a;Rust Web開發的未來&#xff0c;釋放極致性能與簡潔之美 你是否厭倦了復雜的Web框架&#xff0c;想要一個既高效又易用的工具來構建現代Web應用&#xff1f;Hyperlane正是你需要的答案&#xff01;作為專為Rust打造的輕量級、高性能HTTP服務器庫&#xf…

STM32學習筆記之振蕩器(原理篇)

&#x1f4e2;&#xff1a;如果你也對機器人、人工智能感興趣&#xff0c;看來我們志同道合? &#x1f4e2;&#xff1a;不妨瀏覽一下我的博客主頁【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸對你有幫助&#xff0c;可點贊 &#x1f44d;…

Stereolabs ZED Box Mini:機器人與自動化領域的人工智能視覺新選擇

在人工智能視覺技術快速發展的今天&#xff0c;其應用場景正在持續拓寬&#xff0c;從智能安防到工業自動化&#xff0c;從機器人技術到智能交通&#xff0c;各領域都在積極探索如何利用這一先進技術。而 Stereolabs 推出的ZED Box Mini&#xff0c;正是一款專為滿足這些多樣化…

K8S學習之基礎五十九:部署gitlab服務

部署gitlab docker pull gitlab/gitlab-ce:latest docker tag gitlab/gitlab-ce:latest 172.16.80.140/gitlab/gitlab-ce:latest docker push 172.16.80.140/gitlab/gitlab-ce:latest docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /home/…

多線程 --- 多線程編程

在寫代碼的時候&#xff0c;可以使用多進程進行并發編程&#xff08;在Java中&#xff0c;不太推薦&#xff0c;很多很多關于進程相關的API&#xff0c;在Java標準庫中&#xff0c;都沒有提供&#xff09;&#xff0c;也可以使用多線程進行并發編程&#xff08;系統提供了多線程…

HTML~視頻音頻在網頁中不能自動播放

問題&#xff1a; autoplay是打開自動播放&#xff0c;但是發現加了關鍵詞還是沒有反應 原因&#xff1a; 現在瀏覽器禁止自動播放&#xff08;特別是帶聲音的&#xff09; 解決辦法&#xff1a; 可以添加muted 進行沒有聲音的自動播放

vue中上傳接口file表單提交二進制文件流

1.使用elementui上傳組件 要做一個選擇文件后&#xff0c;先不上傳&#xff0c;等最后點擊確定后&#xff0c;把file二進制流及附加參數一起提交上去。 首先使用elementui中的上傳組件&#xff0c;設置auto-uploadfalse&#xff0c;也就是選擇文件后不立刻上傳。 <el-uplo…

Flutter環境配置

配置環境變量 PUB_HOSTED_URLhttps://pub.flutter-io.cnFLUTTER_STORAGE_BASE_URLhttps://storage.flutter-io.cn 這個命令是用來配置 Flutter 的鏡像源地址&#xff0c;主要是為了解決在中國大陸地區訪問 Flutter 官方資源較慢的問題。 具體的操作如下&#xff1a; 右鍵點…

ngx_http_index_set_index

定義在 src\http\modules\ngx_http_index_module.c static char * ngx_http_index_set_index(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) {ngx_http_index_loc_conf_t *ilcf conf;ngx_str_t *value;ngx_uint_t i, n;ngx_http_inde…

數據庫的視圖有什么用?

數據庫的視圖&#xff08;View&#xff09;是一種虛擬表&#xff0c;它的內容由查詢定義&#xff0c;并不實際存儲數據&#xff0c;而是動態生成。視圖的主要作用如下&#xff1a; 1. 簡化復雜查詢 場景&#xff1a;當查詢涉及多表連接、復雜過濾或聚合操作時&#xff0c;SQL …

Ubuntu 24.04 安裝 Docker 詳細教程

前言 Docker 是目前最流行的容器化技術&#xff0c;它可以幫助開發者快速部署和運行應用程序。本文將詳細介紹在 Ubuntu 24.04 (Noble Numbat) 上安裝 Docker 的完整步驟&#xff0c;包括配置鏡像加速等實用技巧。 一、準備工作 1.1 系統要求 Ubuntu 24.04 LTS 具有 sudo 權…

鴻蒙進行視頻上傳,使用 request.uploadFile方法

一.拉起選擇器進行視頻選擇&#xff0c;并且創建文件名稱 async getPictureFromAlbum() {// 拉起相冊&#xff0c;選擇圖片let PhotoSelectOptions new photoAccessHelper.PhotoSelectOptions();PhotoSelectOptions.MIMEType photoAccessHelper.PhotoViewMIMETypes.VIDEO_TY…

C++ map容器總結

map基本概念 簡介&#xff1a; map中所有元素都是pair pair中第一個元素為key&#xff08;鍵值&#xff09;&#xff0c;起到索引作用&#xff0c;第二個元素為value&#xff08;實值&#xff09; 所有元素都會根據元素的鍵值自動排序 本質&#xff1a; map/multimap屬于關…

【Zookeeper搭建(跟練版)】Zookeeper分布式集群搭建

&#xff08;一&#xff09;克隆前的準備 1. 用 xftp 發送文件 2. 時間同步&#xff1a; sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 3. zookpeeper 安裝 部署 呼應開頭發送的壓縮包&#xff0c;解壓&#xff1a; cd ~ tar -zxvf zookeeper-3.4.6.tar.g…

Flutter項目之頁面實現以及路由fluro

目錄&#xff1a; 1、項目代碼結構2、頁面編寫以及路由配置main.dart(入口文件)page_content.dartindex.dart&#xff08;首頁&#xff09;application.dart&#xff08;啟動加載類&#xff09;pubspec.yaml&#xff08;依賴配置文件&#xff09;login.dart&#xff08;登錄頁&…

記錄Jmeter 利用BeanShell 腳本解析JSON字符串

下載org.json包(文檔說明) #下載地址 https://www.json.org/ # github 地址 https://github.com/stleary/JSON-java # api 文檔說明 https://resources.arcgis.com/en/help/arcobjects-java/api/arcobjects/com/esri/arcgis/server/json/JSONObject.htmlBeanShell腳本 import…

uniapp動態循環表單校驗失敗:初始值校驗

問題現象 &#x1f4a5; 在實現動態增減的單價輸入表單時&#xff08;基于uv-form組件&#xff09;&#xff0c;遇到以下詭異現象&#xff1a; <uv-input>的v-model綁定初始值為數字類型時&#xff0c;required規則失效 ?數字類型與字符串類型校驗表現不一致 &#x1…

UML 圖六種箭頭含義詳解:泛化、實現、依賴、關聯、聚合、組合

目錄 一、泛化&#xff08;Generalization&#xff09; 概念 表示方法 二、實現&#xff08;Realization&#xff09; 概念 表示方法 三、依賴&#xff08;Dependency&#xff09; 概念 表示方法 四、關聯&#xff08;Association&#xff09; 概念 表示方法 五、…