免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

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热这是里只有精品| 五月丁香久人妻中文| 欧美美美女性色视频| 丁香九月激情久久| 影音先锋日本三级资源| 久碰婷婷视频| 亚洲情a| 光棍影院日韩精品| 六月成人网| 五月丁香婷婷六月| 九九热这里都是精品6| 五月天丁香啪啪网| 202丰满熟女妇大| 五月丁香欧美在线| 这里只有精9| 亚洲人人艹| 中文av网| 久草A片| 99这里精品| 九九综合88| 婷婷五月天奸女| 国产五月天激情小说| 美国不卡视频| 大香婷婷| 国产原创视频91九色| 九九碰九九爱97超碰| 久久久精久人妻| 99视频在线播放大全| 少妇水多A片太爽了| 婷婷色综合| 天天日天天插天天操| 91综合网| 丁香五月激情啪啪啪| 色丁香五月| 天天日狠狠| 在线另类视频| 99网址在线看| 丁香五月综合婷婷| 丁香激情网| 日本理论久久| 九九99热| 亚洲AV网站| 亚洲精品中文字幕成人片| 欧洲色色| 色婷| 婷婷综合五月| 婷婷五月综合激情| 91丨九色丨东北熟女| 丁香六月久久| 97色色综合| 欧美英丁香开心快乐六月天网| 欧美激情综合| .操區COm| 激情影院免费视频婷婷五月天| 天天五月丁香五月| 日本精品。999| 亚洲AV网站| 中文字幕无码成人电影| 激情五月天啪啪| 一区二区乱视频码| 五月开心久久| 狠狠艹狠狠艹| 丁香六月婷婷色XXXX| 99热99网| www.五月天。com| 久久99久久99精品免观看软件| 婷婷五月 丁香六月| 久久色频| 日日干综合| 久久大香蕉| 91精品91久久久中77777| 激情丁香九九五月综合网| 亚洲无码激情| 久操干| 2015超碰| 97人人射| 精品久久久久久久人妻| 91九色欧美| 大香线蕉伊人| 青草视频在线观看视频| 日韩成人影片在线观看| 色五月激情| 丁香激情网| 都市激情久久| 女人天堂 AV| 九九热这里| 91无码高清| 丁香九月婷婷综合| 亚洲成人在线在线| 99热在线中文字幕| 精品一区二区三区木瓜| 日韩成人中文字幕| 婷婷色五月大香蕉在线| 婷婷五月花| 97碰超级人人看| www.狠狠| 色yeye欧美| 狠狠色丁香久久综合婷婷亚洲成人福利| 欧美成综合在线观看| 97干婷婷| 99热这里只有精品 搜| 婷婷五月天激情综合深爱激情| 无码色| 另类视频一区| 色色综合院| 97婷婷丁香| 久久久人妻久久久| 伊人激情影院| 黄色三级毛片中字| 91久操| 五月丁香久久激情网| jizzdr| 人妻熟妇国产精品| 9久久网| 棕合影院色色| 欧美色色色色色| 96丁香六月婷婷蜜桃综合久久| 伊人五月婷| 97五月婷婷| 久久99热只有精品| 久久婷婷伊人| 九九亚洲综合| 丁香五月在线| 国成人网| 99只有这里是精品| 色情综合网| AV在线免费观看不卡| 九九99九九99偷拍视频免费看| 青娱乐美女福利视频美臀| 无码橾| 亚洲乱码日产精品BD| 97丁香五月| 激情五月天啪啪| 婷婷色五月婷| 久久精品噜噜噜成人A∨色欲| 激情五月开心五月在线视频| 精品久久这里热66| 色婷婷aV四虎| 操操操AV| 日韩不卡123| 色区久久| 天天狠天天叉| 亚洲欧美婷婷五月色综合| 国产午夜精品久久久观看| jiZZdr| 国产乱妇无乱码大黄AA片| 成年人夜夜喷水| 五月色天情| 婷婷五月花| 婷婷色影院| 六月婷婷综合| 亚洲小电影在线观看黄999| 九九99视频| 婷婷狠狠综合网入口| 天天综合网、天天综合色| 欧美色性色好| 人妻AV在线观看| 天天插天天射| 大香蕉久| 日本丁香五月| 99re这里只有精品免费| 国产露脸150部国语对白| 狠狠舔| 色爽九九| 狠狠综合| 午夜不卡久久精品无码免费 | 操b视频在线观看一区二区| 色婷婷五月基地在线| 日本天天操| 成人中文字幕在线| 玖玖婷婷五月天| 久久激情网| 五月丁香人妻| 丁香五月狠狠综合欧美| Www.久久| 五月丁香色| 久久总和99| 内射综合网| 九九精品综合| 99国产精品久久久久久久久久久 | 激情久久久久久| 色婷六月| 五月婷成人| 久久怡红院| 九九热超碰| 99精品在线播放| 五月婷婷六月丁香免费| 激情五月婷婷综合网| 99.色| 久婷狼色诱惑在线| 天天色天天爱天天爱天天爱y| 国产亚洲成人综合| 大香网伊人久久综合| 色婷婷WWW| 亚洲亚洲人成综合网络| 欧美VA在线观看| 九草性爱| 九九热在线精品视频| 婷婷五月蜜桃成人桃色丁香| 婷婷综合玖玖五月| 99这里有精品| 婷婷六月色| 婷婷丁五月| 99这里只有精品| 色噜噜婷婷| 色婷婷色综合激情91| 五月天丁香网| 吉澤明步Av一區二區| 婷婷五月综合色拍| 日本婷婷激情四射中文字幕在线观看| 久超超碰| 色六月视频| 91在线日本| 91操熟女| 日日夜夜久| 五月婷婷激情| 亚洲久艹| 国产SUV精品一区二区883| 97丁香五月| 午夜成人AV在线| 五月天开心色色网| 91大神操美女| 5月丁香婷婷激情网| 91美女被操| 99精品丁香五月| 午夜亚洲国产精品av一区二区| 婷婷五月成人有| 五月丁香婷婷婷激情爱爱| 噜噜噜狠狠色综合| va亚洲中文在线| 99综合视频在线| 亚洲a片免费观看| 综合色久| 色哟哟精品| 亚洲色a| 99热亚洲精品| 狠狠se| 丁香五月中文字幕| 五月婷婷色播| 久久五月天婷婷| 欧美天天干五月丁香| 日本视频99| 97在线天堂| 精品婷婷| 天天日天天摸| 丁香六月久久| 超碰二区| 99热这里只有精品66| 26uuu国产精品| 亚洲综合网 665566| 另类国产欧美视频| 激情婷婷五月在线合集| 色婷五月天| XX久久| 夜夜操,天天撸| 色婷婷六月综合| 丁香五月天啪啪| 98色花堂98t.R| 五月开心啪啪| 日韩AV中文字幕在线| 夜夜操天天干| 综合激情婷婷| 国产暴力强伦轩1区二区小说| 久久婷婷伊人| 99只有精品| 婷婷五月激情网| 婷婷五月天影视首页| 色综合久久88色综合天天| 秋霞电影理论| 亚洲另类噜噜| 色婷婷色九月| 亚洲综合色婷| ai97re99一本| 校花娇喘呻吟校长陈若雪视频| 综合网天天| 婷婷婷婷色| 色哟哟精品| 婷婷射丁香| 久草a片| 色色色.COM| 天天天日天天天干| 五月色丁香| 538在线精品| 色婷婷亚洲婷婷| 欧美色宗和激情| 亚洲午夜一区二区| 色婷婷电影网| 日本一級黃色一級片| 9国产在线视频| 国产精品第一国产精品| 97超碰在线观看免费| 婷婷激情五月天激情小说| 777久久久| wWW九九在线播放| 色综合天堂| 淫视馆aV二区一区| www.五月婷婷久久.com| 婷婷婷婷婷婷婷婷| 久久综合五月| 色婷婷播放| 久久 无毛。| 丁香婷婷激情网站| 五月婷六月| 婷婷五月天av网| 婷婷五月天激情小说网站| 六月婷婷久久大全| 婷婷色播婷婷| 五月丁香久久综合色| 色色婷| 玖玖色资源站| 狠狠色噜噜狠狠狠888了| 欧美色爱五月天| 色色色婷婷| 五月丁香狠狠爱| 超级碰碰97在线| 久久久天堂国产精品女人| 99啪在线视频| 任你草| 天天色天天爱天天爽| 激情五月天com| 色激情综合| av婷婷六月丁香社区在线观看| 色色色天堂网| 色视五月天婷婷| 婷婷激情小说| 婷婷97色| 久久人妻久久久久| 97精品自拍视频| 免费视频WWW在线观看网站| 亚洲激情六月丁香| 欧美综合在线五月天色婷婷| 欧美99| 91av无码| 呦呦v线| 亚洲精品成人| 99精品国产在热久久婷婷| yazhou seshipin| 激情丁香五月天| 一级精品999WWW| 五月四色激情| 亚州视频九九99| 91热99| 久久综合综合综合| 丁香六月婷婷色XXXX| 婷婷五月天Av| 看逼中文字幕| 91精品久久久久久综合五月天| 激情综合网五月婷婷| 日本乱论99| 久久视频这里99| 五月丁香激情综合| 99热欧| 激情亚洲婷婷| 97久久五月丁香婷婷| 人人人操97| 少妇熟女视频一区二区三区| 婷香五月网在线| 九九热在线99| 超碰京东热av男人的天堂| 丁香九月婷婷| 五月天色不卡| 99re思思精品视频在线观看| 色婷婷久久| 九九五月天| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 天天爽成人综合网站| 久久婷婷五月天激情| 草榴成人影片| 成年人看Va免费视频| 日韩人妻AV在线| 婷婷视频网| 伊人网碰碰| 狠干综合| 综合激情在线| 久久永久视频| 桃色五月天| 97超碰在线免费观看| 婷婷色导航| 另类图片五月天激情| 国产高清精品色| 日韩一级一片内射视频4K| 开心激情久久久久久久| 国产亚洲成人综合| 国产成人AV在线播放| 午夜日韩久久久网站| 婷婷激情小说| www99久久| 色五月综合激情| 天天色播| 天天综合色| 六月激情婷婷色| 九九热在线视频| 色亭亭五月天网扯| 婷婷黄色网| 五月成人天| 99ri视频在线播放| 九月婷婷综合| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 另类综合国产| 亚洲XX网| 婷婷五月天综合网| 久久欧洲综合网| 97超碰在线观看免费| 天天插天天日| 婷婷五月天伊人在线| 欧美性生交XXXXX无码小说| 俺去也在线www色官网| 久久亭亭电影| 狠狠色综合网站久久久久| 丁香五婷| www.久久| 色偷偷五月天| 婷婷天天舔| 欧美色激情四射| 久久性爱视频网站| 影音先锋xfplay资源男人网| 亚洲四色五月| 色色热| 五月丁香六月综合基地| 九月色婷婷| 天天干夜夜谢| 五月天综合图片| 超碰97免费在线| 日日夜夜狠狠| 色在线99| www.sezonghe| 99精品久久| 啪啪九九色| 六月婷婷五月天| 伍月婷丁香花全集| 色婷婷狠狠干| 国产无遮挡又黄又爽免费网站| 79精品视频在线观看,| 99综合视频在线| 色婷狠狠| 青草视频在线播放| 色欲色香综合网| 久久婷婷五月天亚洲欧美| 九九99九九99偷拍视频免费看| 性按摩玩人妻HD中文字幕| 狠狠色丁香婷婷久久综合| 干婷婷五月天| 精品久久婷婷| 婷婷性爱综合| 岛国AAAV| 国产精品久久久爽爽爽麻豆色哟哟| 五月开心网| 丁香亚洲婷婷五月| 深爱丁香网| 中文字幕激情综合| 99九九热视频免费| 伊人激情综合| av大片在线| 丁香九月综合激情| 色五月婷婷综合| 春色激情第四色| 激情小说五月天| 久久五月婷婷视频| 99热精品网| 热久综合| 99丁香五月| 伊人五月天| 久操大香蕉| 色五月av| 射久久丁香五月| 五月天婷婷日日爱| 色婷丁香五月| 色网站99| 国产va在线视频| 99精品在线播放| 色玖玖综合| 大香AV| 男人天堂AV在线一区二区| 天天干天天av天天射| 中字幕视频在线永久在线观看免费| 任你爽视频| 91ncm视频| 26uuu丁香婷婷五月| 色色色色网| 五月亚洲| 在线成人视频免费| 色婷婷在线播放| 五月婷婷色色色| 人人九色| 久久亚洲婷婷| 国产精品久久欧美久久一区| 国产又爽又猛又粗的视频A片| 亚洲亚洲人成综合网络| 久久黄色片| 色一色综合| 色色9 9| 五月天另类小说久久小说网| 久久思思99| 99re久热只有精品6在线直播.com| 综合一区二区三区| 五月丁香六月在线欧美| 丁香五月另类小说在线阅读| 五月天激情网页| 婷婷干五月综合在线播放| 亚洲第一精品成人999久久精品| 青草少妇激情| 久草热视频在线观看| 99久久五月婷婷| 中文色婷婷| 日日撸夜夜操| 五月天婷婷无码| 亚洲Av成人在线观看| 精典久久| 五月综合777| 日日日影院| www,天天干| 日本天堂爱爱| 免费视频WWW在线观看网站| www.99精品日操伊人乱碰在线| 99ri视频在线观看| 久久五月天激情美女| 欧美韩日AAA网站| 五月天色社区| 日日综合网| 九九热123| 91婷婷色 | 久久色情| 新激情五月开心五月婷婷五月丁香五月 | 激情五月丁香综合蜜桃| 26uuu另类亚洲欧美日本一| 久久婷婷亚洲| 少妇人妻偷人精品无码视频新浪| 玖玖婷婷色欲| 婷婷亚洲色| 婷婷五月天免费| 超碰97干| 99爱在线| 狠狠艹狠狠艹| 在线观看欧美| 99九九精品视频推荐| 五月天婷婷免费| 婷婷综合五月天激情| 99精品综合| 国产看真人毛片爱做A片| 人妻中文av| 狠狠操天天操| 色色狼人综合| 伊人超碰在线| 日日鲁鲁夜夜爽爽| 99热最新| 丁香六月激情毛片| 婷婷五月六月丁香综合| 日韩中文欧美| 九九大香蕉黄色影院| 亚洲九九九九| 久久人妻精品| 狠狠爱综合| 天天舔天天插天天干| 亚洲综合五月| 91 久热| 天天做天天爱天天爽在| www.婷婷| 色哟哟www| va婷婷| 国产FREESEXVIDEOS性中国| 欧美日韩成人一区二区| 99色看这里只有精品| 9热视频在线观看| 九九精品少妇| 五月天,激情四射,婷婷频道| 色婷婷五月天av在线| 亚洲一色色色色色色色色| 五月丁六月香| 婷婷成人av| 婷婷五月丁香基| 激情丁香婷婷| 狠狠操天天操| 色婷天天| 综合久久影院| 91超级碰在线视频| 五月丁香六月婷婷成人| 五月天综合| AV在线不卡网站| 99思思热只有在这里看| 日本操B视频| 九九热视频在线观看| 色播五月综合网| 五月色影院| 牛牛色av| 五月天婷久精视频| 玖玖99精品视频| 天天插天天射| 97人人搞| 狠狠干狠狠色| 再綫Av免费視品| 激情综合99| 91丨九色丨丰满人妖| 天天肏高清在线| 91porn一起草| 久久久18| 欧美日韩成人在线免费| 99在线视频资源| 九热精品| 色欲久久综合| 快乐激情五月色婷婷| 日本色婷婷| 激情五月综合色婷婷| 国产真实乱了老女人视频| 九九这里精品| 99国产欧美视频| 另类综合国产| www,超碰| 第四色五月天| 五月天婷婷色播| 91麻豆国产三级精品福利在线观看 | 熟美女麻豆| 五月天色综合| 操操操操操操婷婷五月天| 色五月激情综合网| 涩婷婷五月天| 久久停停超碰| 做爰丰满少妇1313| 五月丁香婷婷综合网| 日本三级中国三级99| 乱精品一区字幕二区| 久久A区B区| 激情av在线| 97碰在线视频| 五月久久亚洲| 五月丁香网站| 成人午夜天| 久久五月天婷婷| 99热9| 伊人99久久| 亚洲第一综合| 这里只有精品视频国产| 激情婷婷综合网| 国产成人综合网| 3p日韩网站视频| 中文字幕性爱视频| 亚洲成av人影院| 播五月,色五月,开心五月播放器 | 五月丁香六月激情综合| 国产欧美日韩性爱| 亚洲啪啪精品| www.五月天| 激情九九六月激情免费视频| 天天模,夜夜模夜夜爽| 久久机热探花| 九九热青草| 91狠狠色| 99这里只有| 亚洲精品乱码久久久久99| 免费色婷婷| 伊人五月天在线| 丁香婷婷婷五月| 久久婷婷五月综合色奶水99啪| 丁香五月婷婷欧美性爱| 色婷婷网| 六月激情久久| 丁香五月,激情五月,深爱五月| www.色99| 蜜臀AV在线观看| 123草逼网| 九九精品视频在线6| 久久婷婷五月综合色天| 99性爱视频| 狠狠色激情在线| 久久98| 色婷婷丁香社综合| 97人人操人人拍| 粉嫩AV久久一区二区三区| 色综合久久天天综合网| www.99热这里只有精品| 天天操夜夜爽| 丁香五月激情六月综合| 婷婷热婷婷色| 99热在线里有精品| 女性自慰系列第五页| 五月天天堂久久| 狠狠久久婷婷| 激情五月综合网丁| 色婷婷成人影片| 婷婷亚洲综合| 一逼色综合| 六月丁香啪啪| 五月天婷婷久久| 夜夜夜夜夜操| 激情五月丁香五月| 婷婷五月天丁香社区| 色色色色av色色色色| 婷婷五月天天aV| 九玖欧洲亚洲| 亚洲五月天色| 国产xxxxx在线观看| 天天综合情| 超碰99在线| 97干97色| 丁香九月综合| 亚洲丁香婷婷五月天综合色| 包操45分钟网站| 久久丁香五月综合六月激情红杏视频 | 管管補管管紱| 天天爽天天爽天天爽天天爽天天爽| 欧美在线视频99| 日本熟女视频一区二区| 91操色| 狠狠擼综合| 精品九九视频| AV五月婷婷露脸| 婷婷五月天色| 婷婷五月天情色| 自拍偷窥99热| 色导航色婷婷五月天在线观看| 另类 在线| 亚洲综合成人网| 欧美 日韩 成人 在线| 国产成人网站在线观看| 亚洲激情无码久久| 国产精品激情五月天色婷婷| 精品人妻一区| 久久久免费精彩视频| 丁香五月婷婷狠狠色| 99色区| 色五月丁香激情视频| 六月伊人婷婷| 夜夜干 夜夜操| www久久久久久久97| 五月丁香激情综合网| 欧洲综合一区| 五月婷婷狠狠干| 色七色九九| 久热这里只有精品视频免费观看| 97碰碰在线看视频免费| 五月婷婷综合在线| 五月婷婷,六月婷婷| www.99久久久| 思思热再线视频| 色婷婷综合影院| 久久综合性| 超碰人人摸人人操| 超碰人人超碰| 欧美成人精品一区二区| 久九色| 国产麻豆视频| 色婷婷操逼| 五月婷婷花| 色色色婷婷五月| 成人综合视频网址| 五月丁香大相交| 很很干在线视频| 狠狠干综合网| 91丁香五月| 九九99久久精品| 天天摸天天肏| 操操操av| 丁香五月最新地址| 性爱技巧五月| 婷婷五月激情欧美| 99热这里只有的精品视| 开心五月婷婷| 五月婷在线影院| 思思久日精品视频| 丁香六月婷婷久久综合| 激情99| 婷婷综合五月天激情| 五月天色综合| 欧美色色日韩| 深爱激情五月天婷婷网| 六月丁香五月婷婷| 婷婷五月电影| 色射婷婷五月天| 久久婷婷五月综合激情国产| 婷婷五月综合基地| 九九性视频| 色色色色色色色色色色色色色97| 五月丁香综合精品欧美| 久热2025无码| 亚洲黄色影视| 非洲一级AV| 99精品小视频| 免费视频WWW在线观看网站| 中文字幕视频在线播放| 色婷婷国产精品综合在线观看| 99热97美女| 五月天狠狠干| 九月丁香婷婷基地| 婷婷色影院| 免费看成人747474九号视频在线观看| 日本少妇裸体做爰高潮片 | 天天色天天| 激情久久网| 色五月婷婷久久| 日日躁夜夜躁狠狠久久AV| 五月天激情偷拍| 色五月大| 99色色| 九热视频在线精品15| 激情五月天99色| 青草激情综合| 99热热热99精品丁香| 五月天婷婷色播| 99re在线观看| 99er日韩| 大香蕉五月天| 色99在线| 色偷偷综合| 婷婷不卡基地| 五月婷婷丁香俺日污视频| 激情图片亚洲| 丁香 婷婷 亚洲 熟女| 国产超碰在线| 婷婷久久六月费| 91大操| 久久丁香久久| 伊人综合婷婷| 碰超99| 六月丁香婷婷视频综合在线观看| 99免费在线视频| 日本色婷婷久久99精品91| www.99在线| 五月婷婷色丁香| 香蕉AV777XXX色综合一区| 狠狠五月激情婷婷直播片| 黄色国久久| 婷婷五月激情天| 99干99| WWW,五月| 五六月丁香激情视频| 婷婷五月天涩涩| 伊人婷婷色| 久久久久妻| 久久久亚洲精品一区二区三区浴池| 色综合丁香婷婷| 天天操综合网| 色操b| 日本久久人| 亚洲视频99| 色波激情五月天| 夜色热久| 91干视频| 五月天影院婷婷在线观看| 日本A片一区| 9|无码久久久久久| 丁香伊人综合| 激情九九六月激情免费视频| 中文AV网站| 天天射夜夜骑| 亚洲AV人人操| 丁香五月婷婷综合啪啪| 六月婷婷久久| 久久婷五月综合色| 97人妻碰碰碰久久久久-最近国语高清| 99ri精品| 久久久精品人妻录| 久久综合爱| 五月婷婷 婷婷五月 一区二区 久久久| 色色色色综合| 久久6这里只有精品| 亚洲五月天色色| 91久久婷婷| 99色视频免费在线规看| 天天插天天玩天天干| 婷婷丁香六月| 99视频精品在线| 九九热10| h亚洲| 色婷婷丁香花五月天| 亚洲日日操| 久色资源网| 色之综合网| 五月丁香琪琪| 久久久久视剧HD| 成人精品在线观看| 亚洲五月天婷婷| 天天爱综合网| 国产亚洲99| 伊人网大香| 久热在线观看视频9| 亚洲婷婷基地| 夜夜综合色| 色色色在线播放| 99自拍网| 狼友超碰| 久9热插入| 欧美性生交A片免费看| 人人爱操| 婷婷九月在线| 久久人妻视步| 久久这里99| 99热欧| 亚洲性受XXXX五月丁香| 六月婷婷久久| 俺去婷婷 丁香| 五月丁香啪啪| 五月天婷婷基地| 色色日本欧美| 久久这里只有欧美| 99热这里只有精品1998| 深爱激情五月天色婷婷| 丁香六月婷婷一区| 色婷婷WWW| 婷婷色网站| 碰97久久| 六月婷婷操逼| 色操综合| 色色色色色色色五月| 亚洲国产精品二二三三区| 操操操AV| 丁香五月综合在线视频| 激情久久综合网| 91丨九色丨43老版熟女| 激情婷婷久久| av在线婷婷| 超碰色热| 国产综合A片| 大香蕉视频婷婷| 久9综合| 久久久天堂国产精品女人| 91人妻PORNY九色大屁股| 天天拍天天操| 天天爽天天操| 久久久99精品免费观看| 久久久GOGO无码啪啪艺术| 99热免费| 夜夜撸天天操| 五月婷婷激情网| 亚洲乱码精品久久久久..| 欧美大片免费播放器| 99国产精品久久久久久久久久久| 亚洲精品第一色色色色色色| 久久婷综| 九九超日本| 91丨九色丨熟女|老版| 99九九综合久久九九| 丁香五月天激情网| 丁香五月第四色88| 先锋资源婷婷| 欧美人妻一区二区| 五月天激情网图片| 啪啪视频99| 久久五月婷婷丁香| 怕怕視頻| av中文网站| 丰满人妻一区二区三区| 天天干天天干天天干| 激情内射人妻1区2区3区| 狼人伊人干| 99热久| 天天擼久久擼在线| 丁香婷婷五月| 久久久久久人妻| 伊人高清无码| 日本三级中国三级99| 婷丁香久综合| 伊人五月成人| 日日操夜夜撸| 丁香五月色情av| 五月亭久久无码视频| 久久久婷| 99热99热| 99精品亚洲| 色综合99无码| 91黄操| 婷婷激情五月天小说| 久久丝袜婷婷| 丁香六月成人| 久久婷婷91| 在线综合婷婷| 五月丁香综合| 欧美A片在线视频免费观看| 97中文在线| 天天天日天天天干| 第四色激情网| 亚洲婷婷丁香五月| 亚洲久久视频| 综合久久六月| 国产精品18久久久| 婷婷五月天亚洲综合| 久久久久久综合五月婷婷| 96精品久久久久久久久| 久久六月婷婷| 五月天伊人av| 人人摸人人澡人人| 五月丁香久久激情综合| 天堂AV三级| 噜噜色com| 国产日产亚系列精品版优势| 无码区婷婷五月花开| 日日夜夜天天综合| 亚洲国产精品二二三三区| 激情九九六月激情免费视频| 日韩久久这里只有精品| 26uuu| 婷婷五月丁香花综合| 天天爽天天爽夜夜爽| 大香蕉精品视频| 涩婷婷视频快播人妻| 夜夜www| 人妻内射视频| 站长推荐无码播放| 五月婷婷五月| 开心婷婷五月综合| 人人干天天操五月丁香| 五月香婷婷| 久久久久激情| 欧美五月婷婷| 亚州综合色| 激情婷婷综合五月少妇| 激情亚洲五月| 天天天天天操| 免费看欧美成人A片无码| 99热在线观看免费中文| 五月天社区| 人妻久热| 婷婷色操| 久久看婷婷| 日本五月婷婷| 狠狠综合色网| 五月色影院| 亚洲无AV在线中文字幕| 综合婷婷六月| 99精品免费| 久久婷婷五月国产激情综合片| 日韩无码专区| 九九黄色网| 丁香六月啪啪| 婷婷午夜| 99爱视频| 五月丁香色婷婷伊人| 婷婷综合网站| 亚洲小视频免费看| 五月天色丁香| 毛片网站谁有| 久久五月天综合| 99久久黄色顶级视频| 国产精品美女久久久久AV超清 | 丁香五月五月婷婷五月天激情四射| 久久精品99国产精品日本| 九九热99精品在线| 丁香婷婷狠狠97| www.狠狠艹| 婷五月天六| 99在线观看精品视频| 色色色综合色| 久热伊人| 五月丁香久久久日婷婷久久婷婷日| 精品人妻伦九区久久AAA片| 伊人婷婷五月| 久婷婷久草| 久机视频这只有精品| 99re在线视频| 婷婷午夜| 日本成人噜噜噜噜噜| 五月婷三级片| 精品人妻伦一二三区久| 另类亚洲2| 婷婷色五月激情| 天天日夜夜B久久| 日本一级黄色片。| 久久色亭亭五月天| AV九九| 男女啪啪做爰高潮无遮挡| 五月天婷婷成人资源站| 婷婷欧美激情| 色99在线| 色婷婷基地| 久久婷婷丁香花综合网| 99色网站| 色5月婷婷| 综合在线丁香五月| se99热久久一本| 婷婷婷婷婷婷婷五月丁香| 激情五月五月五月婷婷| 天堂久久大香蕉| 日本激情91| 亚洲色色在线| 日本性视频| 天天精品视频免费观看| 综合热无码| 日本婷久久| 亚洲精品字幕| www.久久综合| 色播五月婷婷综合| 久久嘟嘟丁香| 超碰在线99| 欧美激情Va| 婷婷五月综合社区| 国产毛片精品一区二区色欲黄A片| 91九色精品| www.五月天性.com| 超碰在线人人| 伊人在线另类| 久久综合九九| 99只有精品| 亚洲一区二区无码蜜乳av| 99精品一二三四视频| 狠狠操狠狠色| 日本一级一级一级一级| 天天操天天操天天操天天操天天操 | 久鲁鲁色网| 九九综舍久久| 久草婷婷网 | 91九色超碰| 人人干人人看| 91超级碰在线视频| 丁香五月六月婷婷综合激情| 超碰97免费在线| 婷婷丁香18| 色五月首页| 色日本综合| 五月天激情综合10p| 成人精品一区二区三区四区五区 | 玖玖婷婷五月| 久久人妻伦理| 性小说五月天| 日韩色色网| 欧美色色色色色色| 99在线播放| 无人区码一码二码三码医生系列| 九九99久久| 99性爱| 丁香六月婷婷五月天| av网址在线| www色婷婷com| 九九精品re免费视频| 人妻丰满精品一区二区A片| 人人草人人爱| 婷婷综合色| 色五月婷婷91| 日欧大屏操| 精品久久久人妻| 亚洲综合婷婷五月天| 五月天婷婷色小说| 五月婷婷高清| 精品视频这里只有精品| 久综合色| 91九色精品女同系列| 九九色院| 色香久久| 五月丁香婷婷99| 激情综合激情综合| 99热这里有精品2| WWW.开心五月天.COM| 五月天婷婷在看| 五月丁香六月婷婷不卡免费无码| 99色色热| 99久久这里只有精品免费官网| 91chinese在线| 思思色播| 99热这里在线精品| 色婷婷91激情小说| 五月婷婷新网站| 思思热在线视频观看精品| 久久婷婷成人视频| 天天摸天天舔天天爽| 国产裸舞福利资源在线视频| 色播五月丁香婷婷| 色亚洲婷婷| 天天夜夜爽| 丁香六月成人| 久久这里只有国产视频| 五月激情综合深爱| 五月婷伊人| 五月婷婷色播视频| 天天噜天天爱| 五月婷婷网站| 狠狠五月激情丁香六月| 成人免费在线电影| 亚洲成人高清在线| 久久久久9999| 国产精品18久久久| 久色大香蕉| 久草x色在线观看99| 日韩一级网站| 另类在线| 亚洲激情 久久| 五月六月激情| 婷婷激情视频欧美视频自拍视频欧美剧| 人人播| 大香蕉伊人99| 久久XX| 亚洲AV影片在线观看| 亚洲在线视频321| 91尤物九色在线| 深爱激情四射| 九九热这里只有精品31| 九九热99免费视频| 丁香婷婷基地| 在线观看日韩12345区| 亚洲成人av在线播放| 思思久久99热| 另类的婷婷| 五月丁香色| 97啪啪| 欧美怡红院黄站| 3p久久| 99色这里| 六月丁香社区| 久久婷婷网站| 五月婷A V在线| 婷婷综合在线播放| 最新精品视频99| 五月婷婷亚洲| 这里只有精品久久| 色五月婷婷久久| 亚洲无码另类| 婷婷五月激情四射手| 吊色AV男人的天堂| 777丁香六月青青草婷婷综合久月| 婷婷色情六月| 狠狠操综合| 激情五月天婷婷色色色色色色色色色色色| 久久五月天色婷婷| 狠狠操性爱av| 丁香五月社区| 日本大逼91| 婷婷激情五月天色| 99久久综合网| 综合网精品99| 六月丁香婷婷综合色播| 丁香婷婷影院| 国产在线网| 欧美97色| 五月丁香六月婷婷欧美综合| 婷婷午夜精品久久久| 亚洲AV成人在线观看| 五月天婷亚洲天综合网综合| 五月天色丁香| 丁香五月天成人| 国产67194| 婷婷五月激情小说| www.99热国产| 密黄站| 九九热视频免费的| 久久婷色| 99热老网站| Www.狠狠| 久久国产一区二区三区| 日韩一级A片黄色| 日本色五月| 色狠狠色噜噜AV天堂五区| 日本精品在线噜噜噜| 影视av久久久噜噜噜噜噜三级| 五月婷婷综合激情小说| 国产成人AV人人爽人人澡Va| 国产精品天天狠天天看| 五月婷婷丁香瑟瑟视频| 狠狠精品干练久久久无码中文字幕 | 五月天综合| 国产.亚洲.欧洲视频在线| 丁香五月色| 久久婷婷五月丁香网| av在线免费网站| 俺去啦综合网| 久久九九激情五月天| 婷婷 久综合| 99热最新| 91色噜噜狠狠狠狠色综合| 精品人妻久久久久久| 伊人青涩网| 丁香五月天综合网| 人人艹艹艹| www色婷婷久久综合久色| 日本色婷婷| 久草a片| 婷婷六月综合激情| 色色色丁香| 天天夜夜六月丁香五月婷婷老师| 亚洲日本韩国| 色吧五月婷婷六月丁香|