免费国产精品自在自线-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
返回資訊列表
超碰a女人的天堂| 丁香五月自拍| 91狠狠综合久久久久久| 热婷婷av| 欧美怡红院黄站| 97se视频在线| 天天爱天天做天天| 日本不卡五月婷婷丁香| 婷婷六月开心网| www.com亚洲网站在线免费| 我爱大香蕉| 国产三级秋霞| 婷婷五月成人系列| 俺去也在线官网| 欧美在线97| 99re热视频这里只精品| 丁香五月激情婷婷| 色五月婷婷网| 婷婷综合五月天| 久青操| 深爱激情网婷婷| 日日日天天干| 色青青视频| 69精品人人人人| 婷婷五月欧美| 久久五月婷综合网| 色婷婷香蕉丁丁网| 在线伦子99热| 黄色激情久久| 五月婷网| 婷婷五月丁香av网站| 影音先锋 一区| 伊人高清无码| 色情网综合| 精品无码久久久久久久久| 色综合综合色| 激情综合五| 香蕉婷婷色五月| 亚洲激情婷婷| 天堂在线9| 久久婷婷五月天蜜桃| 色婷婷a三区麻| 久久激情综合| 久久99热精品a片在线观看| 狠狠干综合| 久99久在线| www久久久久| 韩国97天堂| 久久精品凹凸分类| 久久婷婷激情久久| 九热精品| 天天成人综合| 六月综合在线| 第四色激情网| 国产91资源在线| co超碰在线观看| 色综合77777| AAA级久久久精品| 五月色情| 国产中文字幕在线视频免费观看| 伊人玖玖网| 婷婷色情五月| 亚洲婷婷丁香五月在线| 亚洲VA在线| 黄色热99| 亚洲色区17| 人人叉久| 99er6| 欧美99热| 婷婷五月在线视频| 亚洲亚洲人成综合网络| 色婷婷综合电影| 9久热在线视频精品| 色5月婷婷色| 九九综合| 色播五月| 亚洲人人操| 久热中文字幕| 五月婷婷性爱网| 琪琪色影音先锋| 婷婷无码视频| 色丁香影院| 5月婷婷6月六月丁香| 久久五月丁香| 亚洲情综合五月天| 超碰人人射| 狠狠狠狠免费| 久热 91| 99色视频| 久久婷婷人人| 五月综合婷婷久久在线| 伊人五月天在线| 综合AV网| wWwCom夜操wwW| 天天干-天天日| 九九色色| 婷婷丁香www视频日本韩国| 综合激情肏逼网| 久热视频A.| 激情小说之五月| 182TV大香蕉| 婷婷五月天伊人| 大香婷婷| 五月婷婷九| 久久综合性| 97人妻超级碰碰碰碰碰| 婷婷六月丁香在线| 国产白丝在线一区| 9久久精品视频| 色婷婷欧美在线| 深爱激情丁香| 91热久88| 影音先锋 婷婷| 大香线蕉伊人| 97五月婷婷| 日日夜夜青青草| 激情五月天视频| 五月婷婷影院| 99爱视频精品在线观看| 色色吧综合| www狠狠爱com| 色婷婷丁香| 国产精品国产成人国产三级| 五月丁香久久| 久久五月丁香| 久久最新色色色| 狠狠狠狠狠狠| 久9热视频| 思思精品久久艹| 一起草AV| 五月在线婷色| 极品人妻VIDEOSSS人妻| 狠狠干总合| 综合网五月| 丁香久久五月婷综合| 久热播这里只有精品| 五月丁香婷婷综合网| 色噜久| 九九色99| 丁香婷婷五月综合欧美另类| 五月丁香在线看| 清纯唯美 激情四射| 99热情这里只有精品在线播放| 精品99在线观看| 丁香婷婷五月天成人| 五月天成人在线精品| 亚洲中文字幕AV| 91日韩美女被插视频| 成人丁香五月天| 日本综合99| 综合色五月天| 久久青草国| 狠狠搞亚洲| 9九九久久精品无码专区| 激情二色月| 无码激情AAAAA片-区区| 成人精品99| 午夜丁香久久久久久| 久久婷婷五月草视频| 免费三级黄色| 成年人丁香五月| 九九十99视频| 丁香五月欧美| 99热在线观看这里只有精品| 亚洲成人网站在线| www99热| 欧美99热| 玖玖激情网| 婷婷娌伦网| 91黄操| 91色久| 五月开心婷婷网| 激情第四色| 婷婷五月天AV激情| 77777亚洲午夜久久| 久久这里只有精品热在99| 亚洲色图在线视频| 久久久97| 日本成人噜噜噜| 99久热精品在线| 伊人婷婷大香蕉| 久久香蕉网| 9精品久久999| 狼人狠狠操| 色噜噜狠狠色综合日日| 亚洲岛国电影| WWW,五月| 五月丁香六月婷婷无码| 国产伦理精品高清在线观看网站一区二区 | 国产看真人毛片爱做A片| 六月丁香婷婷网| 色婷婷狠狠18yy| 天天爽天天干| 五月天婷爱综合| 五月婷婷九九久久| 国产日韩精品SUV| 九九精品热| 五月色婷| Av免费网站在线| 五月色网| 婷婷五月天激情小说| 五月丁香A片| AV中文网| 国产成人综合网| 婷婷五月天久久| 做爱夜夜干天天操| 任我鲁这里有精品视频| 热99.com婷婷| 久热一区| 综合五月天| 亚洲色婷婷五月天| 婷婷五月天熟妇| 国产1区2区3区| 我淫我色婷婷五月天激情四射| 日韩黄色电影| 欧美人妻一区二区| 一本伊人色婷| 超碰九色| 99丁香五月婷| 少妇综合网| 深爱激情网婷婷| 婷婷五月天黄色| 91制片厂久久久国产电影| 中文字幕在线免费观看视频| 超碰爱爱爱| A网在线欧洲| 99re熱| 亚洲成人中文字幕| 韩日AV片| 96精品国产综合久久久久久| 色五月丁香91| 亚洲xx在线| 亚洲人妻av| 婷婷久久五月天| 五月天激情图| 丁香五月激情性色郤| 99成人网一区| 久热这里只有精品3| 91丁香婷婷综合资源| 丁香五月之久操视频| 99在线精品视频| 色六月婷婷| 99精彩视频| 久久久久久五月天| 婷婷射丁香| 丁香九月婷婷色| 婷婷丁香六月| 婷婷五月激情丁香| www.色综合| 性一交一乱一交A片久久四色| www.久热| 亚洲性爱电影| 色色色色色色色色综合网| 激情综合色婷婷啪啪六月天| 九九五月天| 九九re精品视频在线观看| 九九久热| 婷婷丁香宗合888| 婷婷 丁香 精品| 天天艹夜夜艹| 色综合九九| XX久久| 九九热大香蕉| 网站免费一站二站| 久草婷婷网| 91夫妻视频| 婷婷五月天桃花网| 啪啪东京热| 久久久久婷| 五月丁香在线观看99| 光棍影院日韩精品| 九九热只有这里精品| 五月花综合网| 涩婷婷五月天| 99久久久久| 五月丁香五月综合欧美| 99riav 亚洲| 日本三级第一页| ady狠狠入| 涩九九九九| 久久五月天婷婷| 亚洲激情综合色站| 99色爱| 婷婷五月天AV| 91丨九色丨东北熟女| 蜜桃成语时李时珍 免费| 五月开心播播网| 九九色中文| 久久色五月天| 天天操天天操| 五月丁香婷婷色色色| 色综合伊人网| AV网在线观看| a色色片| 婷婷十月丁香| 日本五月婷婷| 色婷婷另类| 丁香婷婷五月综合色情| 99这里只有精彩视频| 婷婷六月色开 | 日本韩国视频在线观看社区免费的9| 九九九激情网| 色色色色色热| 天天精品视频免费观看| 99re6在线视频精品免费| 久久综合五月天激情小说网站 | www,久久久人人| 国产 亚洲 在线| 五月天激情婷婷五月天久久| 中文字幕在线不卡| 九热视频免费观看| 26uuu激情五月天| 六月撸婷婷| 九九一区| 五月天婷五月天综合网在线观| 久久这里都是精品| 深夜婷婷 丁香| 情色五月天网站| 一本综合丁香日日狠狠色| 色色免费网站| 色哟哟性爱av| 狠狠的日| 九九综合五月欧美| 色综合综合色| 粉嫩AV久久一区二区三区| 久久婷婷激情四射五月天| 中文人妻主播久久| 97啪啪| 亚洲成人中心| 美国十月色婷婷在线观看| 色www久视频| 欧美操人| 五月天激情国产综合婷婷| 色婷婷另类| 99热这里只有精品13| 婷婷九月综合| 午夜九九九九九九九九九九九九九| 热的无码综合视频| 99视频这里有精品| 亚洲乱码成人| 国产真实乱了老女人视频| 翔田千里 50岁 无码| 欧美日韩一区二区三区四区| 成人久碰| 999影院成人在线影院| 成人国产欧美大片一区| 婷婷五月丁香在线观看| 成人看片网站| 欧美综合激情五月丁香| 国产XXXX搡XXXXX搡麻豆| 97色婷| 中文字幕在线播放视频| www超碰| 九九亚洲综合| 五月婷中文字幕| 亚洲五月天另类小说图片| 精品热九九| 综合激情五月丁香| 丁香五月花影院| 天天操天天操| 国产免费一区二区三州老师F1……| 五月在在观看| 亚洲视频在线网| 婷婷激情社区| 色五月天堂| 五月天啪啪视频| 丁香九月久久| 激情五月天婷婷| 婷五月天在线草| 日本猛少妇色XXXXX猛叫| 操笔无码| 国产精品男人AV不卡| A久网| 青青艹b| 色婷婷五月天在线观看| 婷婷综合五月天| 啪啪啪大香蕉| 思思w99| 婷婷五月综合基地| 台湾无码A片一区二区| 91色五月| 亚洲乱码日产精品BD| 色天天综合成人网| 人人插9| 99视频内射三四| 狠狠香婷婷五月| 色色欧美。| 99re热视频这里只精品5| 婷五月天丁香婷五月| 久久大香蕉同僚| 热99国产精品| 五月色情婷婷| 99热综合网| 69午夜成人影片| 日本色超碰| 丁香久久五月婷综合| 成人在线日韩| 日韩欧美婷婷丁| 99在线视频精品| WWW五月天| 欧美日本高清视频99| www久久99| 色97综合婷婷天天色| 另类婷婷五月天啪帕帕| 人人爽天天爽| 99热这里是精品| 五月丁香六月婷婷亚洲天堂网站| 热婷婷av| 中文中文在线| 欧美色五月| 婷婷五月天激情视频| 九九偷拍网| 丁香六月婷婷| 激情网五月天| 色播丁香婷婷五月激情| Se.婷婷五月天| 99综合成人视频在线观看| 激情五月小说婷婷| 婷婷五月丁香色综合| 日本在线视频手机播放五月婷| 激情骚五月| 成人做爰A片免费看网站找不到了| 久久偷拍综合五月天| 中文字幕丰满乱孑伦无码专区| 日本色超碰| 九九热精品视频在线观看| 深爱婷婷丁香五月激情| 婷婷丁香五月六月激情| 五月亭亭六月色| 色色网91| 婷婷桃色网| 成人精品在线| av色色国产| 久热这里只有| 99国产视频网| 香蕉AV777XXX色综合一区| 久久五月天综合视频网站| 高清成人综合| 欧美色碰| 97人妻碰碰碰久久久久-最近国语高清| 99re6在线视频精品免费| 日韩成人AV在线| 五月天综合视频| 啪啪激情网站| 九九婷婷五月天影视| 狠狠色丁香久久久婷| 色婷婷色九月| 99,色| 五月综合激情| 大香蕉网站,大香蕉综合| 日日夜夜天天爽| 久er7久热| 亚洲小视频免费播放| 91丨九色|PRNY熟妇| 日本天堂网站99| 9精品久久999| 黄急一级视频| www,setingting| 色婷婷呢狠禁久禁| 丁香五月色情av| 五月网站| 亚洲传媒在线观看| 岛国资源站| 五六月婷婷久久| 综合 激情 婷婷| 另类丁香五月天区图| 日韩青青| 久热re在线视频| 99热99思午夜精品| 91九色欧美| 九九人人自拍| 成人片在线播放| 九九香蕉网| ww亚洲ww在线观看| 高清无码 一区 二区 三区| 在线区区区| 婷婷瑟五月天久久综合| 亚洲色亚洲精品| 情趣视频66| 久久久免费精彩视频| 少妇人妻人伦A片| 五月丁香成人| 开心五月激情网| 国产精品美女久久久久AV超清| 丁香狠狠干| 婷婷五月天性爱视频| 亚洲黄3级片网站欧美| 97色在线观看视频| 久久久久婷婷五月热综合| 9999热精品在线免费播放| 26UUU精品一区二区c〇m| 五月婷婷激情四月| 久久大香蕉同僚| 人人摸人人干| 热久91| 99热在线精品播放| www.夜夜夜| 超碰1999| 婷婷成人五月天| 激情五月天天| 99热在线精品播放| 中文字幕 久久9999| 日韩aaa| 九九99久久| 欧美三级巜人妻互换| wwww.色婷婷| 综合久| 天天综合亚洲综合| 99ri在线观看视频| 日本WwW色偷偷丁香花久久久京东热| 五月亭亭色| 丁香六月激| 夜夜操,天天撸| 婷婷色在线| 婷婷五月天桃花网| 丁香色色网| 99re这里只有精品在线观看| 丁香五月色| 操逼综合激情网| WWW,色五月| 丁香五月婷久久| 色丁香久久| 丁香久久九九99| 99 频99热国里只有精品| 天天天天天天操| 亚洲精品又粗又大又爽A片| 天天操天天谢| 久久激情网| 美女爆乳18禁www久久久久久| 久热婷婷| www.maotanji.com| 中文字幕精品推荐免费在线观| 久久五月婷婷电影| 丁香久久久| 婷婷丁香激情五月天色色色| 色婷婷五月天天天天天| 伊人久久大香蕉网| 欧美人人超级碰| 丁香五月婷婷88在线| 大香蕉婷婷| 超热久碰.com| 79色色| 亚洲日本韩国| 婷婷在线播放| www.色五月| 91.www综合| 99热这里只有精品26| 99热成人| www.刺激色网站www.| www.日日夜夜| 日韩丰满少妇无码内射| 天天日日人| 六月色色| 色香蕉影院| 久综合| 国产午夜精品一区二区| 成年人丁香五月| 免费日本aⅴ中文字幕 | 五月丁香人妻| 色色激情| 国产成人亚洲综合A∨婷婷| 五月天婷婷操逼视频| 亚洲中文乱字字幕在线永久| 激情骚五月| 日韩色五月| 色色热日| 狠狠色综合网| 超碰在线中文字幕| 日韩AV片| Av大香蕉| 综合色图区| www久久五月com| 色久综合| 婷婷免费无视频| 免费无码毛片一区二区A片| 五月停停直播| 六月婷婷毛片| 婷婷六月久久综合导航| 激情五月天99色| 五月天播播中文字幕 | 久久婷婷五月天懂色| 天天摸天天肏| 狠狠狠狠狠狠| www.激情五月天| 一区无码| 婷婷五月花| 丁香五月天天哦| 成人免费120分钟啪啪| 99aese| 一本久婷婷综合| 99热66| 五月婷网| 色www久视频| www.狠狠艹| 天天操屄网| 极品九九九九九九| 1024日韩| 开心五月丁香啪| 91亚洲免费片| 99精品免费视频| 日日色五月天| 欧美三级级99久久| 26uuu国产| 草婷婷在线| 激情骚五月| 久操操| 久久网思思| 国产精品人妻在线网址| 丁香六月综合激情| 另类激情首页| 综合亚洲五月天| 色域五月丁香| 啪啪91| 久噜久噜| 99综合视频一体| 五月婷婷电影院| 99久精品视频| 婷婷色五月天综合网| 97碰在线免费观看| 亚洲成av人影院| 深爱五月激情五月| 婷婷久久五月天亚洲欧美国产日韩在线观看| 婷婷五月丁香基| 婷婷五月综激情| 亚洲性爱99在线| 91打屁股视频网站| 人妻第九页| 久久9RE热视频精品98| 丁香五月伊人| 色在线99| 这里只有精品免费视频在线观看| 99热伊人| 超碰av天堂| 亚洲日韩成人三级av| 99在线热| 狠狠干无码| 色久婷婷网| 五月丁香成人| 青青999| 图片区 小说区 区 亚洲五月 | 久久99久久99精品免观看软件 | 婷婷网五月天| 五月婷婷手机在线| 最新午夜理论片| 亚洲综合视频在线| 久久婷婷的综合色丁香五月| 日韩专区五月天婷婷丁香| 综合五月婷婷| 99久在线视频| 久久Xx| 色色色色网| 日本激情五月| 狠狠干青青草| 婷丁香五月天| 色黑鬼导航| 九九99精品视频在线观看| 九九人人看| 久久丁香婷| 婷婷99狠狠躁天天久久久九九九| 丁香五月影院| 色婷婷婷av| 五月伊人网| 免费看成人747474九号视频在线观看| 亚洲成人综合网在线免费观看| 国产又爽又猛又粗的视频A片| 99精品在线观看| 久久婷婷六月综合| 五月天婷婷丁香| 四色永久成人网站| 色婷婷电影| 第四色激情网| 激情五月婷婷丁香| 久久婷五月| 婷婷色五月激情| 久久草大香蕉| 中文字幕 中文字幕明步| 少妇人妻人伦A片| 婷婷五月天福利| 噼里啪啦在线观看免费完整版视频 | 天天爽日日爽夜夜爽| 激情开心五月亚洲| 99性爱视频网站| 日本久久爱| 99热这里只有精品在线观看| 欧美性爱一区| 99re6久热只有精品6在线直播| 天天弄天天操| 91男人操女人视频| 99色在线免费观看视频| 丁香五月开心亚洲| 九九av| 狠狠做五月婷婷| 毛片新网地| 久久99激情丁香婷婷小说网| 丁香五月AV| 狠狠做深爱婷婷久久综合一区| 国产成人亚洲综合A∨婷婷| 大香蕉综合网| 97超级碰碰碰久久久| 成人短视频免费观看| 五月天伊人综合| 五月天日日操夜夜操 | 色女人久久| 亚洲日日日| 99热网精品| 亚洲AVwwwwwww| 日韩在线视频中文字幕| 天堂爱爱| 蜘蛛女侠2003满天星免费观看| 色噜噜狠狠色综合成人99| 97精品综合久久| avh片在线观看| www.五月天色色.com| 无码一区二区日韩| 丁香婷婷五月| 婷婷丁香六月天| 97碰碰叉| jiujiu热在线视频| 婷婷五点亚洲| 成人va在线播放| 91男人资源站| 婷婷激情伍月网| 在线1青婷| 五月丁香啪啪| 日韩情色在线观看| 婷婷五月天无码熟女| 五月天激情国产综合婷婷| 久久久婷| 久久五月天网| 五月噜噜| 色日本五月天| 国产美女主播vip| 婷婷丁香水多多视频| 五月婷婷丁香六月| 国产高清av黄色看片| 色噜噜狠狠色综合成人网| 亚洲综合色丁香五月天| 亚洲天堂热| 热久91| 五月激情婷婷开心五月| 五月婷婷与六月丁香图片激情| 五月天婷婷综合色| 五月婷婷激情综合在线| 五月婷婷,狠狠操| 婷婷狠狠综合网入口| 久久久中文| 激情五月丁香婷婷| 久久综合26p| 激情丁香久久| 激情综合五月丁香| 9精品视频在线| 婷婷五月丁综合| 色五月激情五月| 丝袜大香蕉| 人人综合久| 4399精品一区二区| 激情五月色综合国产精品| 激情五月天社区| 狠狠第四色| 舔色婷婷| 青青色com久久| 五月天激情美女久久| CHINESE熟女老女人HD视频| 人人爱操| 亚洲1区| 五月婷婷中文字幕| 91ncm视频| 久久在线大香蕉| 99热6色| 婷色综合| 婷婷五月天六点丁香五月| av大片在线| 日日色五月天| 202丰满熟女妇大| 亚洲午夜精品久久久久久人妖| 九九aV| 六月婷婷综合| 婷婷五月激情丁香| 婷婷丁香五月av| 色婷婷在线视频| 99久久精彩视频。| 色婷婷电影网| 婷婷六月婷婷| aV直接看| 天天色综网| 伊人丁香五月婷婷潮吹| 五月丁香色| 91chinese 在线| 久久99久久99精品免观看粉嫩| 丁香视频| 九色91国产| 99热99干| 婷婷五月天小说| 操逼福利视频| 大香蕉丁香五月| 日日夜夜天天综合| WWW.99视频| 黄色三级日本| 丁香五月狠狠在线观看| 国产乱人偷精品人妻A片| 襙逼网| 狠狠色中色| 99成人| 99精品热| 久久久99精品免费观看| 日日夜夜综合| 亚洲婷婷丁香| 狠狠穞A片一區二區三區| 日日鲁鲁夜夜爽爽| 第1影院之五月婷婷| 婷婷人人操| 五月丁香激情综合啪| 电影91久久久| 色色婷婷丁香五月天| 色10月婷婷视频| 婷婷五月久久| 色99色| www.99热最新视频8| 亚洲无码影音| 91大神操美女| 国产综合激情五月久久| 丁香婷婷五月人体| 亭亭五月色男人| 丁香六月爱综合| 婷婷五月色惰| AV中文在线| 五月花在线观看视频| 久久色情| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 思思re最新视频| 免费看欧美成人A片无码| 婷婷激情小说网| 久草视频大香蕉99| 26UUU精品一区二区| 久久久久久五月天| 天天日天天做天天舔| 激情色五月天| 99这里都是精品6| 99精品小视频| 99丁香五月婷| 五月丁香色婷基地综合久久| WWW.桔色成人.COM| 操操自拍| 亚洲bt丁香五月天婷婷激情小说| 99综合在线| 天堂网操| 做爰丰满少妇1313| 国产操碰| 六月婷婷在线| 五月色导航| 久久色情| 婷婷五月色惰| 色青青电影色五月| 天天干,天天日| 久久综合首页| 五月天天爽| 欧美毛片www| 黄色AV日韩| 97碰碰人人视频| A片试看50分钟做受视频| 伊人干综合| 特级西西4444www无码| 天天爽曰日爽| 亚洲综合激情五月天婷婷| 中文字幕成| 99riAV成人在线视频| 天天插天天插| 亚洲色网址| 九九五月天| 五月天激情网站| 亚洲99精品欧美一区| 亚洲无码成人性爰网| 看黄的网站18禁| 亚洲美女高潮久久久久久69| 99热国产婷婷| 久久aaaaa| 99精品综合在线| site:hcxsz888.com| xx久久| 色色色色区| 免费观看日韩成人av| 大香蕉久久综合网| 综合欧美五月婷婷| 韩日另类| 久久桃花网色婷婷| 666555。COm毛片| 国产偷人爽久久久久久老妇APP| 99在线观看| 色九九综合| 香蕉久久国产AV一区二区| 久久99热这里只有精品| 无码任你操| 日本色五月| 26uuu精品一区二区| 综合激情五月丁香| 日韩九九| 97人人草| 91.www综合| 丁香五月激情图片婷婷| 亚洲无码影音| 婷婷五月综合社区在线| 99在线免费视频播放| 色色色五月| 九九偷拍网| 五月婷激情影院| 超碰成人在线观看| 草综合网| 日本狠狠爽| 人妻操在线看| 五月丁香另类图片| 狠狠爱五月婷婷| 亚洲AV网址| 激情五月天视频| 亚洲亚洲人成综合网络| 99视频在线9| 亚州精品成人片| 在线观看av网站| 丁香五月激情婷婷视频| 色色色视频| av人人操| 色婷婷国产精品综合在线观看| 久操大| 午夜丁香| 中文超碰视在线| 4399伦理午夜| 天天爽在线视频| 久久99久久99精品免视看婷婷| 五月激情网站| www,色综合| 午夜一区| WWW.桔色成人.COM| 色五月婷婷一二| 99精品国产热久久91色欲| 丁香六月激情综合| 大大香蕉综合在线| 生活片五区| 婷婷五月天Av| 婷婷久久丁香| 激情综合五| 丁香五月亚洲综合| 天天久久狠狠色综合| 美女要搞搞天天搞搞搞网站| 婷婷五月丁香基地| 天天色天天操天天射| 久久9情免费| 最新av在线观看| 天插天啪天啪天啪| 99九九在线观看免费| 亚洲字幕AV一区二区三区四区| 久久婷婷东京热大香樵| 日本女天天爽| AA丁香综合激情| 韩国真做片在线观看| 五月婷婷综合性爱噜噜| 亚洲人人96@| 99这里有精品视频| 夫妇交换刺激做爰| 欧美色宗和激情| 99国产性感视频| 二色av| 9精品一区| 亚洲精品乱码久久久久久综合| 久久金品黃色| 色五月激情五月| 99啪| 五月天久久91| 少妇高潮呻吟A片免费看软件| 一区二区免费看| 婷婷激情5月| 九九热在线精品视频| 99热久久日本| 丁香五月天无码| 五月天色区| 国产精品人妻在线网址| 婷婷综合五月色播| 婷婷久久五月天| 日本欧美国产| 丁香五月激情婷婷婷婷在线观看| 亚洲精品久久久久久久久久飞鱼| 欧美人人操| 亚洲天天操| 婷婷丁香18| 激情99热| 婷婷五月婷婷| 伊人久久大香网| 涩五月婷婷| 国产激情一区| 99亚洲大片精品永久在线观看| 天天色天天| 久久综合激情| 亚洲免费观看高清完整版AV线| 日本道久久91| 久久久久人妻中文| 国产乱妇无乱码大黄AA片| 五月丁香综合啪啪| 五月婷婷性爱| 99玖玖免费视频| 五月激情综合网| 色开心五月丁香| 激情五月色播五月| 婷婷五月欧美| 可似看的AV| 色yeye欧美| 九九免费精品| 97超级碰碰碰久久久| 另类视频丁香五月| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 久久婷婷五月天激情| 精品亚洲国产成人A片在线鸭王| 久久精品性爱视频,| 色一情一乱一乱一区91Av| 狠狠色狠狠| 婷婷伊人网| www.日本久久videos| 日本片日本片祼观看网站在线看中文版网页在线看 | 五月婷婷丁香伦理网| 做爰丰满少妇1313| 天天插夜夜爽| 九九色婷| 色婷婷www| 久久综合婷婷五月| 六月婷婷激情图片| 伊人婷婷青青cao| 九九成人| 春色激情第四色| 亚洲人妻av伦理| 五月天婷婷丁香蜜桃91| 久久精品99国产精品日本| www,色中色| 香蕉久久五月| 婷婷丁香五月天激情| 操逼巨乳91| 91九色精品熟女内射| 亚洲五月丁香综合网| 五月天激情国产综合婷婷婷| 色大综合| 狠狠狠狠操| 国产亚洲av片| 五月丁香精品| 深爱婷婷基地| 中文字幕视频色婷婷| 99热在线观看精品| 激情五月色婷婷| 久久人妻久久| 婷婷精品在线| 激情AV中文| 五月丁香黄色视频| 色婷婷色久综| 九九美女视频| 九九激情网| 中字幕视频在线永久在线观看免费| 激情网狠狠干| 九九精品婷| wwwss在线观看| 6080av| 影音先锋男人资源站一区二区| 丁香五月影视| 色欲五月天| 男人的天堂97| 激情av| 婷婷狠狠干| 久久天天天| 丁香五月伊人| 99人碰碰碰| www.婷婷,com| 色婷婷69| 欧美日韩二区在线| 99操无码视频观看| 婷婷五月天com| 亚州操逼网| 欧美色图片88| 婷婷激情九月| AV天堂婷婷五月天| 亚洲综合1024| 色欲久久99精品久久久久久| 在线中文字幕视频| www.26uuu.com亚洲电影| 97碰在线| 久久人视频| 色丁香五月婷婷| 在线视频激情网站| 色丁香久综合在线久综合在线观看| 99热天堂| 成人αV视频免费观看| 人人操日| 五月婷婷婷婷网| 亚洲精品操一操、噜一噜、摸一摸、爽 | 影音先锋男人女人| 欧美日韩91| 五月亭亭直播| 丁香婷婷六月激情| 4399在线日本A片| 丁香五月熟女| 国产乱妇无乱码大黄AA片| 91偷拍视频| 五月六月丁香激情| 能看的AV网站| 日本激情ⅩXX免费视频| 97色啪| 超碰在线个人观看| 亚洲第一成人无码A片| 九九99精品视频在线观看| 丁香五月色| 夜夜爽天天日| 丁香五月激情月| 亚洲五月天,激情视频| 97黑人精品区| 丁香五月婷婷少妇| 欧美色激情四射| 欧美顶级少妇做爰HD| 99re思思久久| 日韩成人无码人妻| 欧美性爱五月天| 青草少妇激情| 天天日日爽| 先锋av性爱成人电影| 亚洲久久视频| 五月激情五月丁香| 激情av| 五月色婷| 中文字幕永久免费| 亚洲一区国产传媒| 婷婷色吧| 91色在线 | 日韩| 亚洲四色五月| 婷婷综合av| www.99久久久久99| 888久久久| 中文字幕在线不卡视频| 久9热在线免费观看| 婷婷五月综合性爱| 久久婷婷六月综合国际| 亚洲午夜成人av电影网| 成人亚洲精品久久久久| 亚洲国产精品二二三三区| 日日日日日| 国产精品久久久久久久久久久久| 亚洲视频一区| 内射在线CHINESE| 日本二级毛片二级毛片| 丁香五月天堂婷婷| 99热亚洲只有色| 九 九九九AV| 日韩三及成人AV片| 99精品国产在热久久婷婷| 另类 在线| 色综合色五月| 色色热99| 深爱开心激情网| 久久九九大香蕉电院| 欧美激情综合色丁香婷婷五月天| 国产精品香蕉| 99热| 婷婷丁香色五月| 思思热在线观看| 色婷婷成人色网| 9热久久| 久久婷婷亚洲| 色情丁香五月天| 狠狠五月天激情| 色综合久久88色综合天天99| 婷婷综合亚洲| 五月天激情综合| 琪琪色网在线| 97热超碰| 色综合丁香| 天天日天天摸天天| 五月丁香人妻| 伊人狠狠丁香婷婷综合尤物| 99操| 日韩专区五月天婷婷丁香| 99 福利 导航| 天天艹天天综合网| 五月丁香六月婷婷a v| 思思热精品在线视频| 在线99热| WwW色婷婷| 99热精品99| 婷婷六月色丁香视频在线观看| 婷婷深爱网| 熟女激情网| 中国女人内射6XXXXX| 亚洲激情五月| 五月丁香综合激情在线观看| 久久婷婷五月天激情唯美| 天堂在线9| 亚洲国产精品二二三三区| 五月丁香婷色| 激情六月下句是什么| 九九99精品视频在线观看| 99热这里只有精品66| 久综合4| 99视频在线| 99精品免费欧美小视频| 九九热在线视频观看| 色天使色综合| 欧美婷婷六月丁香综合色| 欧美婷婷色五月| a网站免费观看| 91综合网| 99这里的视频都是精品| 五月婷婷五月天| 丰满少妇猛烈A片免费看观看| 五月天婷婷AV| 五月天激情中文字幕| 五月婷婷欧美| www.九九婷婷| 天天草狠狠擦| 五月丁香色色| 另类婷婷五月天啪帕帕| 五月丁香六月综合情在线观看| 久久偷拍综合五月天| 丁香五月激情网| 4399亚洲视频| 久久99激情丁香婷婷小说网| 色久综合| 九九99免费视频| 日韩三级高清无码| 免费无码毛片一区二区A片 | 亚洲乱码日产精品BD| 丁香五月婷婷av| 亚洲天天综合| 欧美成人精品A片免费一区99| 五月婷婷色影院| 综合在线色婷婷| 婷婷丁香中文字幕| 成人婷婷桔色| 思思热99热| 色婷精品91| 狠狠搞狠狠操| 狠狠爱丁香婷| 色色色色色色97| 婷婷久热| 色播五月婷婷| 乱码操操| 五月久久婷婷天堂视频| 26UUU欧美| 五月婷婷黄网站大全| 精品九九视频| 中文字幕日产A片在线看| 色情综合网| 91色色色| 亚洲在线操| 色婷婷五月在线| 天天肏高清在线| 九九在线精品| 99热第一页| 五月丁香婷婷欧美| 夜夜操激情| 天天日天天舔| sewuyuetingtingiii| 丁香婷婷激情网站| 五月婷婷激情啪啪| 五月综合色播播丁香婷婷| 五月天操逼激情| 五月综合婷婷久久在线| 婷婷五月花| 色婷婷狠狠色| 丁香六月婷婷色XXXX| 久热a| ai97re99一本| 天天天天天日| 九一九九黄色| 五月丁香综合激情| 日韩欧美成人片| 91avse|