99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

數(shù)據(jù)驅(qū)動+SIMD:粒子系統(tǒng)內(nèi)存布局優(yōu)化與百倍性能提升實戰(zhàn)

數(shù)據(jù)驅(qū)動+SIMD:粒子系統(tǒng)內(nèi)存布局優(yōu)化與百倍性能提升實戰(zhàn) 一個朋友找我調(diào)過一個工業(yè)仿真系統(tǒng)里的粒子更新邏輯。從算法上看它簡單到不能再簡單——一個for循環(huán)每個粒子做一次牛頓力學(xué)更新整體復(fù)雜度就是標準的O(n)。但跑起來就是慢50萬粒子一幀更新要120毫秒CPU占用還忽高忽低厲害的時候幀率直接掉到十幾。我打開性能剖析一看cache-misses高得離譜branch-misses快20%了。說實話這類問題我在不止一個項目里見過性能瓶頸根本不在算法本身而在你壓根沒用數(shù)據(jù)驅(qū)動的方式去組織內(nèi)存。這篇文章我會用這個真實案例完整拆解一遍從對象思維到數(shù)據(jù)驅(qū)動、配合SIMD向量化做內(nèi)存布局優(yōu)化最后拿到工業(yè)級百倍性能提升的全過程。內(nèi)容不挑平臺搞游戲引擎、圖像處理、工業(yè)仿真或者高頻交易系統(tǒng)的朋友應(yīng)該都能從中找到能直接抄作業(yè)的東西。1. 為什么性能瓶頸在內(nèi)存而不在算法數(shù)據(jù)驅(qū)動設(shè)計的第一課很多人一想到性能優(yōu)化第一反應(yīng)就是換算法、減復(fù)雜度。但在現(xiàn)代CPU上一個更普遍的現(xiàn)實是你的數(shù)據(jù)根本來不及喂給CPU算。不理解這一點后面所有優(yōu)化都容易跑偏。1.1 從一段“看著沒毛病”的粒子系統(tǒng)說起先看當(dāng)時那段代碼的簡化版。結(jié)構(gòu)體是一個標準的Particle對象里面放了位置、速度、質(zhì)量、生命周期、存活標記然后扔進std::vectorParticle里挨個遍歷struct Particle { float x, y, z; float vx, vy, vz; float mass; float life; bool alive; }; class ParticleSystem { public: void update(float dt) { for (Particle p : m_particles) { if (!p.alive) continue; p.vx (f_x / p.mass) * dt; p.vy (f_y / p.mass) * dt; p.vz (f_z / p.mass) * dt; p.x p.vx * dt; p.y p.vy * dt; p.z p.vz * dt; p.life - dt; if (p.life 0.0f) p.alive false; } } private: std::vectorParticle m_particles; };如果你只從“代碼規(guī)范”的角度看這段代碼沒有任何毛病封裝合理、邏輯清晰、甚至已經(jīng)加了“死亡粒子跳過”的優(yōu)化。但實際跑起來它就是慢。為什么因為你的CPU從來不會真的按“一個對象一個對象”去讀數(shù)據(jù)。它每次從內(nèi)存拿數(shù)據(jù)是64字節(jié)、64字節(jié)地拿這64字節(jié)叫做一個cache line。對象在這個數(shù)組里挨個排但每個對象你還塞了一個bool又因為對齊規(guī)則每個對象實際占40字節(jié)左右。一個64字節(jié)的緩存行放1個對象多一點。更麻煩的是當(dāng)粒子開始死亡alive字段變成false的粒子還留在數(shù)組中間遍歷時經(jīng)常是“讀一個活的跳一個死的再讀一個活的”大量緩存行加載上來真正用到的數(shù)據(jù)不到一半。問題就這么來了。1.2 CPU存儲層級與“緩存錢罐子”要徹底理解這個慢得先看一張現(xiàn)代CPU的存儲層級賬本。速度從快到慢大致是寄存器、L1緩存、L2緩存、L3緩存、內(nèi)存。它們之間的延遲差異不是一點點而是數(shù)量級的差距。存儲層級典型延遲一個極其粗略的類比寄存器不到1ns口袋里掏鑰匙L1緩存1ns左右手邊的文件抽屜L2緩存4ns左右跑到隔壁房間拿L3緩存12ns左右下樓去車里拿內(nèi)存80ns以上出門跑一趟便利店你可以把優(yōu)化代碼理解為你寫的每一行算法CPU真正計算的時間其實都很快大部分時間都耗在“從便利店把東西搬回來”這一步。如果你的程序訪問內(nèi)存的方式是東一榔頭西一棒子緩存行加載上來只能用三分之一那就是在大把大把浪費內(nèi)存帶寬。更形象點說內(nèi)存對你寫的循環(huán)是無情的它只認地址不認對象。誰和誰在地址上挨得近誰能被一起加載進緩存誰的性能就好。這就是數(shù)據(jù)驅(qū)動設(shè)計最底層的一句行話——“面向緩存編程”。1.3 對象思維是怎么把性能拖垮的面向?qū)ο蟊旧頉]有錯但盲目用對象組織一切熱數(shù)據(jù)有三個隱藏成本。第一個是數(shù)據(jù)離散。對象把每個粒子的所有字段打包在一起看似聚合了“一個粒子”的信息但如果一個循環(huán)只關(guān)心位置和速度你去把質(zhì)量、生命周期、存活標志一起讀上來就是白白浪費帶寬。信息量大不是問題問題是加載粒度是緩存行你只能整塊整塊地拿。第二個是分支預(yù)測懲罰。當(dāng)數(shù)組里有大量死亡粒子時那個if (!p.alive)的分支就變成一個非常難預(yù)測的分支。CPU往流水線里塞了一堆指令賭你下一次跳過還是執(zhí)行賭錯了就要把流水線沖洗掉重來——這個懲罰比緩存未命中還要隱蔽有時候占比高得嚇人。第三個是SIMD無法展開。這章先點到為止現(xiàn)代CPU支持一條指令同時算4個float或者8個float叫SIMD。但前提是你的數(shù)據(jù)在內(nèi)存里是緊密排列的同類型數(shù)據(jù)。如果你的是一個Particle對象數(shù)組里面隔一個結(jié)構(gòu)體才有一個float地址SIMD想發(fā)力也發(fā)不上來。所以對象思維最大的問題不是“類”這個抽象而是它默認把“邏輯上的內(nèi)聚”當(dāng)成了“內(nèi)存上的內(nèi)聚”。而CPU真正在乎的是后者。下面就從內(nèi)存布局的角度開始做第一輪重構(gòu)。2. 內(nèi)存布局優(yōu)化AoS到SoA結(jié)構(gòu)體數(shù)組與數(shù)組結(jié)構(gòu)體的本質(zhì)區(qū)別內(nèi)存布局優(yōu)化最核心的一步就是把數(shù)據(jù)從“以對象為中心”的組織方式翻轉(zhuǎn)為“以字段為中心”的組織方式。技術(shù)上管這兩種布局叫AoSArray of Structures對象數(shù)組和SoAStructure of Arrays數(shù)組對象。2.1 AoS與SoA的取舍各自解決什么問題先看兩種布局的代碼對比。AoS原本的做法struct Particle { float x, y, z; float vx, vy, vz; float mass; float life; bool alive; }; std::vectorParticle particles;SoA數(shù)據(jù)驅(qū)動后的做法struct ParticleSystem { std::vectorfloat x, y, z; std::vectorfloat vx, vy, vz; std::vectorfloat mass; std::vectorfloat life; std::vectoruint8_t alive; size_t alive_count 0; };AoS的好處是“一個對象的所有東西都在旁邊”cache局部性對單對象操作很友好代碼寫起來也自然。但對“批量遍歷同一字段”這種典型熱循環(huán)它完全不對路。SoA則把所有x放在一起、所有y放在一起、所有vx放在一起。以遍歷50萬個粒子更新位置為例AoS版本讀一個粒子要帶上40字節(jié)里你并不關(guān)心的質(zhì)量、生命等而SoA版本可以只把x數(shù)組整個順序讀一遍每一塊緩存行都裝滿了下一個粒子的x利用率接近100%。2.2 動手重構(gòu)粒子組件陣列這輪重構(gòu)我建議直接照著一個原則來把一個對象的所有字段拆成平行的數(shù)組數(shù)組下標就是對象的編號。這個下標你可以理解為“實體ID”或者“粒子ID”它不再需要存在內(nèi)存里因為循環(huán)變量本身就是ID。改造后的更新邏輯長這樣void update(float dt, float f_x, float f_y, float f_z) { for (size_t i 0; i alive_count; i) { float inv_mass 1.0f / mass[i]; vx[i] f_x * inv_mass * dt; vy[i] f_y * inv_mass * dt; vz[i] f_z * inv_mass * dt; x[i] vx[i] * dt; y[i] vy[i] * dt; z[i] vz[i] * dt; life[i] - dt; alive[i] (life[i] 0.0f); } }看到區(qū)別了嗎這里同時完成了幾個動作if分支從熱循環(huán)里消失了。甚至不需要在循環(huán)里判斷死活循環(huán)只跑前alive_count個。每個數(shù)組都是純float序列連續(xù)地址順序訪問緩存友好度直接拉滿。為下一步SIMD鋪好了路——每個數(shù)組都是同類型的連續(xù)內(nèi)存塊。有朋友會問那死掉的粒子怎么辦把它們直接留在原地再把末尾的活粒子搬過來覆蓋叫swap-and-pop俗稱“借尸還魂”。因為粒子之間沒有邏輯順序要求這是工業(yè)界最常見的做法void swap_remove(size_t idx) { --alive_count; if (idx ! alive_count) { std::swap(x[idx], x[alive_count]); std::swap(y[idx], y[alive_count]); std::swap(z[idx], z[alive_count]); std::swap(vx[idx], vx[alive_count]); std::swap(vy[idx], vy[alive_count]); std::swap(vz[idx], vz[alive_count]); std::swap(mass[idx], mass[alive_count]); std::swap(life[idx], life[alive_count]); } }這樣做的直接效果是數(shù)組前alive_count個永遠是活粒子更新循環(huán)不需要任何分支CPU的流水線可以全速推進。2.3 對齊、填充與分配器細節(jié)從AoS切換到SoA之后另一個必須考慮的點是內(nèi)存對齊。普通std::vectorfloat分配的起始地址通常對齊到16字節(jié)這對標量代碼綽綽有余但后面要用AVX2的話必須保證32字節(jié)對齊。C17里可以直接用aligned_alloc自定義對齊分配器或者干脆先手動實現(xiàn)一個簡單的float* aligned_alloc_and_init(size_t n) { void* ptr std::aligned_alloc(32, n * sizeof(float)); return static_castfloat*(ptr); }還有一個很容易被忽略的細節(jié)結(jié)構(gòu)體字段重排減少padding。雖然在SoA里那個大結(jié)構(gòu)體只是若干個容器但如果你在業(yè)務(wù)代碼里還保留了少量“小結(jié)構(gòu)體”記得把同類型字段排在一起。比如// 差bool夾在float中間白白多出3字節(jié)padding struct Item { float value; bool valid; float count; }; // 好同類型靠攏編譯器不額外補洞 struct Item { float value; float count; bool valid; };低效的布局會讓緩存行承“沙子”多過承“水”工業(yè)級代碼里這些小錢也要摳。2.4 第一輪收益為什么提升了20倍這輪重構(gòu)做完我先跑了一遍perf stat對比基線數(shù)據(jù)。同一臺機器、同樣50萬個粒子、同樣物理參數(shù)AoS版本更新一次平均120ms左右SoA版本降到了大約8ms。算下來15到20倍的提升。這個數(shù)字怎么來的拆開看大概是三部分緩存命中率大幅提升順序讀多個純float數(shù)組和“跳著讀40字節(jié)對象穿插bool”相比有效內(nèi)存流量少了約3到5倍。分支預(yù)測懲罰消失原來那個if (!p.alive) continue在粒子死亡率接近一半時幾乎每次都是50%概率猜錯流水線沖洗成本極高。把活躍粒子集中到數(shù)組前段后循環(huán)沒有任何分支這部分收益非??捎^。swap-and-pop帶來的連續(xù)密度收益活粒子全部擠在一起cache line利用率接近100%。到這里數(shù)據(jù)布局已經(jīng)為最終速度打下了地基。但只有地基還不夠真正把CPU的算力發(fā)揮出來的是下一層的SIMD向量化。3. SIMD向量化實戰(zhàn)讓CPU一次算八個float第一輪優(yōu)化靠的是“少搬數(shù)據(jù)”SIMD則是“一次搬更多、算更多”。它不是玄學(xué)而是現(xiàn)代CPU早就給你準備好的并行能力。3.1 SIMD能做什么一條指令處理8個float先解釋一下SIMDSingle Instruction, Multiple Data。它的思想很簡單普通加法學(xué)的是“兩個float相加”SIMD一條指令能做“兩組8個float對應(yīng)相加”等于把4個或8個計算任務(wù)打包成一次執(zhí)行。拿AVX2指令集舉例它有32個256位寄存器YMM寄存器每個可以塞8個32位float也就是一條指令處理8個粒子。類似地SSE是128位寄存器一次4個float。你寫普通循環(huán)的時候CPU理論上也能做到這一點但它需要你的代碼滿足一堆特殊條件才行。3.2 編譯器自動向量化的坑別指望它“幫你搞定”很多文章告訴你“開-O3 -marchnative編譯器會自動向量化。”這話對了一半。它能幫你的是識別最簡單的循環(huán)但老實的編譯器有很多“不敢做”的事。指針別名問題編譯器沒法證明寫x[i]不會影響到別處的vx[i]萬一你的指針是重疊的呢所以它寧可保守地一條條算。循環(huán)里帶分支雖然新版本編譯器支持帶掩碼的SIMD指令但判斷邏輯越復(fù)雜它越容易放棄。浮點運算順序浮點不滿足結(jié)合律。(a b) c嚴格來說不等于a (b c)。編譯器默認不敢亂重排除非你允許它放寬精度。數(shù)據(jù)不是緊密同類型數(shù)組AoS布局本身就讓編譯器無從下手它總不能為你的Particle對象數(shù)組每條都做gather加載吧。所以我的建議是熱循環(huán)里不要依賴自動向量化關(guān)鍵路徑直接手寫intrinsics。手動寫的好處是每一步算什么都由你把控接受不了的編譯器限制你也能繞過去。3.3 手寫Intrinsics核心循環(huán)改寫全程下面這段是改造后的AVX2版本更新內(nèi)核。假設(shè)我們已經(jīng)用swap-and-pop維護好了活躍粒子并且數(shù)組長度是8的倍數(shù)或者尾部用標量兜底#include immintrin.h void update_simd( float* __restrict x, float* __restrict y, float* __restrict z, float* __restrict vx, float* __restrict vy, float* __restrict vz, float* __restrict inv_mass, size_t n, float dt, float f_x, float f_y, float f_z) { const __m256 dtv _mm256_set1_ps(dt); const __m256 fxv _mm256_set1_ps(f_x); const __m256 fyv _mm256_set1_ps(f_y); const __m256 fzv _mm256_set1_ps(f_z); for (size_t i 0; i 8 n; i 8) { __m256 inv_m _mm256_load_ps(inv_mass[i]); __m256 vx0 _mm256_load_ps(vx[i]); __m256 vy0 _mm256_load_ps(vy[i]); __m256 vz0 _mm256_load_ps(vz[i]); __m256 ax _mm256_mul_ps(fxv, inv_m); __m256 ay _mm256_mul_ps(fyv, inv_m); __m256 az _mm256_mul_ps(fzv, inv_m); vx0 _mm256_add_ps(vx0, _mm256_mul_ps(ax, dtv)); vy0 _mm256_add_ps(vy0, _mm256_mul_ps(ay, dtv)); vz0 _mm256_add_ps(vz0, _mm256_mul_ps(az, dtv)); _mm256_store_ps(vx[i], vx0); _mm256_store_ps(vy[i], vy0); _mm256_store_ps(vz[i], vz0); __m256 x0 _mm256_load_ps(x[i]); __m256 y0 _mm256_load_ps(y[i]); __m256 z0 _mm256_load_ps(z[i]); x0 _mm256_add_ps(x0, _mm256_mul_ps(vx0, dtv)); y0 _mm256_add_ps(y0, _mm256_mul_ps(vy0, dtv)); z0 _mm256_add_ps(z0, _mm256_mul_ps(vz0, dtv)); _mm256_store_ps(x[i], x0); _mm256_store_ps(y[i], y0); _mm256_store_ps(z[i], z0); } // 尾部不足8個的部分退化為標量循環(huán) for (size_t i n ~size_t(7); i n; i) { float inv 1.0f / inv_mass[i]; vx[i] f_x * inv * dt; vy[i] f_y * inv * dt; vz[i] f_z * inv * dt; x[i] vx[i] * dt; y[i] vy[i] * dt; z[i] vz[i] * dt; } }幾個容易寫錯的點__restrict必須加上。它告訴編譯器“我保證這些指針互不重疊你可以大膽優(yōu)化。”不加的話編譯器可能會在寄存器分配時插入多余的load/store。_mm256_load_ps要求地址32字節(jié)對齊否則直接崩潰。這也就是前面強調(diào)aligned_alloc的原因。我把mass換成了inv_mass即預(yù)先算好質(zhì)量的倒數(shù)。因為SIMD里除法遠比乘法昂貴能省則省。3.4 SIMD實踐中的精度、除法與掩碼問題這里有幾個工業(yè)級項目里必須面對的現(xiàn)實問題。第一個是精度。SIMD的浮點運算順序和標量版不同結(jié)果會有細微差異。比如vx ax*dt這個表達式編譯器可能重新組合成(ax*dt)vx最后一位小數(shù)可能不同。如果你是在做物理仿真或者科學(xué)計算這種差異可能需要單獨評估。保守方案是SIMD版本做一個開關(guān)關(guān)鍵路徑可回退標量版。第二個是除法。上面已經(jīng)提到div_ps是慢指令能轉(zhuǎn)成乘法就轉(zhuǎn)成乘法。但要注意預(yù)計算inv_mass 1.0f / mass的時候如果mass為0除零情況要提前處理。第三個是死亡粒子的掩碼處理。如果不想把活躍粒子單獨搬出來也可以直接在SIMD循環(huán)里處理生命值。核心思路是算出掩碼用掩碼決定是否寫入但這一套代碼復(fù)雜度比較高而且maskstore在不同CPU上表現(xiàn)差異大。工業(yè)方案我還是推薦swap-and-pop讓熱循環(huán)盡量簡單死亡整理放到冷路徑上去做。第二輪優(yōu)化后同一臺機器上50萬粒子的更新從8ms降到了大約1.2ms。也就是說在原始120ms基線上整體已經(jīng)拿到約100倍的提升。下面我把整個百倍改造的完整路徑擺出來方便你直接對著自己的項目套。4. 工業(yè)級百倍改造完整實錄從基線到最終版本前面兩章分別講了兩輪核心技術(shù)這一章我把整個案例串起來記錄一個完整的工業(yè)級改造流程包括數(shù)據(jù)、步驟、踩坑后的調(diào)整以及最終那張關(guān)鍵的性能對比表。4.1 性能基線與瓶頸定位先別動手先量數(shù)據(jù)接手這個工業(yè)仿真項目時第一步我沒有改任何代碼而是先量基線。原始代碼跑500,000個粒子每幀一次update耗時約120ms。用perf stat -e cache-misses,branch-misses,instructions,cycles ./run能看到一組非常典型的數(shù)據(jù)cache miss率超高、branch miss率接近20%、指令數(shù)雖然不多但CPI每指令周期數(shù)高得異常。這就是典型的“內(nèi)存墻”問題。算法層面再怎么優(yōu)化也無法解決緩存行空轉(zhuǎn)和分支預(yù)測失敗的浪費。所以定位到瓶頸后我決定按“數(shù)據(jù)布局→活躍管理→SIMD向量化”的順序推進每一步都必須有可復(fù)現(xiàn)的計時結(jié)果。4.2 數(shù)據(jù)驅(qū)動重構(gòu)與活躍粒子管理把對象數(shù)組拆成平行數(shù)組重構(gòu)時我沒有一次性重寫全部代碼而是先提取出一個純數(shù)據(jù)層。原來的ParticleSystem類改成一組vectorfloat成員配上alive_count記錄活粒子數(shù)量。為了兼容老接口保留了一個“根據(jù)ID訪問組件”的輔助方法但熱循環(huán)里絕對不經(jīng)過這個接口。這一步重構(gòu)的核心收獲是代碼邏輯基本沒變但內(nèi)存訪問模式完全變了。scalar版本更新循環(huán)里不再有if (!alive)的分支也不再有struct之間的步長跳躍。第一次測試耗時就從120ms一路掉到8ms左右。順帶提一個我踩過的坑一開始我沒有做swap-and-pop只是把死亡粒子標記后仍然留在數(shù)組里。結(jié)果雖然從AoS換到了SoA但因為數(shù)組中間有很多死粒子cache line利用率還是不高只提升了5倍左右。后來把存活的擠到前段才真正吃到“順序遍歷”的紅利。這個細節(jié)千萬不要省。4.3 SIMD更新內(nèi)核擴展從計算到訪存都要對齊第二輪是在SoA基礎(chǔ)上做SIMD。我直接把更新函數(shù)改成了前面那份update_simd版本但是有幾個地方在實機調(diào)試時反復(fù)出問題內(nèi)存對齊std::vectorfloat默認分配只保證16字節(jié)對齊但AVX2的_mm256_load_ps要求32字節(jié)。我在初始化階段用std::aligned_alloc分配了所有數(shù)組并把分配邏輯封裝成一個AlignedBuffer類避免后續(xù)忘記對齊。數(shù)據(jù)規(guī)模50萬恰好是8的倍數(shù)但為了通用安全還是保留了尾部的標量循環(huán)。編譯器指令集開關(guān)編譯參數(shù)必須帶-marchnative否則即使寫了intrinsics生成的代碼也只是用SSE兼容路徑速度上不去。這一輪從8ms降到1.2ms附近。整體對標最初基線已經(jīng)實現(xiàn)約100倍的性能飛躍。4.4 記錄性能對比表百倍是怎么算出來的完整的對比表如下。同一臺機器上數(shù)據(jù)規(guī)模20萬和50萬都跑過這里取50萬的數(shù)據(jù)作為代表優(yōu)化階段每幀耗時相對基線加速關(guān)鍵動作初始AoS分支判斷120ms1x基線切到SoA布局約35ms約3.4x字段數(shù)組化但仍有死亡粒子殘留SoAswap-and-pop活躍管理約8ms約15x熱循環(huán)無分支順序遍歷活粒子SoASIMD(AVX2)約1.2ms約100x8路并行計算除法轉(zhuǎn)乘法多線程SIMD順帶優(yōu)化約0.5ms約240x4線程并行分塊未在本文展開有人可能會問120ms直接到1.2ms是不是我挑了一個特別適合優(yōu)化的問題說實話這個例子刻意選得非?!案蓛簟钡^不冷門。大量渲染粒子、物理剛體、碰撞檢測、圖像像素處理本質(zhì)上都是“同構(gòu)數(shù)據(jù)批量做同構(gòu)運算”這類場景在工業(yè)級代碼里到處都是。數(shù)據(jù)量越大、瓶頸越明顯百倍收益的概率越高。當(dāng)然如果是一個邏輯跳轉(zhuǎn)特別復(fù)雜、每個元素處理方式都不一樣的循環(huán)這套組合拳效果會差很多。4.5 配套工具與編譯參數(shù)建議整個改造過程我用的工具不多但都極其關(guān)鍵Linux下用perf stat看cache-misses和branch-misses快速定位瓶頸是內(nèi)存還是分支。用編譯器資源管理器Compiler Explorer看匯編。寫intrinsics時確認它確實生成了vaddps、vmulps這些SIMD指令而不是被編譯器悄悄降級成標量。編譯命令建議g -O3 -marchnative -ffast-math -funroll-loops。注意-ffast-math不是免費的它會改變浮點運算的嚴格度工業(yè)項目里需要根據(jù)業(yè)務(wù)場景決定是否啟用或者只針對熱點翻譯單元打開。5. 常見問題與排查技巧速查這幾條坑我替你先踩了這套方案我前后不只在一個項目里用過每次都會遇到幾個“看起來莫名其妙”的問題。統(tǒng)一整理出來以后你再做能少走很多彎路。5.1 false sharing多線程下的緩存殺手當(dāng)我把優(yōu)化后的版本改成多線程并行時起初發(fā)現(xiàn)線程越多性能反而越差。原因就是false sharing——多個線程同時修改同一個緩存行里的不同數(shù)據(jù)項。比如兩個線程分別處理編號連續(xù)的兩段粒子可能同時寫入x[500]和x[501]而它們在同一個32字節(jié)或64字節(jié)緩存行上CPU為了保持一致需要頻繁在核心之間同步緩存行。解決方法很簡單讓每個線程處理“按緩存行對齊的塊”或者給每個線程一個本地緩沖最后再合并。最簡單的粗暴做法是把分塊大小設(shè)成緩存行能容納的元素數(shù)的整數(shù)倍很多時候問題就消失了。5.2 未對齊訪問為什么程序突然崩了AVX2版本最典型的崩潰就是未對齊的load/store。錯誤提示往往是一個挺難看的segfault甚至直接無征兆非法指令。排查方式就是想清楚兩個問題這個數(shù)組是用什么函數(shù)分配的它的對齊有沒有達到32字節(jié)我習(xí)慣把這類檢查寫進調(diào)試斷言assert(reinterpret_castuintptr_t(ptr) % 32 0);不要小看這一步它能在開發(fā)階段幫你抓住90%的對齊問題而不是等到線上崩潰。某些分配器在特定的malloc實現(xiàn)下能保證16字節(jié)對齊但保證不了32字節(jié)務(wù)必用aligned_alloc顯式指定。5.3 什么場景不適合這套方案數(shù)據(jù)驅(qū)動SIMD不是萬能鑰匙。我總結(jié)了幾類不適合的場景數(shù)據(jù)規(guī)模很小比如一次只處理幾十個元素。SIMD調(diào)用和內(nèi)存對齊的初始化開銷可能比計算本身還大。每個元素的處理邏輯差異極大頻繁跳轉(zhuǎn)SIMD無法打包。代碼里有復(fù)雜的虛函數(shù)調(diào)用和多態(tài)分派這些分支即使在SoA下也難以向量化。數(shù)據(jù)結(jié)構(gòu)本身必須保持對象語義比如依賴繼承、虛函數(shù)管理生命周期強行改成SoA會讓代碼維護成本失控。遇到這些情況我的策略是只優(yōu)化真正的熱點。先用profiler量出不合理的函數(shù)再決定是否值得用這套方案。不要一上來就把所有代碼推倒重寫成數(shù)組結(jié)構(gòu)體。5.4 排查經(jīng)驗速查表現(xiàn)象可能原因處理方案SIMD版本跑起來反而更慢數(shù)據(jù)規(guī)模太小或者指針別名限制優(yōu)化增大批量處理加__restrict開啟-marchnativeAVX2版本隨機崩潰數(shù)組沒有32字節(jié)對齊改用std::aligned_alloc分配加對齊斷言多線程版本性能下降false sharing按緩存行分塊或線程本地緩沖最后合并結(jié)果和標量版對不上浮點運算順序變化確認精度容忍度必要時保留標量路徑做交叉驗證向量化后只提升1倍循環(huán)里有除法/開方等慢指令預(yù)計算倒數(shù)除法改乘法分支miss依然很高活躍粒子沒有集中管理用swap-and-pop把死粒子剔除出熱循環(huán)這些坑大多不是理論問題而是實機調(diào)試中換了無數(shù)方案才摸索出來的。你照著速查表走一圈大概率能省下兩三天排查時間。最后說點我個人的體會。優(yōu)化這類系統(tǒng)時我最大的感受是別跟你的算法較勁先去跟你的數(shù)據(jù)布局較勁。同一個數(shù)學(xué)公式放在錯的布局里可能跑120ms放在對的布局里配合SIMD可能只要1ms。數(shù)據(jù)驅(qū)動不是說面向?qū)ο蟛缓枚翘嵝阉泄こ處煷a是寫給CPU和內(nèi)存體系跑的你沒把數(shù)據(jù)喂到它嘴邊它再強也白搭。另外一個經(jīng)驗是永遠讓基準測試說話。我見過太多人憑“感覺”優(yōu)化最后改了一堆代碼性能沒有任何變化甚至更差。每一步優(yōu)化都記下時間、記錄cache miss和branch miss數(shù)據(jù)你才能真正知道是哪一步發(fā)生了質(zhì)變哪一步白忙活了。這套方法后面還可以繼續(xù)擴展。比如配合多線程分塊處理、使用AVX-512指令集、用std::span做視圖層、或者把相同思路推廣到碰撞檢測和渲染系統(tǒng)。但核心始終是那句話先讓數(shù)據(jù)緊湊地待在緩存里再讓CPU一條指令多干幾件事。你手里的那些熱點循環(huán)大概率也能拿到同樣驚人的收益。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日韩有码久久| 激情五月婷婷丁香综合网| 九色无码| 综合久久六月| 99亚洲无码| 综合色久| 色色色色色热| 九色视频91| 五月久久| 婷婷激情五月色综合| 国产婷婷色综合AV蜜臀AV | 欧美婷婷丁香五月社区| 激情综合国产| 性爱人人网| 婷婷五月骚厕所| 丁香五月婷婷五月| 色情五月丁香婷婷网| 欧美久久婷婷| 涩综合网| 自拍偷窥99热| 色情五月丁香| 另类图片天天影视在线观看| 99九九精品视频| 五月丁香五月综合欧美| 97久久超视频| 六月婷婷开心| 夜夜爱爱亚洲| 五月婷婷在线视频观看| 五月天基地| 激情六月一二| 五月婷婷丁香五月| 26uuu在线观看| 亚洲综合视频八| 青娱乐美女福利视频美臀| 97色色网| 99热6这里只有精品6| 六月婷婷五月天| 久久久8| 久久九精品| 亚洲成Av人片乱码色第1集| 91久久综合亚洲鲁鲁五月天| 婷婷五月综合社区| www.婷婷五月天| 99在线视频免费| 9久9久| 亚洲精品国产精品乱码视99| 日本天堂免费99| 玖玖热视频| 丁香五月成人自拍| 亚洲人成色A777777在线观看| 97人人看一| 夜夜骑夜夜操| 99热亚洲| 99热久草| 国产精品久久..4399| 庭庭久久内射| www.91久久| 超碰成人免费| 五月香蕉综合| 97精品人人A片免费看| 热久久思思热思思| 91人人人人人| 天天做天天爱综合| 激情婷婷综合网| www,天天干| 9久热在线精品| 久操激情| www.五月.com| 第四色大香蕉| 玖玖99免费视频| 成人电影AV在线观看| av无码电影| 五月婷婷导航| 另类图片天天影视在线观看| 色五月首页| 欧美日本99| 婷婷丁香五月亚洲免费| 六月丁香婷婷色狠狠久久| 色欲久久久久久综合网综合网| 91青娱乐青青草| 丁香色色色| 免费AV播放| 日本婷婷| 五月天色在线| 五月亭亭色| 色色网五月激情| 五月天另类小说久久小说网| 人妻久久久| 91碰超| 日本精品99| 五月丁香亚洲校园欧美| www.色五月| 激情婷婷五月基地| 婷婷六月综合| 国产亚洲在线| 婷婷五月天美女视频| 39视频第二区| 婷婷色综合| 激情com| 白人荫道BBWBBB大荫道| 九九精品网| 中文字幕五月久久婷| 色丁香婷婷| 婷婷五月成人| 天天揷综合网| 五月婷婷六月天| 天天操B| 中文字幕乱轮| 中文字幕九九九九| 福利视频在线播放| 色婷婷五月天视频网站| 丁香婷婷六月激情文学 | 狠狠干综合| 97激情五月天| 激情淫乱男女| 婷婷五月综合网| 天天天天天操| 91在线操| 少妇高潮呻吟A片免费看软件| 五月丁香六月婷婷手机无线| AV色婷婷| 国产真人做爰视频免费| 99热这里是精品| 91操网| 99热精品在线观看| 丁香五月电影| 国产99热在线看| 99热香港| 亚洲人妻av| 综合激情网| 久久激情婷婷| 99热这里| 天天狠狠六月婷丁香影院| 色欲丁香| 婷婷综合久久综合| 天天插综合| WWW.桔色成人.COM| www.91操| 五月丁香色| 激情com| 97五月婷| 9999久久久久| 婷婷丁香五月亚洲免费| 五月六月播婷婷| 五月天成人综合| 五月丁香六月综合激情无码软件亮点| 啪啪激情网| 亚洲天堂AV免费片| 日韩肏屄网| 婷婷色五月激情| 热成人网| 色五月婷婷中文字幕在线观看| 丰滿爆乳一区二区三区| 九月婷婷综合| 狠狠xx| www.激情.com.| 一本婷婷丁香久久 | 国产免费一区二区三州老师F1F1| 色色欧美色色色| 狠狠99| 亚洲欧洲自拍图片专区五月天| 五月丁香久久丝袜啪啪| A片试看120分钟做受图片| 激情网婷婷五月天| www,五月丁,com| 大香蕉伊人爱在线| 91在线97视频| 激情五月婷婷综合| 毛片新网地| 五月丁香六月婷婷a v| 五月婷婷激情久久| 97操碰免费视频| 99热这里只有精品8| 五月天婷婷av| 综合 蜜月 婷婷| 亚洲欧洲另类| 五月天成人综合| 99精品7| 五月丁香综合| 超碰色女人| 青草青草视频2免费观看| 丁香五月人妻| 国产成人99久久亚洲综合精品| 丁香婷婷六月婷婷六月婷婷六月婷婷| 欧美性久| 丁香影院五月综合| 亚洲字幕AV一区二区三区四区| 99操久久| 97干97色| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 五月四色婷婷| 五月欧美色播| 九热...av| 91在线97视频| 欧美精品中文字幕亚洲专区| 久久久五月天| 久久综合影院| 激情五月丁香六月| 热99re| www.粉嫩av.com| 香蕉97碰碰碰超视精品| 色吧网综合| 538在线精品| 九九九九综合| 少妇搡BBBB搡BBB搡毛茸茸 | 亚洲第一精品成人999久久精品| 久久99热这里| 开心婷婷中文字慕| 中国丰满熟女A片免费观| 中文字幕,综合,91| 五月婷婷伊人在线| 26uuu亚洲色| 欧美激情丁香五月| 开心五月婷婷激情| 91丨九色丨熟女|新版| 亚洲不卡123| 日本熟妇乱妇熟色A片蜜桃| 国产67194| 色偷偷五月天| 色播播五月| 狠狠色丁香婷婷综合久久97AV| 久热久色| 99热精品在线| www色色色com| 91干| 狠狠久久婷五月| 日本在线视频看se99| 九九爱激情| 中文字幕无码人妻少妇免费视频| 丁香五月天堂网| 97在线精品视频| 五月丁香香蕉| 欧洲色| 五月丁香天堂网婷婷| 色婷婷av综合网| 国产AV一区二区三区最新精品| 人人摸人人搞| 久久人人看| 夜色综合网| 五月天另类小说| 久久九九蜜| 婷婷五月天com| 婷婷丁香五月天综合网| 欧美婷婷色五月网| 久久99免费视频网站| 熟女色色一区二区| 狠狠噪| 亚洲精品久久久久久久久久飞鱼| 熟女少妇内射日韩亚洲| 中文字幕有多少字| 日韩艹比| 亚洲六月综合激情久久下卡| 5月丁香美女影院| 亚洲乱码日产精品BD| www.婷婷| 国产AV一区二区三区最新精品| 婷婷五月天成人网| 免费看欧美成人A片无码| 亚洲色五月天| 91精品久久久久久77777| 99视频| 五月婷婷丁香五月| 中文字幕欧美日韩VA免费视频| 97久久五月丁香婷婷| www九九热| 啪啪一区| 久久综合久色欧美综合狠狠| 综合久久五| 亚洲中文字幕AV在线| 怡红院AV亚洲一区二区三区H| 禁欲电影完整版在线播放| 99热超碰在线| 99精品偷自拍| 丁香九月色| 永久天堂日本| 久久久久98| 99热亚洲精品| 五月丁香六月婷| 欧美成人AAA片一区国产精品| 婷婷综合网站| 婷婷五月天在婷| 五月开心深深爱激情综合| www.丁香五月| 91操色| 玖玖资源部在线播放| 99这里只有免费的小视频在线观看| 这里只精品| 六月婷五月丁香| 99热精国产这里只有精品| 五月婷婷九月婷婷九月婷婷| www,天天干| 九九性爱网| 色热久| 99色在线视频| 91 九色大美女| 久久丁香综合精品综合| 91丨九色|PRNY熟妇| 九色91美女| 婷婷五月天成人网| 色 丁香婷婷| www.激情五月天com| 可以看的AV网站| 久久久久婷| 婷婷久月| 国产精品天天狠天天看| Av在线资源| 色综合狠狠色| 婷婷丁香视频在线观看免费| 五月天色在线| 99热这里只有精品8| www.色色五月天.com| 97人人草| 天天日天天久久青青| 欧美Va在线| 激情 婷婷| 色婷婷手机在线| 久久婷婷热| 这里只有免费的精品| 狠狠色噜噜狠狠| 丁香五月天欧洲在线| 六月婷五月丁香| 久久久久久丁香五月| 噜噜狠狠色综无码久久合欧美| 国产97色在线| 国外亚洲成AV人片在线观看| 婷婷综合伊人| 91热爆在线| 五月丁香WWW| 热思思| 久久久大香蕉| 无码少妇高潮喷水A片免费| www91色网站| 日本97在线视频| 美女五月天婷婷| 男人的天堂五月丁香| 五月天综合网| 五月天激情视频| 天天日天天做天天操| 99久久综合网| 操人91| 第2色五月婷| 六月天婷婷| 五月丁香六月综合图| 五月婷婷五月丁香综合| 婷婷色导航| 手机在线视频观看9| 97超碰色| 成人午夜无码视频| 香蕉婷婷色五月| 丁香五月婷婷色五月| 亚洲成Av人片乱码色第1集| 综合久久97| 婷婷五月天少妇| 国产密乳av一区二区三区四区| 丁香婷婷啪啪啪| 亚洲丁香五月天视频| 婷婷五月激情中文字幕| 亚洲婷婷综合视频| av在线超清中文| 99久久性爱| 色五月丁香婷婷| 91碰人人| 国产亚洲99| 久久这里有精品视频| 另类图片色五月| 超碰免费成人网站| 99re免费精品视频| 丁香六月五月婷婷| 天天日天天插| 99五月婷| 99热这里只有精品1998| 中文字幕 码精品视频网站| 大香蕉五月婷婷丁香| 久久久久8888| 99热色在线精品| 亚洲人妻AV| 日韩AC在线免费观看| 亚洲第一黄网| 婷婷性爱五月天| 五月丁香激情综合网| 色婷婷最新域名| 六月丁婷婷| 激情网婷婷五月天| 色综合视频在线| 在线色色| 九九视频这里只有精品| 人妻丰满精品一区二区A片| 97色婷婷在线观看| 婷婷丁香激情五月天色色| 五月天激情四射| 亚洲日本三级片| 狠狠综合| 婷婷六月综合基地| 国内自拍1区| 丁香五月婷婷激情小说| 桃色五月天| 国产精品天天狠天天看| 久久婷综合| 五月伊人婷婷| 成人中文网| 淫视馆aV二区一区| 五月丁香影院| 丁香五月色激情| 99久久a线观| 婷婷成人AV| 99干免费视频| 一本久久亚洲五月婷婷| 六月婷婷激情| 丁香五月123| 一区二区免费看| 热99热9| 色情五月综合婷婷| 色99在线观看| 涩五月婷婷| 99色爱| 五月色情婷婷| 九九RE视频在线精品| 97性高潮久久久| www.色婷婷。com| 天天干天天干天天干天天干天| 9 1在线视频| 都市激情小说婷婷| 欧美大片| 青草性爱视频| 婷婷五月天激情文学| 伊人九九综合| 九九久久网| av操逼网| 婷婷五月天色综合翘| 日韩成人电影AV| 成人啪啪色婷婷久| 色婷婷五月天视频在线| 任你弄在线视频免费| 五月丁香999| 五月花免费视频| 久久天堂| 这里只有精品久久| 97超碰欧美中文字幕| 婷婷五月色亚洲| 成人做爰高潮A片免费视频| 91婷婷丁香五月天免费视频网站 | 小视频一区| 99精品在线| 九九99免费视频| 少妇人妻人伦A片| 久久一级免费黄色片| 婷婷五月丁综合| 国产精产国品一二三在观看| 无码天天操| 久久激情综合| 俺来也综合网精品一区| 99热在线精品观看| 99无码视频| 九九视频精品在线免费| 午夜天堂一区人妻| 97色五月天| 91爱操| 日91高清无玛| 噜一噜在线| 天天射色五月天| 天堂AV在线看| 日韩中出视频| 亚洲最大五月天成人网| 丁香影院五月综合| 婷婷五月色情天| 日本97在线观看| 婷激情五月| 色婷婷性爱网| 这里只有精品免费视频在线观看 | 中文字幕成人版| 五月天激情网页| 琪琪色网在线| 秋霞三及片| 青青草原亚洲久| 1010日日无码| 久久99免费视频网站| 婷婷色5月激情网| 五月丁香婷久久| 激情五月天激情综合网| www亚洲无码| 婷婷五月天开心网| 秋霞AV淫| 婷婷五月色情天| 五月天激情四射| 99精品在这里| 99热热九九| 黑人糟蹋人妻HD中文字幕| 再次出发二| 裸体做A爰片毛片A片免费| 涩婷婷五月天| 亚洲久艹| 激情99热| 青草网在线观看| 另类小说五月天| 色亚洲中文| 国产SUV精品一区二区883| 久久久婷婷五月亚洲97号色| 五月丁香91| 久久婷婷热| 激情综合亚洲| 欧美一区二区三区不卡影视| 人人操9| 婷婷色五月天在线| 亚洲激情综| 大香蕉婷婷| 五月色丁香综合| 青草视频在线播放| 五月丁香啪啪综合| 九九色欲网| 久热只有精品| 狠狠色无码| 99碰碰碰| 欧美日本国产欧美日本韩国99| 日本色婷婷| 97色色网| 天天操综合网站| 碰碰操91| 久久精品这里只有精品免费首页| 五月丁香啪啪激情| 人人操操97| 成人精品人妻| 六月激情婷婷色| 九九操屄| 99操免费视频| xxxx五月激情| 亚州男人天堂婷婷五月| 丁香六月天| 九九久久99| 最近中文字幕2019视频1| 国语精品探花| 久久综合丁香| 97精品人人A片免费看| 开心五月激情婷婷| www98日本小时间到了| AAA久久| 激情五月天小说视频| www.99久久久久99| 五月天婷婷综合| 国产熟女日日骚五月丁香爱| 中文AV在线观看| 色婷婷激情| 激情综合亚洲色婷婷五月| 亚洲av成人电影在线观看| 丁香欧美| 超级黄色片| 五月丁香综合啪啪| jiqingliuyuetian| 久久久18| seuuu婷婷| 99九九视频| 亚洲亚洲激情| 久久精品五月| 99热| 激情五月婷婷丁香| 丁香5月激情网| 啪啪日热| 97av在线视频| 99成人小视频| 亚洲丁香花色| 激情综合文学| 婷婷五月天丁香| 婷婷五月天第四色| 色婷婷久久久| 精品日本视频444| 五月久久婷婷丁香| 成人网站免费sxj| 亚洲99在线| 欧美性做爰大片免费看办公室| 直接看的AV| 精a品a视a频| Av在线资源| 亚洲五月天激情| 丁香五月色欲| 亚洲一个色| 色婷婷第四色| 九九在线视频| 天天爱综合网| 婷婷激情六月综合| 婷婷涩涩五月天| 9热网站| 五月婷婷色情| 婷婷激情五月天视频在线| Av大香蕉| 9久热在线精品| www超碰| 丁香五月色| 五月丁香久久久日婷婷久久婷婷日| 婷婷九九视频| 天天日中文| 成人 在线 日韩| 欧美啄木乌丝袜人妻系列| 99热超碰在线| 色情五月综合婷婷| 五月欧美丁香在线观看| 亚洲Av入口| 99人碰碰碰| 色爱爱综合网| 婷婷综合五月天| 国产成人AV在线播放| 婷婷五月天性| 五月天国产成人| 玖玖婷婷婷丁香五月| 中文字幕丰满孑伦无码专区| 色色色999| 五月婷婷AV| 精品国产va久久久久久久| 99热99极品观看| 久草免费福利视频| 久久九九99| 玖玖爱综合网| 99热最新| 99视频精品全部免费观看| 成人丁香五月| 丁香五月最新网址| 色欲AVV| 丁香激情网| 玖玖在线| 人人射人人高潮| 丁香五月天婷婷中文| 人妻操逼视频。| 99热销国产这里有精品| 草榴视频黄色网| 欧美大肥婆大肥BBBBB| 无码啪啪| 久狠狠狠| www.99成人视频| www婷婷亚洲| 五月丁香影院| 国产五月天婷婷| 婷婷久久天堂网| 亚洲网站观看视频| www五月| 五月丁香综合啪啪| 激情图片婷婷丁香五月| 五月丁香五月婷婷在线观看| 五月丁香六月婷婷在线播放| 99在线免费视| 99热只有精品综合| AV在线大香蕉| peg 2区三区四区的| 激情婷婷丁香五月| 午夜少妇在线观看视频| 久久久噜噜噜久久人妻| 91avse| 视频综合网| 99re久久| 久久五月激情| 丝袜激情网| 久久99久久久| 四川操逼站| 97成人丁香| 日本黄色三级片内射| 六月丁香啪啪| 99久热| 91精品综合久久久久久五月丁香| 久婷久婷| 日本色色网站| 色爱综合网| 亚洲va在线∨a天堂va欧美va| www.开心激情| 婷婷丁香五月天在线| 五月婷在线色视频| 日韩六十路91性交电影| 色五月开心五月激情五月| 婷婷激情五月天综合| 97人妻碰碰中文无码久热丝袜| 棕合影院色色| 97热这里精品在线视频| 五月丁香激情综合啪啪| 99re热在线视频观看| 婷婷之玖玖| 99人人干人人操| 99艹精品在线观看| 色都都狠狠色都都色综合色| 激情婷婷五月社区| 在线成人国产| 激情五月瑟瑟| 97在线视频 欧美| 色色综合五月| 日韩成人电影Av| 欧美一线视频| 五月间天堂综合| 涩涩婷婷五月| 在线观看免费狠狠色丁香香综合| 色呦呦美女| 久久久大香蕉| 狠狠色婷婷7777久| 日日噜人人人做人| 开心激情色婷婷五月天| 日韩婷婷五月天| 九九九午夜影院成人| 婷婷中文字幕版| 人妻操操色| 人人草人人爱手机视频看看| 五月婷婷网站| 中文AV网站| 美国十月色婷婷在线观看| 大香蕉伊人爱在线| 97人人超| 99九九精品视频| 色播五月婷婷五月| 99热成人| 丁香五月综合婷婷| 成人在线99| 北京熟妇搡BBBB搡BBBB| 婷婷五月欧美综合| 久9草在线观看视频| 久久区区一二三av| 五月婷婷色播| 99色色爰| 狠狠人人| 99热视精品| 97热这里只有精品| AV在线大香蕉| 开心激情站| AA片在线观看视频在线播放| 五月丁香婷婷狠狠操| 五月婷婷综合性爱噜噜| 婷婷97碰碰| 四月婷婷五月色综合| 99热精品网| 欧美综合五月丁香五月天| 玖玖资源站中文| 激情丁香九九五月综合网| 玖玖色综合| 开心五月婷婷| 久9综合| 婷婷五月无码| 日本色道视频网站| oVV4WIB3vFi8D| 婷婷综合色播网| 91日日日| 天天日天天插| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 9视频1在线| 色婷婷香蕉| 丁香五月婷婷丫| 另类五月激情| 五月丁香91| 色婷婷丁香五月| 182无码| 久久99大全| 激情五月天婷婷激情| 去干网最新版本亚洲版| 色色色热热热| 婷婷五月色天| 影音先锋AV资源男人站| 久久久久久久久久91| 亚洲性受XXXX五月丁香| 丁香五月第四色88| 欧美日韩成人在线观看| 色婷婷五月天视频在线| 亚洲婷婷91丁香| 开心激情站| 五月丁香激情综合网官网| 97色色婷婷五月天| 婷婷舔| 亚洲热热视频| 五月丁香六月激情在线| 超碰99热精品在线| 狠狠色噜噜狠狠狠狠综合| 婷婷五月天深爱| 色播五月天激情| 婷婷综合五月| 婷婷香蕉视频| 色婷婷丁香网| 色婷婷社区| 任你艹| 5月丁香美女影院| 久艹大香蕉| 五月天婷婷丁香蜜桃91| 五月激情在线| 狠狠操狠狠| 五月婷婷97| 欧美激情五月天婷婷| 五月丁查人人| 天天操天天操天天操天天操天天操| 4399无码视频二区| www.91操| 日日艹思思热| 色色色色色色网| 狠狠色婷婷综合开心影视| 99色天堂| 丁香五月区| 激情五月丁香婷婷| 伊人久久大香线蕉亚洲五月天,| 99er日韩| 久久久久er热| 在线不卡视频| 婷婷五月天午夜激情影院| 亚洲激情网站无码| 五月天激情小说网| 国产伦亲子伦亲子视频观看| 日韩操逼大片| 激情综合六月| 亭亭玉月丁香| 丁香五月手机视频| 欧美三级巜人妻互换| 99热1| 日日激情网| 99啪啪| 伊人影院久久网| 亚洲一色色色色色色色色| 天天干天天插| www免费在线视频| 丁香五月婷婷基地| 色五月丁香网| 欧美性生交XXXXX无码小说| 操逼六区| 这里只有精品视频一区| 色五月婷婷五月天| 99ri视频在线播放| 婷婷丁香五月欧美人| 色吧五月婷婷| 狠狠色丁香婷婷五月| 色婷婷在线影院| 欧洲综合视频在线观看。欧洲,亚洲综合食品在线观看。 | 五月婷婷啪啪网| 丁香六月五月婷婷| 天天干天天插| 99日在线视频| 天天插天天插天天插天天插 | 97 A I色色| 免费看欧美成人A片无码 | 丁香六月久久| 日韩性爱无码| 99热这里只有精品23| 丁香婷婷色五月| 99精品女人天堂| 青青草视频福利| 色五月五月婷婷| 九色无码| 五月丁香六月婷婷开心网| 国产高潮A片羞羞视频涩涩| 91九色视频| 丁香婷婷激情五月天无毒不卡蜜桃| 亚洲av| 日韩 欧美 国产 一区 二区| 久久综合影院| 狠狠色婷婷色| 色五月天激情| 精品色色| 另类激情五月天。| 色色五月天网站| 九月大香蕉| www.sezonghe| 丁香五月天堂网| 激情综合啪啪| 激情综合五月| 51精品国内探花| 丁香五月激情澎湃一区| 天天综合网站| 99色综合| 无码人妻电影| 97久久五月丁香婷婷| 99视频只有这里精品| 亚洲亚洲人成综合网络| 丁香亭亭久久| 99热超碰在线| 婷婷丁香花五月天| 精品色色| 丁香九色不卡aaa| 五月激情丁香| 日本一级淫| 五月天亚洲最大成人| 九九激情| 超碰AV在线| 亚洲AV网址| 色情婷| 丁香婷婷深情五月亚洲| 97婷婷五月| 精品皮股午夜AV| 91男同视频| 性婷婷| 久久xx| 伊人玖玖精品| 五月婷导航| 婷婷五月天AV网| 日韩aaaaa| av人人操| 26uuu亚洲精品国产| 成人草榴视频| 婷婷五月天激情小说网站| 国产成人网址| 丁香九月综合| 五月天桃色深爱网| 五月天激情小说| 男女99免费视频| 激情婷婷丁香五月天| 五月天婷婷綜合院| 人人操女人| 日日夜夜天天| 亚洲秘 无码一区二区三区妃光/1| www.99热视频| se.久久视频在线观看| WWW.婷婷| 九九热在线视频观看免费10| www.婷婷五月| 婷香狠狠爱五月| 天天激情欧美美女| 亚洲自拍天堂| 亚洲欧洲午夜成人精品av| 五月天激情网址| 99啪啪网| 久热91精品| 久久总和99| 99热这里都是精品| 色人久久| 激情五月天在线观看婷婷| 亚洲综合五月天| 色情·com| 男妓跪趴把舌头伸进我的嘴巴| 天天在线久久综合 | 婷婷五月在线免费| 黄网在线播放| 天天在线天天综合网色| 国产精品久久久久9999小说| 狠狠干激情五月| 激情图片亚洲| 亚洲激情97五月天| 9色免费网| 五月天激情婷婷| 婷婷五月综合社区| 久久九九综合| 丁香五月天激情婷婷丁香六月| 中字幕视频在线永久在线观看免费 | 日本 @ va 免费| 9 大屁股在线视频精品| 天天干,天天日| 九色91国产| 五月激情啪啪| 婷婷丁香五月天色播网站| 99re热视频这里只精品| 视色综合| 97五月综合网| 久久色婷婷| 久色视频在线| 日韩精品无码一区二区| 欧美VA在线观看| 91性人人| 亚洲啪啪视频| 久久久色婷婷五月天| 青草视频在线观看视频| 久久开心五月婷婷| yiqicaoav| 久久婷婷网| 丁香五月花婷婷开心| 欧美性生交A片免费看| 五月激情网综合| 综合五月丁香97| 超碰成人免费| 2025最新亚洲激情在线| 1级欧美日韩| 五月综合久久| 色玖玖| 丰满少妇猛烈A片免费看观看 | 激情久久综合| 狠狠操狠狠| www.av骚货| 草草影院爱爱| 激情五月天综合| 婷婷性爱无码视频| 国产精品成人网站| 亚洲精品电影| 五月香蕉婷婷| 超碰99成人在线| www.五月天色色.com| 亚洲色婷婷色| OYIWbGcPu8H| 久久艹99| 思思久久精品视频| 国产精女同一区二区三区久| 影音先锋偷偷色男人站| 亚洲色精彩| 亚洲六月色| 五月天激情小说网| 亚洲五月丁香综合网| 日韩成人中文| 天天干,夜夜爽| 亚洲成人网无码| 色色五月婷婷狠狠| 另类 在线| 丁香香五月激情免费视频| 婷婷伊人综合| 五月丁香啪啪啪综合网| 一本久久亚洲五月婷婷| 一级性感毛片| www激情| 婷婷丁香五月天在线| 欧美日比视频| CHINESE熟女老女人HD视频| 91精品综合久久久久久五月丁香| 五月天激情图片| 99久久九九视频| 午夜婷婷久久| 日日干综合| 美国不卡视频| 丁香六月综合激情| 人人草人| 激情婷婷丁香五月天小说| 色欲AVV| 中文字幕av在线| 色五月天网| www.97碰碰com| 欧美性猛交AAAA片黑人 | 五月天伊人网| 激情综合4月| 六月婷婷最新网址| 免费黄色片子| 99视频久久| 国产99美少妇| 在线成人av播放| 九九aV| 思思热视频在线观看| 色色网站免费在线视频| 伊人成综合五月婷婷| 99热这里只有精品5| 这里只有精品网站| 六月婷婷天天操夜夜爽视频| 91人人人人人人人| 亚洲国产99| 五月色影院| 久久er+| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 日本三级日本黄色| 色婷婷www| 久久九九热视频| 97五月天婷婷午夜| 久久加勒比| 欧美成人精品A片免费一区99| 一级二级色大片| 激情综合婷婷| 亚洲av免费在线| 五月天色色色网| 深爱激情五月天| 五月天播播中文字幕| 五月丁香啪啪拍| 欧美三日本三级少妇三99| 婷婷五月天桃花网| 五月丁香综合激情| 亚洲精品国产精品乱码视99| 热99视频精品| 91精品国产99久久久久久天美| 五月伊人91| 五月天播播| 久久婷婷视频| 婷婷中文字幕版| 亚洲AV成人在线| 六月丁香啪| 欧美性猛交99久久久久99按摩| 六月婷婷综合激情| 久久欧洲综合网| 五月天婷婷三级黄| 99久久精品国产色欲| 久久色六月| 夜夜躁爽日日| 日韩淑女人妻luan伦激情精品一区二| 久久久久99精品成人片| 国产1区2区3区在线观| 婷婷五月综合啪| 69凹凸成人综合网| 99热成人| 成人一级片| 激情文学五月丁香六月婷婷| 色人五月婷婷| 另类激情五月天。| 五月天婷婷色色网| 九色激情| 国产精品A成V人在线播放| 99在线精品观看99| 五月天综合网| 丁香涩涩爱| 婷婷色日本| 国产1区2区3区在线观| 九九热re99re6在线精品| Www.久久| av国产精品| 久9视频| 色热久| 99热在线只有精品| 欧美婷婷五月天综合| 天天 青草 制服丝袜 在线| 性生活视频98791| 婷婷伊人綜合中文| 狠狠干.com| 亚洲精品久久久久久久久久吃药| www.色五月| 五月丁香色综合| 色小说五月天| 中文字幕性爱丰满| 激情图片婷婷| 久热只有这里有精品| 色综合久久综合中文综合网| 色青五月天| ai97re99一本| 九九视频在线观看视频6| 综合色99| 日日天天干| 色综合网址| 色爽九九| 开心激情综合| 日韩爱操视频| 人人人人人人人草| 久久久久久激情| 久久五月丁香| 亚洲精品网址| 欧美性生交XXXXX无码小说| 日日噜噜夜夜狠狠久久丁香六月| 91碰在线| 色婷久| 日日噜狠狠色综合久| 丁香五月天的网址。| 影音先锋 婷婷| 欧美婷婷五月无砖| 婷婷激情五月天激情在线| 丁香五月1页| 久久人人看| 丁香九九九九| 亚洲免费99| A1片久久久| 婷婷玖玖五月天| 97婷婷在线视频| 色很久综合| 97人人操人人操人人操人人| 色在线免费观看| 国内自拍1区| 99青青草99| 五月婷婷很很色| 淫五月停停| 激情九月婷婷九月| 91丁香综合| 成人在线观看精品| 亚洲A片成人无码久久精品青桔 | 日产精品一线二线三线芒果 | 深爱激清网| 热热久久99| 丁香五月天在线| 九九热只有精品| 日韩五月丁香| 久久人妻人人| 大婷婷色呦呦噜噜色呦呦噜噜| 亚洲色婷婷五月天| 婷婷五月综合体验看| 99热都是精品| 99成人| 大香蕉婷婷五月| 97碰| 少妇高潮一区二区三区99欧美| 超碰在线国产| 婷婷五月色| 色色色色网| 午夜丁香| 九九热在线视频| 国产AV一区二区三区最新精品| 色狠狠色噜噜AV天堂五区| 99视频这里有精品| 99九九精品视频推荐| 久久精99| 色99免费视频中文| 丁香五月AV| 成人在线不卡| 97福利视频| 日韩欧美一区二区三区四区| 热的国产,热的综合,热的有码| 天天在线久久综合 | 日日做A爰片久久毛片A片英语| 成人亚洲精品久久久久 | 婷婷色在线| 亚洲成人免费在线| 婷婷五月综合激情免费视频| 欧州色色| 国产日韩欧美性爱| 中文资源在线a| 五月婷婷激情久久| 五月婷在线| 97精品人人A片免费看| 精品久久久中文字幕大豆网推荐理由| 亚洲精品第一国产综合亚AV| 91精品视频男人的天堂| 99热热热国产超碰| www.久久久久久久| 五月天无码| 五月天婷婷丁香花| 五月激情婷婷女| 婷婷六月亚洲综合| 91色综合| 丁香五月影院| 爆乳熟妇一区二区三区四区| 午夜激情久久| 婷婷六月视频| 操碰97| 婷色成人| ss视频xx91| 日91高清无玛| 色婷婷五月综合| 国产伦亲子伦亲子视频观看| 婷婷六月丁香五月图区| 日韩无码性爱| 五月丁香色| 热久久思思热思思| 五月天婷婷高清无码| 色综合伊人网| 五月丁香六月婷综合成人综合| 五月婷婷影院| 婷婷五月天综合久久日美女| 免费亚洲成人电影AV| 噜噜噜噜噜在线| 六月丁香婷婷尤物| 久久99热这里只有精品| 亚洲综合久| 丰满女老板BD高清A片| 第四色色六月色综合| WWW,五月| 成人超碰AV| 无码色色| 九色自拍| 国产成人片| 五月综合激情图片| 九洲一级A片| 桃色伊人在线| 五月天综合在线观看| 五月婷婷色情| 国产69久久久欧美黑人A片| 色婷婷aV四虎| 五月婷网| 欧美综合丁香网| 99热这里只有精品青草| 亚洲色五月| 婷婷97色| 大香蕉婷婷丁香| 亚洲视频在线观看99| 色五月天本日| 伊人久久五月天| AⅤ网站在线看| 91精产品自偷自偷综合| 天天弄天天爽| 亚洲另类噜噜| 色综合久久天天综合网| 免费看欧美成人A片无码| 97超级操操| 五月天快乐开心激情网| 婷婷久久综合久色| 99色在线| 亚洲AV久久久久久久久久久久久久久久| 肏屄色播伊人97婷婷| 婷婷区日本| 丁香五月婷婷基地| 九九伊人网| 国产婷婷五月| 99色这里| 99热免费看| 99精彩视频| AV变态另类一区二区| 99精品在线| 久久婷婷五月天亚洲欧美| 67194成I人在线观看线路1| 亚洲av| 日韩人妻在线观看| 九九色99| 婷婷99中文字幕| 在线中文AV| 日本三级日本三级三级人妇四虎| 日逼免费视频 | 激情综合网之激情五月| 激情五月天综合婷婷网| 天天爽夜夜操|