亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

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ù)雜度就是標(biāo)準(zhǔn)的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)體是一個標(biāo)準(zhǔn)的Particle對象里面放了位置、速度、質(zhì)量、生命周期、存活標(biāo)記然后扔進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左右下樓去車?yán)锬脙?nèi)存80ns以上出門跑一趟便利店你可以把優(yōu)化代碼理解為你寫的每一行算法CPU真正計算的時間其實都很快大部分時間都耗在“從便利店把東西搬回來”這一步。如果你的程序訪問內(nèi)存的方式是東一榔頭西一棒子緩存行加載上來只能用三分之一那就是在大把大把浪費內(nèi)存帶寬。更形象點說內(nèi)存對你寫的循環(huán)是無情的它只認(rèn)地址不認(rèn)對象。誰和誰在地址上挨得近誰能被一起加載進緩存誰的性能就好。這就是數(shù)據(jù)驅(qū)動設(shè)計最底層的一句行話——“面向緩存編程”。1.3 對象思維是怎么把性能拖垮的面向?qū)ο蟊旧頉]有錯但盲目用對象組織一切熱數(shù)據(jù)有三個隱藏成本。第一個是數(shù)據(jù)離散。對象把每個粒子的所有字段打包在一起看似聚合了“一個粒子”的信息但如果一個循環(huán)只關(guān)心位置和速度你去把質(zhì)量、生命周期、存活標(biāo)志一起讀上來就是白白浪費帶寬。信息量大不是問題問題是加載粒度是緩存行你只能整塊整塊地拿。第二個是分支預(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ā)不上來。所以對象思維最大的問題不是“類”這個抽象而是它默認(rèn)把“邏輯上的內(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ù)組下標(biāo)就是對象的編號。這個下標(biāo)你可以理解為“實體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個永遠(yuǎn)是活粒子更新循環(huán)不需要任何分支CPU的流水線可以全速推進。2.3 對齊、填充與分配器細(xì)節(jié)從AoS切換到SoA之后另一個必須考慮的點是內(nèi)存對齊。普通std::vectorfloat分配的起始地址通常對齊到16字節(jié)這對標(biāo)量代碼綽綽有余但后面要用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); }還有一個很容易被忽略的細(xì)節(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早就給你準(zhǔn)備好的并行能力。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嚴(yán)格來說不等于a (b c)。編譯器默認(rèn)不敢亂重排除非你允許它放寬精度。數(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ù)或者尾部用標(biāo)量兜底#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個的部分退化為標(biāo)量循環(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)化?!辈患拥脑捑幾g器可能會在寄存器分配時插入多余的load/store。_mm256_load_ps要求地址32字節(jié)對齊否則直接崩潰。這也就是前面強調(diào)aligned_alloc的原因。我把mass換成了inv_mass即預(yù)先算好質(zhì)量的倒數(shù)。因為SIMD里除法遠(yuǎn)比乘法昂貴能省則省。3.4 SIMD實踐中的精度、除法與掩碼問題這里有幾個工業(yè)級項目里必須面對的現(xiàn)實問題。第一個是精度。SIMD的浮點運算順序和標(biāo)量版不同結(jié)果會有細(xì)微差異。比如vx ax*dt這個表達式編譯器可能重新組合成(ax*dt)vx最后一位小數(shù)可能不同。如果你是在做物理仿真或者科學(xué)計算這種差異可能需要單獨評估。保守方案是SIMD版本做一個開關(guān)關(guān)鍵路徑可回退標(biāo)量版。第二個是除法。上面已經(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只是把死亡粒子標(biāo)記后仍然留在數(shù)組里。結(jié)果雖然從AoS換到了SoA但因為數(shù)組中間有很多死粒子cache line利用率還是不高只提升了5倍左右。后來把存活的擠到前段才真正吃到“順序遍歷”的紅利。這個細(xì)節(jié)千萬不要省。4.3 SIMD更新內(nèi)核擴展從計算到訪存都要對齊第二輪是在SoA基礎(chǔ)上做SIMD。我直接把更新函數(shù)改成了前面那份update_simd版本但是有幾個地方在實機調(diào)試時反復(fù)出問題內(nèi)存對齊std::vectorfloat默認(rèn)分配只保證16字節(jié)對齊但AVX2的_mm256_load_ps要求32字節(jié)。我在初始化階段用std::aligned_alloc分配了所有數(shù)組并把分配邏輯封裝成一個AlignedBuffer類避免后續(xù)忘記對齊。數(shù)據(jù)規(guī)模50萬恰好是8的倍數(shù)但為了通用安全還是保留了尾部的標(biāo)量循環(huán)。編譯器指令集開關(guān)編譯參數(shù)必須帶-marchnative否則即使寫了intrinsics生成的代碼也只是用SSE兼容路徑速度上不去。這一輪從8ms降到1.2ms附近。整體對標(biāo)最初基線已經(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時確認(rèn)它確實生成了vaddps、vmulps這些SIMD指令而不是被編譯器悄悄降級成標(biāo)量。編譯命令建議g -O3 -marchnative -ffast-math -funroll-loops。注意-ffast-math不是免費的它會改變浮點運算的嚴(yán)格度工業(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)本身必須保持對象語義比如依賴?yán)^承、虛函數(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é)果和標(biāo)量版對不上浮點運算順序變化確認(rèn)精度容忍度必要時保留標(biāo)量路徑做交叉驗證向量化后只提升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)驗是永遠(yuǎn)讓基準(zhǔn)測試說話。我見過太多人憑“感覺”優(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
返回資訊列表
国内毛片婷婷六月色| 六十路日本| 久久午夜色播影院免费高清| 粉嫩国产精品久久粉嫩| 一道本久久棕合爱| 91香蕉国产尤物视频| 蜜臀精品1区2区| 黄色十八禁网站| 久久久婷| 精品美女在线视频| 美女大乳久久久久久久女人18| 91亚洲欧美| 日韩内| 国产日韩美女小穴视频网站不卡| 中文字幕丝袜人妻| 偷拍99| 色五月亚洲| 一区二区三区四区色图| 国产精品4p在线观看| 欧美中文狠| 一级特黄aaa大片在线观看成人一级片在线观看 | 精品免费囯产一区二区三区| 91最新综合| 久久久久久国产手机AV| 精品人妻久久久久一区二区三区| 求求你操操我| 夜夜久久| 91久久久老司机| 欧美一区二区亚洲天堂| 超碰精品国产无码| 大茄子熟女AV导航| 天天干1区2区在线| 熟妇一区二区三区| 欧美 青青草| 美女露胸露尿口| 免费一级a毛片久久久久久鸭绿欲| 很很干很很操| 婷婷综合激情| 国语av最新自产拍在线观看| 免费观看网黄| www.91理论| 强奸乱伦麻豆| 一级黄色性爱A级片| 亚洲日韩精品一区二区| 欧美猛交黑寡妇中文字幕| 国产精品成人在线| 入口操逼网站| 波多野结衣被操50分钟免费视频| 久久精品国产99精品亚洲蜜...| 久久永久无码人妻视频| 久久久久久久九九九九| 亚洲美腿丝袜香蕉影视欧美成人| 99999久久久久9国产精品| 日韩人妻 中文字幕| 欧美亚州手机在线| 色蜜AV| 青青草九九九九九| 性吧在线视频| 欧美最婬乱婬爆婬性视频| 国产精品视频电影| 欧美伦乱爱| 欧美日本不卡| 黑人干亚洲| 91中文精品日韩欧美在线 | 少妇丝袜在线观看AV| 免费人人搞97| 日韩精品操少妇| 91美女視頻| 男人的天堂99| 日韩中文字幕视频| 老司机深夜18禁污污网站| 国产一在线观看| 无码视频黄色网战| 91日本在线观看| 欧美制服另类丝袜| 乱码人妻一区二区三区| 欧美日韩精品久久久久久久久东北老熟妇| 综合亚洲欧美| 亚洲中文字幕精品一区| 国产精品视频麻豆入口| 校园春色 男人天堂 | 99re在线视频这里只有精品| 啊啊啊好想要| 日本在线不卡v二区| 五十路六十路七十路熟婆| 日韩福利电影网| 色香AV| 激情五月天色色网| 色亚州人久干视频在线观看免费版| 加勒比aⅴ| 天天艹天天日| 爱妻综合网| 欧美日韩国产精品久久色婷婷| 91美女视频在线观看| 欧美日韩中文视频播放| 亚洲九月丁香| 99re在线视频| 一区三区啪啪| 天天大干大香蕉| 人人人摸人人| 啊好爽受不了无码| 91老司机在线| 精品一区二区三区蜜桃臀赵总| 久久久久无码| 久久9精品网站| 无码不卡亚洲成?人片| 黄片在线免费在线观看| 91色碰| 国产在线激情| 色色色网站| 97天天插| 欧美成人一级免费电影| 亚洲AV人人澡人人爱| 国产精品99精品视频网站| 人妻天堂综合网| 久热网| 国产精品熟女丝袜一区二区| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 欧美激情色婷婷花野真衣一区二区| 啊啊啊好想要| 综合网~91综合网| 黄色AV免费| 黄色高清无码无码破解免费暗网| 欧美高潮| 欧美亚洲中文字幕| 久热精品在线| 日韩熟女精品无码专区一区二区| 亚洲av噜噜噜噜噜噜| 91人妻人人妻| 欧美精品久久96人妻无码| 国产精品久久9| 蜜臀在线视频| 上床不卡网站| 91高清无码下载| 亚洲宗合网| 亚洲黄色网址视频| AV色女综合| 91色情黑丝搞鸡在线观看一区二区三区三州| 91国产伊人大香蕉| 亚洲操操操| 美女啊啊啊啊啊| 黄色网址在线免费观看| 草B在线| 99性视频| 久久黄黄| 强奸乱伦亚洲第一页| 一区二区三区成人| 久久久爆乳翘臀一线天伦理视频| 特级特黄一级毛片免费| 97精品国产97久久久久久户外免费| 久久αⅴ| 99精品网站| 亚洲精品第一| 一级性爱视频免费观看| 亚洲揄拍网| 91色久| 亚洲av青草久久一区二区| 夜夜操老骚逼视频网站| 黄色乱论网站| 精品伊人久久久大香线蕉小说| 91欧| 午夜福利在线视频1000| 久久久一区二区三区三州| 91高潮喷水美女| 日本三级韩三级99久久| 曰韩av中文字幕专区| 麻豆天美一区二区| 91美女视频。| 欧美另类色| 日韩 欧美 另类 人妻| 人妻熟妇一区二区三区| 97视频在| 99久久综合| 欧美在线视频99| 欧美日韩不卡a片| 精品国产乱码久久久久久蜜臀| 天天日天天舔东京热| 国产美女高潮叫床视频| 12一15性XXXX粉嫩国产| 超碰97日韩| 亚洲综合小视频小说在线观看| 婷婷中文网| 激情熟女12P| 国产9熟妇视频网站| 久久国模av| 国产精品麻豆成人AV艾秋| 日韩性爱免费视频在线网站| 久草精品国产99| 日日骚网站| 91无摭挡| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 欧美精品1区2区3区| 五月天综合网| 91性高潮久久久久久久久| 爽爽爽免费视频| 激情五月综合| 水澄无码AV| 人人摸人人摸人人干| 翔田千里A片一区二区| 婷婷人妻激情| 国产精品另类一区大香蕉| Av色五月| 麻豆国产97在线| 中文 人妻 制服| 神马久久免费电影观看| 五月天AV资源| 国产又粗又长又大的视频| 嗯~啊~快点 死我视频免费看网站| 97视频在线免费看| 国产女同性恋视频| 亚洲熟女乱综合一区二区三区| 中文字幕亚洲欧美在线不卡| 天美欧美国产| 中文字幕人乱码中文字的预防方法 | 欧美黑人日韩少妇色情| 久久久久幕乱码| 婷婷五月天网| 91 刺激在线| 五月婷婷六月丁香| 日本三级日本三级三级人妇四虎| 美女AV一区二区| 亚洲男人的天堂AV| 夜夜免费视频| 蜜臀久久99精品久久久电影| 亚洲天堂在线怕怕视频| 午夜福利一区二区影院| 99日韩| 免费观看的av| 欧美精品三区| 91高潮| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 国产亚洲美日韩Aⅴ中文字幕无码成人| 自拍偷拍第26| 国产精品制服丝袜清纯唯美| 天天日天天操心| 欧美日本国产日韩激情视频| 99综合| 九九久久九九久久| 久草视频分类在线| 诱惑人妻欧美一区在线播放| 黄色免费网| 水澄无码AV| 欧美综合狠| 猛猛干| 97无码视频在线播放| 收看日本人日bb| 自拍大香蕉乱插| 偷拍 亚洲| 欧美日韩青操| 日少妇亚洲版| 日韩色| 国产免费一区二区三区最新不卡| 中文字幕88av在线| 易易A毛视频| 亚洲密乳AV| 亚洲激情AV| 四虎视频在线观看| 78精品| 97精品熟女少妇一区| 大香蕉免费3| 久久久久国产无av| 国产丝袜高跟美女av免费观看| 午夜超碰| 欧美人人AAA| 丁香五月天久久精品视频一区二区三区| 久久久成人精品| 欧美亚洲天堂| 天天做天天爱| 亚欧操逼片在线观看| 亚洲AV成人精品网站在AV| 韩日无码在线观看| 99精品高潮| 另类亚洲一区二区三区| 天天综合,91综合永久| 欧美一区二区三区成人性生活| 亚洲熟妇A V黑人| 1禁看欧美黄片免费看| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 丝袜色综合| 亚洲无线观看久久| 成人婷婷丁香| 亚洲男人在线观看天堂| www久久99| 欧美激情亚洲情色| 国产综合永久精品日韩鬼片| 性交一区二区在线播放| 啪啪啪东京| 99热色这里只有精品| 亚洲综合有码| 亚洲 图片 综合91| 69精品| 一本道综合色图| 日韩射图| 99色色网| 91亚州| 蜜臀久久99精品久久久久久久久| 黄页| 亚洲最大91网| 欧美精品精品一区二区| 67194无码不卡| 色视频蜜乳| 色诱avtt| 日韩人成网站在线播放| 国产超碰97| 久草视频分类在线| 国产日韩久久| 精品国产国产AV| 国产精品嫩草影院免费| 伊人9| 人人透人人操| 人妻欧美| 欧美少妇内射| 国产亚洲精品农村妇女 | 久草加勒比一区在线| 免费的av网| 中国操逼无码| 综合九九| 色九月婷婷| 久久久久夜夜夜夜| 中文字幕少妇色| 免费一级性爱久久| 久久这里只精品| 青娱乐福利99| 91婷婷伊人狠人| 国产高清自拍| 亚洲黄a三级三级三级看三级| av最新免费中文字幕| 日韩二区三四区五区六区在线看| 久久婷婷影院| 国产午夜精品理论片a大结局| 日韩精品三区四区| 91性高潮久久久久久久久| 亚洲影视综合| 99精品高潮| 九九aV| 亚洲情欲| 国产欧洲精品亚洲午夜拍精品| 亚洲精品亚洲人成人网| 久久久久亚洲熟妇熟女| 欧美综合网站999| 97天天爽| 亚洲精品亚洲人成在线麻豆| 综合网91| 日本一卡二区在线| 久久欧洲| 五月婷在线| 国产成年精品高清在线观看91| 人妻喷水| 99re在线视频这里只有精品| 亚洲熟妇乱女区二区三区| 欧美精品日韩久久久九| 射久久| 欧美91丝袜| 狠狠 91| 日韩A优精品在线观看| 97超碰欧美中文字幕| 亚洲综合贴图91| xxx亚洲午夜天堂| 黄片www.| 国产精品久久久久久无码红治院| 91日韩国产欧美亚洲另类精盘州至城都| 欧美日韩少妇色情| 啊啊啊啊啊啊啊国| 色色婷婷五月| 亚洲 欧美日韩 另类| 亚洲精品白浆高清久久久久久| 91中文字幕制服丝袜免费视频| 91高跟美女在线播放| A V少妇特黄三级| 国产又粗又长又爽又色| 熟女被操视频网址| 激情色色| 超碰在线人妻| 91大学精品激情戏| 激情五月天色色| www色日本| 亚洲最大AV网| 激情五月天丁香社区| 亚洲中文国际强奸字幕| 一起草日韩| 日韩人妻一二三区视频| 男人的天堂午夜av| 色综合久久88色综合久久天天| 不卡中文字幕aⅴ在线| 亚洲丝袜诱惑| 亚洲中字幕日本一区二区三区| 亚洲人妻中文高清| 乳欲人妻办公室奶水| 吖在线不卡一区二区国产剧情| 国产无码精品久久久久久| 97这里只有精品| 久艹日日日| 日本精品五区| 色视频蜜乳| 日韩偷拍一区二区三区| 国产操伦| 精品一啪| 色五月综合网| 久操 高清| 9999九九九久久久| 青青操日韩| 久久免费9| WWW.操逼.COM| 国语精品内射在线观看| 日本在线激情一区二区三区| 天天看综合网| 97视频在线免费播放| 超碰一区二区| 欧美综合亚洲综合| 美国黄片aaa| 日韩精品 视频一区二区| 国产AV久久久蜜爱影集| 91人妻丝袜无码| 青青草色插素人| 精品无码产区一区二| 97se亚洲综合自| 亚洲国产成人精品久久久国产成人一区二区 | 日本布卡一区二三区| 99热在线播放| 无套内射人妻在线播放| 亚洲成人网站在线观看| 国产有码一区| 一本久久久精品| 国产精品又黄又猛又粗| 欧美视频中文字幕区| 亚洲国产欧美日韩人妻日中文| 九九热五区| 99精品无码| 2024年最新色情网站在线观看| 懂色中文一区二区三区| 日本久久精品| 日本熟妇精品九九| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 超碰97最新人妻| 女生看匆91网站| 国产在线强奸视频| 亚洲色鬼| 日韩人人精品| 中文字幕国产| 日本天堂网| 一二三区视频在线观看| 久久久国产亚洲精品系列| 啊啊啊啊啊啊啊国| 青青草大香蕉视频| 国产一区二区av综合| 国产精品久久发布| 人妻少妇精品久久久久久久| 男男H黄动漫啪啪无遮挡网站| 日韩二三区| 草草草草视频| 久久激情综合| 成人开心网在线视频| 午夜福利无毒不卡| 超碰午夜在线| 超清中文乱码字幕| 午夜免费视频1000| 精品美女少妇一区二区| 国产情侣自拍在线播放| 在线情色电影 91大 | 色香在线| 一本久道在线综合视频| 成人日本精品九区| 日本爽爽爽爽爽爽免费视频| 婷婷五月成人| 日韩欧美中文字幕搭讪巨乳美人妻视频| 亚欧视频在线| 俞拍自拍| 午夜福利视频在线一区| 九草九九九| 国产免费操逼| 欧美日韩美女精品久草一区二区三区| 在线色导航| 人妻少妇色综合| 国产特级毛片AAAAAA高潮流水 | 蜜桃天美传媒AV一区二区三区| 亚洲Av诱惑| 天天综合网合集91| 人干人人人操人人摸| 色爱欲亚洲| 日韩强奸av| 热天堂一区二区| 大香蕉一级黄色片久久| 怡红院怡春院| 免费av在线播放二区| 人人爱夜夜爱| 欧美黄片免费在线观看视频| 亚洲欧美一区二区不卡视频播放 | 91亚洲色人| 中文字幕-区二区三区四区视频中国| 国产精品一区二区手机看片| 啊啊啊啊啊好大好舒服想要| 欧美成人A天堂片在线观看| 久久久免费懂色| 日本在线不卡v二区| 亚洲美腿丝袜香蕉影视欧美成人| www久久久| 在线97视频| 妇女视频网站| 亚洲欧美日韩精品久久久一区二区| 亚洲少妇自拍中文字幕懂色| 婷婷久草一区二区三区| 免费啪啪av| 欧洲站一级二级三级h| 九九av| 久久综合九色综合欧洲98| 欧美久久婷婷| 综合婷婷| 一本精品日本在线视频精品| 天美传媒精品久久视频| 热久久91婷婷| 亚洲精品亚洲人成在线麻豆| 秋霞Av理论一级在线| 99久在线精品99re8a| 大香蕉综合在线| 男女性无套 免费九一| 久久综合av| 蜜臀国产AV中文字幕| 熟妇的味道HD中文字幕| 国产精品乱码久久久| 欧美色图成人网一区二区| 色官网在线| 国产家庭乱伦表演| 亚洲午夜精品久久久中文影院| av大香蕉网站| 亚洲精品99| 久久美女国产| 综合影院永久入口国产| 日韩三级av片| 色眯眯av| 你草精品在线视频| 视频在线观看一二三区| 久久精品性| 狠狠中文字幕| 亚洲 暴爽 AV人人爽日日碰| 老鸭窝成人| 丝袜亚洲91| 蜜桃传媒一区二区亚洲| 超碰99在线观看| 黄色AAAAAAAAAAA大片| 91情色| 97色欧洲| 欧美,日韩,中文,另类| 欧美白嫩在线放| 青青草日逼视频| 天天干天天插| 九热视频| 啪啪综合网| 天天干天天狼在线视频| 亚洲最新a在线观看| 国产一区二区三区白丝| 国产精品不卡一区二区三区av| 91性网| 综合色区偷拍| 国产亚洲女v在线观看| 东京热一区二区中文字幕| www.男人的天堂| 中文字幕熟女人妻丝袜丝| 色踪合AV| 91激情国产| 色哟哟精品1精品2| 午夜精品久久久久久久| 麻豆人妻偷人精品无码视频| 亚洲综合校园春色| 激情小说亚洲视频| 91超碰在线观看| 日日摸日日弄日日拍| 亚洲欧美校园| www国产精品| 少妇久久久久久久久| 久久78| www久久国产精品| 九九视频黄色片| heyZO天然素人无码AⅤ专区| 一区二区三区成人高清视频| 午夜福利视频在线一区| 久久伊人五月天| 天天添天天干电影| 操逼内射干逼白丝91| 伊人 俄罗斯 a v| 久久后入制服| 欧美日韩资源| 国产操伦| 色综合久| 超碰99热中文字幕| 懂色av中文字幕一区二区三区天美| 伊人在线大香蕉视频久久| 久久大香蕉97| 国产高清视频无码在线| 最新日产中文在线麻豆| 五月天激情国产综合婷婷婷| 欧美天天谢综合网| 玖玖超碰熟| 亚洲久9| 欧美特大AA级黄片| aaa一级黄片| 99自拍B亚洲| 97丝袜亚洲在线播放| 四虎影视国产精品| 欧美性爱日韩高清| 日韩在线观看中文字幕视频| 67194无码不卡| 日本久久久精品电影| 少妇一区二区三区| 中文字幕亚韩| 精品久久久久瑟瑟| 人妻91少妇| 久久久久久人妻一区精品色欧美| 精品少妇一区二区三区在线视频| 精品乱子一区二区三区99| 四虎影视 亚洲无码| 女沟厕偷窥piss小便| 熟女六十路| 天天日天天舔东京热 | 国产色综合亚洲色综合吹潮| 丰满岳乱妇一区二区三区| 99色色网| 插入粉嫩少妇视频| 欧美成熟性爱精品| 天天添天天干电影| 亚洲第一页综合在线| www久久国产精品| 99久视频| 青青草原成人| 一本一道波多野毛片中文在线| 欧美激情激情xxxx欧美专区| 蜜臀久久99精品久久久久久婷婷| 天美av在线观看| 天天色综亚洲91污| 日韩黄色av中文字幕| 色噜噜精品一区二区三| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 色爱国产| 人人考人人摸人人干| 100啪啪视频大全| 少妇丝袜在线观看AV| yw尤物av无码点击进入麻豆| av黄图片在线观看| 黑人精品成人一区二区三区| 久久女同性恋一二区| 强奸乱伦Av网| 久久久久久久久久久久久久久性生活视频 | 久久久久久免费电影| 国产丁香精品露脸视频 | 69精品少妇一区二区三区蜜桃| 欧美色图91p| 天天日天天搞天天干| 亚洲欧美日韩有码| 激情熟女12P| 神马福利久草| 久久伊人最新网址视频| 天天色悠悠激情| 美女久久久| 国产suv精品一区二区四| 男人的天堂va| 蜜桃精品一区二区三区ww| 亚洲学生妹高清av| 97超碰无码网| 中文字幕国产| 久久少妇人妻| 3p国产色噜噜一区| 东京热91| 日韩人体偷拍| 人妻二区| 中文字幕一区二区三四五区日日骚| 国产高清视频无码在线| 神马久久久久久久久久久久| 欧美亚洲色图另类国产| 看看日B真人视频| www激情| 日韩在线观看三级电影| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 人妻天天爽夜夜爽爽| 日本乱人伦片中文三区| 色大香蕉97N| 欧美熟妇精品黑人巨大一二三区| 色性综合| 青娱乐手机日韩在线视频| 啊啊啊啊啊舒服| 中文字幕日韩专区精品系列| 日日摸夜夜夜夜爽| 久艹伊人精品综合在线| 亚洲干B| 久草视频在线视频在线视频在线观看| 成人性爱美曰韩| 欧美超碰9798| 人人妻人人玩人人澡人人爽| a片 xxxx受爽视频| 五月丁香综合啪啪| 亚洲AV无码久久精品蜜桃小说| 91制服丝袜| 日本午夜操逼| 天美传媒在线一区| 操逼视频色| 澳门成人网站久国产日韩| 熟妇色99| 婷婷精品| 97超碰色色| 啪啪综合网| 人妻蜜桃臀| 亚洲欧美激情在线视频| 安微少妇操BBB| 性做久久久久久久| 尤物视频偷拍免费| 操逼视频免费日韩无码| 成人在线永久| 色色色欧美| 国产99999久久精品| 久久成人国产| 久久精品人妻一区二区三区| 久久九九网| 欧美激情精品| 91n美女视频| 亚洲日韩视频二区| 999熟女精品| 国产精品久久久久av| 人人妻人人澡人人爽人人精品浪潮 | 欧美不卡在线一区二区| 白 大 人妻 区 在线| 天天躁日日躁AAA片李宗瑞| 加勒比色综合| 亚洲学生妹高清av| 日本 欧美 国产一区| 蜜臀av中字字幕网站| 夜色综合| 久久久专区| 麻豆久久久一区二区| 蜜桃视频成a人v在线| 福利天天都操| 日韩天堂av电影在线观看| 爽极品影院| 欧美91精品国产自产| 校园春色中文字幕AV| 蜜桃久久一区二区三区| xxxx网站亚洲精品| 欧美不在线| 91欧美少妇| 亚洲成人妻日韩在线| 97色冈| 精品国产精品一区二区| 国产高清无码一区三区二区| 99re久久| 亚洲激情欧美色图 | 国产吹潮女在线观看| 精品射1999| 成人情色一区二区| 996热| 久操热线| 国产 码在线成人网站| 成人国产精品三级A片| 欧美 日韩 亚洲 春色| 久久国产熟女影院| 强奸抽插av| 亚洲伊人久久综合97| 国语少妇精| 偷拍导航视频网站| 夜夜欢天天干| 91熟女视频| 欧美亚洲| 国产91会所女技师在线观看| 日韩三级在线观看网站| 日韩一级性爱无码| AV不卡在线| 乱伦av.com| 天天干少妇| 亚洲熟妇丝袜在线观看| 欧美性色综合网| 国产午夜福利视频在线| yy少妇精品久久| 色五月AV在线| 欧美性第一页| 人人操人人搞人人草| 在免费jIzzjIzz在线视频| 欧美久热| 操操操操网黑人| 久草综合网| 肏逼视频日本| 亚洲中文字母在线播放| 啊啊啊好湿久久| 九99久久| 国产一区在线观看无码AV| 91热爆在线| 亚洲精品天天影视综合网| 激情四射婷婷六月天| 亚洲一区二区三区麻豆传媒| 麻豆精品A片免费观看| 91精品人妻电影| 神马福利久草| 9久9久| 在线欧美69V免费观看视频| 91九色网| 久9爱经典视频| 国产无吗在线播放| 五月丁香啪啪啪| 欧美在线第五页| 久久成人午夜精品影院| 日韩精品国模| 久久久久久久97| 99在线精品观看99| 一本大道青青| 激情五月天视频| 色偷偷综合91久久噜噜| 国产成人午夜视频网址| 久久精9| 久久男人精品| 动漫av中文| 亚洲第2页| 中亚黄色三级大片| 亚洲欧洲日韩国产自在线| 9热9热综合网| 国产v片在线免费观看| 啊啊啊啊啊在线观看网址 | 青青草原伊人网| www.婷婷六月天| 男人的天堂VA| 97超碰69| 亚洲av影音先锋| 亚洲骚男同com| 老色69| 男人的天堂午夜av| 日日骚av| 婷婷国产精品九区| 中国女人内射6XXXXX| 91网站18+| 亚州少妇| 日亚韩精品视频二区三| 夜夜躁狠狠躁日日躁av| 青青操在线亚洲视频观看欧美在线 | 国产精品乱码久久久久久久久| 日本中文字幕在线电影| 色网站导航大全| 亚洲天堂少妇| 色 婷97| 国产又爽又黄| 国产探花日韩援交| 中国和日本人色哪个不下载能放| 操人妻逼91| 色五月av| 丁香五月激情综合国产| 亚洲色欲天天天堂色欲网女| 玖玖爱视频网站| 中文字幕神马久久| 射欧美综合| 91在线美女| 丁香五月影院| 欧美精品99久久久| 丰满人妻av一区二区三区| AAAA欧美日韩| 色吧5亚洲| 国产精品久久久久久片| 日韩无码第3页| 激情综合97| 国产又粗又长又爽又色| 天天艹天天日| 日逼视频日本| 亚洲国产ⅴ高清在线观看| 国产精品分类在线观看| 91处女在线观看| 91网九色蝌蚪操熟女| 夜夜夜夜久久久久| 欧美碰碰综合色| 99久久久| 91n美女视频| 蜜臀久久一区二区| 欧美成人都市人妻| 男人的天堂不卡一区二区| 奇米狠999| 在线观看精品国产免费| 五月天婷婷成人网| 天天日日舔舔| 国产久久久久影院老熟女| 亚洲人精品午夜不卡| 天天爽入口| 性色AV蜜色av色欲av| 国产中文大片资源中文字幕| 91精品无码人妻系列| 91亚洲黑人| 中文字幕乱偷人妻久久艾草网| 久久久久久免费电影| 百度百度日本操逼| 激情啪啪拍91| 九九九久千久久激情蜜桃在线看 | 国产精品直播在线观看直播| 亚洲色图欧美色图日韩色图| 亚洲熟女av日韩熟女| 人人操天天爽| 熟女精品日韩一区二区三区 | 国产亚洲色停停久久99精品91| 爱媛媛久久国产福利| 久久夜嗨| 啪啪综合网| 日韩人妻一区二区精品| 国产肏屁眼视频| 日韩无限资源| 后入美女国产| 久久久久熟女| 六月丁香五月婷婷| 91视频女生| 成视频在线观看免费看| 日日骚精品视频| 少妇一区二区三区精选| 内射日韩大臀美女| 婷婷五月天激情四射| 久久久久久久人妻| 欧成人精品一区二区三区| av九九| 日本人妻最新在线中| 欧美一区二区三区另类精品| 91爰爱欧美| 日日摸夜夜夜夜爽| 亚洲性感丝袜诱惑在线观看| 草草影院最新网址| 久久久久96| 91丨九色丨国产打屁股| 啊啊啊网站| oumeisetu综合| 亚洲精品久久久久毛片A片拉屎| 人人色97| 激情抓乳插进去啪啪啪日韩 | 欧美人与动性人交a| 人妻出轨一区二区三区| 丰满人妻av一区二区三区| 五月天综合网| 少妇高潮九九九九| 一道本东京热加勒比一区二区三区 | 麻豆久久一区二区三区| 人妻人人澡人人爽人人| 国产亚洲精品美女久久久m| 91模特在线观看| 欧美一二三区四五区| 日本一区二区成人在线| 日韩欧美性爱电影在线观看| 亚洲人码13| 青青草密桃在线播放| 久久成人午夜精品影院| 色欧美亚洲| 大乔未久88一区| 2001天天操| 91精品大奶人妻| 久久久精品91八戒| 91亚洲人| 人妻无码一区二区三区久久99| 色综合潮| 色妺妺在线视频| 99re在线观看| 亚洲欧美国产其他二区| 国产精品国产自产高清AV| 午夜超碰| 97超碰超碰| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 超碰色美女| 在线亚洲丝袜视频网站| 欧美成人色| 美女诱惑在线一区| 精品然女一区二区| 国产丰满少妇久久久精品影院| 综合网,亚洲,欧美| 亚洲一二三精品久久网| 伊人影院在线理论播放| 男人天堂婷婷五月天校园春色| 四色永久成人网站| 欧美性爱另类综合| 欧美日本国产日韩激情视频| 十八禁av无码免费网站APP| 日韩三A大片在线观看| 无码高清操逼网址| 色综合av男人天堂| 91av一区二区在线观看| 成人性爱视频在线看| 久久亚洲AV无码专区首页| 中文久久爆乳| 热久久这里只有精品| 嗯嗯啊啊啊好舒服| 99热 按摩 日韩| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 啊啊啊好想要| ji熟女.com| 五月婷婷基地| 日韩中文字幕av在线播放| 日本精品九九九| 性天堂| 欧美性爱三区二区| 91人人爽人人爽| 麻豆人妻偷人精品无码视频| 91情色在线| 久久美女国产| 91蜜臀熟女| 91综合天天看| 中文字幕人成乱码熟女香港| 最新国产精品久久精品| 青青色综合| 大香蕉综合网| 国产精品香蕉热久久新品| 国产精品 午夜福利| 国产精选视频| 97资源制服丝袜| 99热一区二区三区四区| 99久久久无码精品国产人| J?P?NESEHD熟女熟妇伦| 久久精品国产72国产精品福利| 国产又黄又猛又粗又爽的网站| 成人资源中文字幕在线观看| WWW啪啪的com| 亚洲自拍一区夜夜操| 国产精品免费久久久久久久久久| 欧美一级A片在线看视频性色| 综合天天网| 日本操色导航| 欧美综合在线91| 久操网视频| 国产熟女二区| 亚洲综合中文字幕有码| 色综合超碰超| 九月丁香| 男人天堂2017| 黄色二级片网站| 在线观看一级α片刺激高潮视频| 九九久久国产精品| 中国少妇XXXX做受| 久久精品一区二区三区蜜桃臀| 久久精品国产99精品亚洲蜜...| 国产白丝在线| 黄aaaaaaaaaaaaaaaaaa色网站| 色淫网站优优视频| 97精品一二区| 曰本人妻人人澡人人夹| 97欧美色| 亚洲三级网址久久最新| 高清成年美女黄网站免费大全| 婷婷探花久久精品一区| 欧苏综合色综合| 制度丝袜99| 淫荡网址| 欧美日本视频一区| 亚洲激情综合| 午夜福利免费精品视频| 狠狠爱夜夜| 欧美在线色| 欧美嗯啊……在线观看视频免费| 美女极品一区二区三区| 91老司机在线| www.久久超碰| 330dv亚洲成年视频网| 少妇 综合| 五月婷婷久久综合| 国产激情av女片自拍| V A在线| 91精品网站| 91精品在线播放| 欧美变态激情网| av操操不卡| 不卡九肏| 啊啊啊啊啊啊啊国| 丁香五月成人| 婷婷综合激情| 99热这里只有精品9| 99精品成人免费看| 天堂中文日本在线观看| 天天躁日日躁AAAAXXXX国产 | 国产亚洲精品美女久久久m| 91香蕉视频在线观看免费| www熟女乱伦com| 日韩在线欧美精品一区二区| 97天天日| 欧美91精品国产自产| 天天影视色香欲综合网小说| 试看日韩黄片| 中国AV美女| 又大又长又粗又爽又黄| 国产精品久久久无码AV网站| 无套内射人妻在线播放| 久久亚洲AV无码专区国产精品| 草草网站影院白丝内射| a在线视频免费观看| 999在线电影香蕉| 蜜桃精品一区二区三区ww| 四虎AV无码| 97超色| 老熟女91| 激情五月天社区| 91丨国产丨白浆| 美女毛片999| 91亚洲黄色网| 国产一区二区三区免费视频在性观看 | 99久久久久| 99热精品青草在线| 国产97/欧美| 超碰97人妻免费在线| 午夜精品久久久久久久99蜜桃一| 婷婷五月色| 色哟哟精品1精品2| 97精品网| 大香蕉综合在线| 中文久久96| AV乱伦专区| 日本在线一二| 久操免费视频| 亚洲二区精品在线观看| 日本九九久久99播| 福利视频网站| 丰满人妻一区二区三区色-百度| 青青操97| 人人九九精| 狠狠干91| 成人日韩欧美| 超碰97极品9| 国产中文字幕曰本毛片| 成人情色综合网| 亚洲国产精品乱码在线观看| 亚洲日韩XXX| 国产精品久久久久久高清无码免费看 | 99在线精品观看99| 亚洲欧美综合网站| 黑人嘿嘿嘿超爽免费视频| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 在线A日本| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 久操99| 69视频入口| 欧美性爱一区| 91在线超高颜值国产| 宗合情欲网| 日韩中文字幕精品一区在线| 极品粉嫩少妇视频| 中文字幕在线观看永久| 日韩国产九九精品一区二区三区毛片| 无码精品人妻一区二区三区妖精 | 美中日韩无码| 色网亚洲人| 夜夜狼人妻| 成人八戒网站| 蜜屁av| 91久久18禁| 久久九九综合| 国产无马在线| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 欧美色图亚洲色图成人在在线| 久久黄片国产一区二区| 免费国产| 国产乱弄免费在线视频。| 女人双腿搬开让男人桶| 亚洲一区中文精品| 后入式福利| 日韩精品电影| 日本人体九九九九九九| 粉嫩在线一区二区懂色| 国产精品黑人一区二区三区| 男人的天堂三级| 69综合网| 97 亚洲 日韩 欧美 在线| 把腿张开老子CAO烂你| 亚洲色天| 蜜臀久久99精品久久久| 亚洲男人天堂视频 | 九九九九九九免费视频| 九九久久99| 丰满少妇人妻久久久久久| 色婷婷六月| 国产免费永久精品无码| 精品人人插人人操| 欧美日本国产日韩激情视频|