欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,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
返回資訊列表
天天 日综合| 日本女va| 婷婷中文字幕| 伍月婷丁香花全集| 亚洲操逼片| 欧美 色婷婷| 99碰网站| 激情五月婷婷丁香| 婷婷五月开心中文字幕在线| 91操碰| 婷婷五月天成人网| 色色五月天网站| 国产成人AV人人爽人人澡Va| 久啪欧美| 国产毛片操B| 五月深爱激情网| 婷婷97碰碰| 六月婷婷深深爱| 精品成人无码A片观看香草视频| 丁香五月婷在线观看| 色9月| 中字幕视频在线永久在线观看免费| 天天色域综合网| 久久性爱视频| 久色激情| www综合久久| 国产99久久久国产精品免费看| 日韩aaa| 五月丁香久| 国模淫穴色图| 97色色色色色色色色色色色色色| 丁香色五月婷婷17C| 综合五月激情| 久久九九热re6这里有精品| 思思热视频在线观看| 亚洲五月色| 丁香久久五月天视频在线观看| 91精品久久久久久77777| 九九成年视频| 久久综合五月情| 久99热| 久久久久9| VfJxEwPH| 激情五月婷婷综合| 色激情五月| av中文网站| 激情伊人六| 欧美A级网站| 99噜噜| 五月婷婷9| 香蕉久久五月| 婷婷中文网站| 久9精品| 丁香九月综合在线| 婷婷丁香五月天影院 | www.五月天色色色| 99热9999| 婷婷色色狠狠| 激情五月网站| 精品A√| 人人爱人人摸人人澡| 午夜无码精品色综合久久| 逼逼AV| 人人干人人看| 免费精品99| 狠狠色婷婷777| 狠狠干婷婷| 五月丁香六月婷婷网| 婷婷久久99| 99热新网址| 67194中文字幕| 五月天精品| 激情五月天网站| 丁香婷婷色情| 日韩九区| 色婷婷色丁香色欲av| 成人VAV视频在线观看| 国产综合丁香五月天| 丁香五月婷婷色偷偷| 精品99视频| 五月丁香六月婷| 91丨九色丨熟女高潮| 综合狠狠伊人| 久久五月天色| 五月丁香综合激情网| 久99热| 艳妇野外情欲放荡HD| 香蕉AV777XXX色综合一区| 丁香五月-激情综合| 9色操| 99干日本| 久久久久99精品成人片| 大香蕉五月婷婷| 五月丁香六月欧美综合网站| 79色色色色| 久久少妇视频| 欧美日韩成人| 久久婷婷人人| 思思热在线视频99| 99热精品在线播放| 一区=区操屄高清大全av| 亭亭玉月丁香| 能直接看的AV网站| 五月丁香综合网| 综合色七七| 色情五月天丁香社区| 超碰99在线观看| 热99久久这里只有精品| 欧美天堂久久| 性爱111111| 亚洲旡码| 色五月婷婷久久| 综合网色| 操碰久| 五月丁了香蕉综合| 五月天天综合| 大香蕉懂9| 五月丁香久久综合| AV在线观看网站| 无码AV免费精品一区二区三区| 9色在线视频精品观看| 狠狠干婷婷| 亚洲亚洲永久无码777777| 五月婷婷综合网| 色五月丁香91| 99在线免费视| www.婷婷| 99久久九九| 成人国产欧美大片一区| 男人的天堂999| 天天摸色吧天天摸色吧| 日韩av一区二区在线/日产精品久久久| 日本久久99久久| 色视五月天婷婷| 色九亚洲| 97色婷婷在线观看| www.婷婷五月天.com| 色婷婷成人做爰A片免费看网站| 综合激情五月婷婷| 婷婷五月天激情电影| 极骚大香蕉伊人| 日本综合久| 天天综合网在线| 一本色道久久88加勒比| 日韩好吊操| 99ri在线| 97热视频| 亚洲九九视频| 五月婷婷开心深| 99精品热| 欧美成人无码一区二区三区| 天天干天天插| 久久久久久草黄色片AV在线观看| 日本综合久久| 婷婷天天插天天爱| 久草丁香婷婷1024| 99re8这里只有精品99re8热视频| 999九九九久久久99HD| 99热在线中文字幕| 99热最新国内| 九九99久久| 思思干精品| 六月五月婷婷| 丁香五月五婷| 大香久久伊人网| 深爱五月天 开心网| 99精品国产乱码久久久人妻| 欧美综合五月丁香五月天| 久草五月| 五月婷婷在线观看| 丁香婷婷综合激情五月色| 夜夜爽天天干| 国产成人AV在线| 欧美99热| 婷婷色香六月综合激情| av网站免费在线| 亚州视频九九99| 少妇水多A片太爽了| 五月丁香啪啪啪免费看| 亚洲中文字幕在线观看| 色99综合视频| 免费观看2018www黄色操逼网站| 国产,欧美,日韩,性爱| 亚洲成人AV高清字幕| 99在线免费视| 91妻人人爽人人看片| 日日操日日干| 丁香影院五月综合| 超碰色色综合| 热99国产精品| 国产古装妇女野外A片| 六月婷婷天天操夜夜爽视频| 69精品人人人人| 99色一| 狠狠色综合图片| 99国产性感视频| 99色在线观看视频者| 狠色狠色综合久久| 99久精品视频| 超碰v| 久久在线人妻| 亚洲综合视频网| 99久久综合| 精品成人久久久久久久_一二三四视| 色婷婷69| 噼里啪啦完整版中文在线观看| 手机看片日日做夜夜| 国产精品久久欧美久久一区| 五月婷婷伦理| 日韩AV中文字幕在线| 激情综合网五月婷婷| 亚洲成人网站在线播放| 性综合网| WWW,五月| 久久欧洲久久| 亚州色综合| 成人AV在线电影| 色婷丁香五月| 五月丁香趴趴| 婷婷五月天丁香| 婷婷丁香五月噜噜噜| 超碰在线播放免费观看| 狠狠搞狠狠操| 日日操夜夜骑| 综合狠狠五月婷婷| 亚州操操| 91主播在线| 久久9精品| 99爱免费在线观看| 色婷婷色综合激情91| 久久精品五月天| 狠色狠色狠狠色综合网| 性爱五月婷婷| 丰满少妇乱A片无码| 亚洲欧美一区二区三区爱爱动图| 99精品热视频只有精品10| 九九综合九| 五月丁香婷婷综合| 99re8热精品免费视频| 播五月丁香三月婷婷| 九九综合色综合| 成功精品影院| 性生活视频98791| 亚洲婷婷月丁香五月| 色444综合网| 色色色无码| www.亭亭五月天| 丁香婷婷啪啪| 久草视频一,二三四| 亚洲欧美在线观看| 99热在这里只有精品| 国产另类综合| 激情五月婷婷色综合| 九九99热久久精品66中文字幕| 五月婷婷丁香| 五月天天久久香| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 色色色国产| 天天艹天天色| 欧美激情xxxXX| 九热视频在线精品15| 精品香蕉99久久久久网站| 中文字幕av在线播放| 色播婷婷五月天| 久久视频66| 五月天婷婷綜合院| 九九人人自拍| 另类亚洲视频| 丁香九月激情久久| 丁香啪啪中文字幕| 九九色网| 热久久这里只有三级视频| 成人综合网站| 激情五月综合网| 97色婷婷成人综合在线观看| 激情五月丁香五月综合| 2018国产大陆天天弄| 五月 成人 婷婷| 99久久免费精品| 超碰av在线| 91久久国产综合久久| 双性美人被调教到喷水A片| 六月丁香激情网| 超碰国产在线观看| 久久999久久999久久999久久| 插插五月天| 丁香九月婷婷| 99噜噜噜在线播放| 天搞天天天天天| 激情图片婷婷| 丁香婷婷五月综合色情| 思思热天天看| 亚洲激情图文小说| 99精品视频在线| 丁香婷婷人妻| 亚州精品色情在线观看| va中文资源在线观看| 九九精品网站| 99热这里只有精品国产免费| 成人必爱视| 激情开心五月婷婷| AV国产有码| 久久狠狠色| 一个色的综合| 欧美性爱5月天天天看| 激情综合网,婷婷五月天| 思思热在线视频观看精品| 久久亚洲婷婷综合色五月| 99久久婷婷国产综合精品青桔| 大香蕉天堂| 4399在线观看免费高清黄色视频| 色综合久久44| 伊人大香五月天| 99热伊人| 怡红院AV亚洲一区二区三区H| 色婷婷狠狠| 在线观看免费视频| 婷婷五月丁香性爱| 超碰色色综合| 婷婷五月亚洲激情| 欧美丁香五月天| 婷婷丁香五月亚洲| 久久 婷婷 五月天| 大香蕉久| 婷婷五月综合社区在线| 丁香五月777| 久色网址| 岛国av电影网站| 婷婷综合色播网| 五月天激情小说婷婷基地| 一起草性爱不卡视频| 欧美色五月| 久久九九网| 欧洲色色| 丁香六月婷婷开心婷婷网| 色九九七七| 俺也去在线久久精品23欧美综合视频网站,丰满人妻一区二区三区在线视频53,丰满 | 久久丝袜婷婷| 久热大香蕉| 极品少妇高潮啪啪AV无码| 成人精品视频99在线观看免费| 99热传媒| 亚洲精品成人| 婷婷五月丁香六月天亚洲综合| 国产激情婷婷| 五月丁香综合网| 丁香五月狠狠在线观看| www.91AV.COM| 99这里精品| 六月丁AV| 天天插轮理| 亚洲久久婷婷| 色情五月综合婷婷| 五月天婷婷Av| 青青夜夜狠狠夜夜狠狠| 日本五月天激情| 五月婷婷丁香六月| 久久天堂色| 欧亚洲在线高清视频| 亚洲AAA| 婷婷五月情天| 成人精品视频99在线观看免费| 日韩三级视频一区二区| 91操色| 五月婷婷成人| 亚洲欧美在线观看| 亚洲小视频免费播放| 97婷婷五月天| 国产亚洲精品AAAA片APP| 激情丁香五月| 五月婷婷插一插| 婷婷五月丁香综合| 狠狠久综合| 激情五月综合ì香亚洲| 国产成人网址| 久久在线大香蕉| 色婷婷丁香五月丁香| 精品久久9| 色综合色色| 在线观看免费狠狠色丁香香综合| 久久婷婷五月天激情唯美| 五月丁香婷婷啪啪| 亚洲综合成人网站| 99日这里只有精品| 国产午夜精品AV一区二区麻豆| 婷婷五月电影| 激情噜噜噜| 2025超碰| 深爱开心五月天| 欧美日韩91| 日韩有码久久| 五月丁香色六月激情干大屄| 精品爱欲五| 色五月天.con| 97色婷婷| 久久99视频| 三十路磁力链接| 成人做爰A片免费看网站找不到了| 任你操精品免费| 五月婷在线视频免费播放| 久热99| 久婷婷| 狠狠操狠狠插| 操人久久| 色99日韩| 91偷拍视频| 五月婷婷综合网| 日本wwww在线| 女力报到正好爱上你| av一级棒av| 婷婷六月丁香激情综合| 天天干天天做| se99在线| 曰韩五月丁香色婷婷无码| 综合激情网| 丁香六月婷婷| 五月丁花色综合网| 亚洲人成网站999综合| 色色aⅤ網| 国产特级毛片AAAAAAA高清| site:hcxsz888.com| 色久女| 日韩久热| 六月丁香五月天| 99亚洲精品视频在线观看| 丝袜人妻| 婷婷五月天成人娱乐| 色婷婷小说网| 五月丁香少妇网| 蜜桃五月天| 日日噜狠狠色综合久久| www.韩日视频| 色欲午夜无码久久久久久张津瑜 | 激情综合五月激情XXXX| 九月丁香婷婷| 思思热再线视频| BlACKEDRAW视频一区二区| 久久这里只有欧美| 9热在线视频| 九月综合| 五月婷丁香花| 婷婷久久久| 五月丁香色狠狠干大屄| 久久99精品久久久| 这里只有精品1| 亚色网站小视频| 亚洲亚洲人成综合网络| 色婷婷丁香五月在线观看| 日韩三及成人AV片| 久久综合丁香激情五月| 久久婷五月综合色| 99综合成人视频在线观看| 婷婷狠狠18禁久久| 婷婷六月丁香久| 国产精品久久久久久妇女6080| 精品九九视频在线观看| 伊人久久大香线蕉精品| 日韩人妻无码精品| 五月婷六月综合在线观看| 午夜日韩久久久网站| 99九色视频在线观看| 99在线国| www超碰| 人与禽A片啪啪| 99热全是精品| 婷婷丁香五月视频| 激情五月婷婷丁香| 久热无码| 色婷久九| 狠狠五月天激情| 六月婷婷av| 亚洲国产精品VA在线看黑人| 99综合一区| 综合激情综合啪啪| 97热视频| 亚洲无码免费看| 婷婷六月激情小说网| WWW,婷婷,COM| www.天天干| 五月丁香综合久久夜夜| 99re在线观看视频| 91凹凸在线| 搡BBBB搡BBB搡18| 久久婷婷五月丁香网| 内射丰满人妻| 国产激情久久久| 玖玖九九9999在线观看视频精品| 国产精品久久久99视频| 久久99热久久99精品| 丁香五月成人| 日韩 中文 欧美| 色婷婷九月综合| 色中色综合| 无码一级片| 狠狠色丁香婷婷综合久久97AV| 婷婷97碰碰| 97人人干视频| 深爱激情四射| 午夜丁香婷婷| 色热久| 亚洲色情网站| 91男女视频在线观看| 9 1超碰九色| 真实亲子乱子伦高清在线观看| 国产成人网址| 久久五月天激情美女| 99精品综合视频| 婷婷综合性爱网| 婷婷综合另类小说| 99色热| 成人中文字幕在线| 亚洲va在线∨a天堂va欧美va| 色狠狠色噜噜AV天堂五区| 久久女人天堂| 婷婷五月丁香五月| 中文字幕五月久久婷婷| 狠色色狠网| 久久在线视频免费观看| 天天日日人| 久九色| www.henhenl| www.婷婷五月| 99热亚洲综合| 成人丁香婷婷| 丝袜熟女一区二区三区| 色婷婷综合网站| 久久精品99国产精品日本| 伊九九三级区| 爱射综合| 99热超碰在线| 色色色综合网| 人妻射精AV| 99热精品在线播放| 久久色情| 99性色| 久久无码激情视频| 丁香五月AV| 日本99热| 激情六月婷婷| 久久久久久久久久久久久久人妻视频| 丁香六月婷婷综合| 桃色激情婷婷伊人网| 久9热| 五月天激情偷拍| 亚洲在线综合| 99色综合网| 99热网站| 99热精品10| 丁香五月性| 色五月激情网| 伊人色综合网| 日日射天天射| 婷婷五月开心六月AV| www.99成人视频| 三级99热| 亚洲无码另类| 在线区区区| 一本大道熟女人妻中文字幕在线| 丁香六月婷婷综合网| 丁香五月婷婷天激情| 婷婷五月激情在线| 69精品无码一区二区三区| 亚洲另类视频| 人人综合91网| 色色色无码| www久久99com| www,婷婷,com| 伊人五月天在线| 五月婷婷激情久久| 日本狠狠色| 色播五月丁香婷婷| 日本激情综合| 五月丁香婷婷视频| 思思久久99热| 五月婷婷综合激情小说| 青草五月天| 五月婷婷影| 婷婷五月天777| 五月婷婷 激情按摩| 五月婷婷第四色| 免费播放片大片| 99操99| 激情五月丁香在线观看直播| 香蕉色色网| 久久人人九九| 五月丁香婷色| 婷婷欧美激情| 五月婷婷丁香六月| 女力报到正好爱上你| 97干在线观看| 五月婷婷激情综合| 久久99激情丁香婷婷小说网| 九九九日本熟女| EEUSS鲁片一区二区三区| 久色国产| 99精品热| 91免费试看| 久久伊人婷婷| 91大屁股| 国产ava| 97干干干丁香| 久久久ww| 亚洲狠狠操| 久久刺激网| 风流少妇A片一区二区蜜桃| 婷婷五月天伊人网| 激情婷婷色小说| 狠狠色噜噜狠狠亚洲A∨| 中文字幕成人| 天天插插天天| 丁香五月天天| 天堂五月婷婷| 国产成人精品一区二三区熟女在线 | 色情综合网| 婷婷丁香五月,狠狠综合| 中文AV在线播放| 午夜不卡久久精品无码免费| 久婷久婷| 伊人久久五月天| 超碰91在线| 婷婷五月开心六月AV| 五月婷婷在线视频| 色五月中文网| 五月婷婷欲色| 99在线观看视频免费| 国产亚洲成人综合| 一本大道嫩草AV无码专区| AV操操操| 色婷婷丁香五月天激情综合网| 97人人操人人| 五月激情久久| 国产肥白大熟妇BBBB视频| 天堂A∨在线| 99成人精品视频| Av性爱网站| 99在线观看精品视频| xxx日本东京热| 亚洲综合婷婷| 色九九七七| 教师性爱毛片| 亚洲精品久久久久AV无码| 九月婷婷久久久| Www.激情| 婷婷射图五月天| 色之综合网| 97人人超| 久久婷婷丁香| 99久免费视频| 综合在线观看99| 日韩丰满少妇无码内射| 色播五月| 五月香婷婷| 久久综合影院 | 九九综合久久| 激情婷婷久久| 国产综合81p| 亚洲中文字幕在线电影| 激情98色婷婷五| 婷婷六月色| 熟女激情五月天| 99九九在线观看免费| 六月伊人婷婷| 青草久久五月婷伊人| 狠狠色丁香五月婷巨| 欧美久久网| 亚洲成片在线观看| 午夜日日| 99免费偷拍视频| 九九久久玖玖爱| 色综合99无码 | 丁香六月天| 五月丁香人妻| 丁香九月婷婷| 天天干天天做| 欧美性丁香色色五月天干干| 五月婷av| 亚洲激情另类| 99这里有精品视频| 日本人妻伦在线中文字幕| 天天干天天干天天| 国产这里只有精品| 99热大香蕉| 超碰久热| 天天操综合网| 丁香激情网| 精品欧美一区二区三区久久久| 国产精品VIDEOSSEX久久发布| 色情综合网| 中文字幕无码人妻少妇免费视频| 丁香成人五月天| 色99在线| 99久久户外勾搭| 人妻激情久久| 2013AV天堂| 婷婷刺激综合| 51成人| 狠狠艹狠狠艹| 日日色五月天| 天天情色五月天| 99热这里只有精品最新| 26uuu| 99热热这里只精品996小说| 91啪啪网| 久热 91| 国产毛片精品一区二区色欲黄A片| 99人人干| 色婷婷丁香五月| 97caop| 丁香五月婷婷久久久| 欧美操逼天堂| 丁香五月1页| 激情婷婷五月天网址| 欧美va| www.婷婷.com| 天天日,天天干,天天操| 风流少妇A片一区二区蜜桃| 亚洲日韩成人三级av| 丁香五月桃花在线激情综合| 婷婷六月综合基地| 欧美激情综合| 99色在线观看| 久热 91| 开心激情婷婷| 曰本aaaaaa丈片| 五月天婷婷网站888| 伊人五月天日日夜夜久久久天天| 亚洲、热| 噜噜狠狠色综合久| 九九性视频| 香港九九六区八区99| 狠狠色色综合| 久久狠狠色| 无人精品在线视频| 五月婷婷婷| 五月激情四射网站| 欧洲不卡视频| 先锋av性爱成人电影| 色天五月天在线观看视频| 天天做天天爽| 色婷综合| 色综合色综合婷婷热| 丁香婷在线| 婷婷色导航| seav天堂| 91热99| 99久久99热这里只有精品| 久青操| 欧美精品中文字幕亚洲专区| WWW·色色色·COM| 五月丁香六月色婷婷综合五月天| 色停停五月天| 丁香五月影院| 色色五月天com| 狠狠操天天操综合| 国产免费一区二区三区三州老师F1F1.CC| 婷婷五月天影院| 9999热精品| 丁香 婷婷五月| 丁香五月天社区| 日本人妻伦在线中文字幕| 91精品人妻少妇无码影院| 激情五月天之六月婷婷| 日本女人久久| 色九九中文字幕| 久久这里只有国产| 五月天激情小说网| 99色爱| 欧亚洲在线高清视频| 五月色网| 婷婷五月花| 久久99精品久久久久久三级| www,五月丁,com| 日本久久99| 激情啪啪五月天| 欧美性色五月天| 色五月婷婷亚洲| 色综合色色色色| 久久婷婷一级片| 九九黄色网| 另类激情五月| 九九热在线视频观看| 丁香五月婷婷激情97| 99久久婷婷国产综合精品草原| 激情VA视频| 伊人在线视频| 七七九九色色| 狼人久草| 激情五月天的婷婷| 婷婷淫淫狠狠六月| 伊人99久久| 婷婷的五月天另类视频| 91九色视频在线观看| 婷婷综合干| 婷婷狠狠五月综合| 亚洲亚洲人成综合网络| 五月婷婷深深的爱| 九色视频91| 91人人操人人看| 色 色 色综合com| 日韩ww| 婷婷伊人激情婷婷| 婷婷五月天激情小说| 大香蕉婷婷丁香天堂AV| 七七色色综合| 伊人大香蕉在线视频| 久久婷婷综合五月趴| 国产成人AV不卡| 色。 日日日| 亚洲色色色| 五月丁香激情片| 天天狠天天叉| 啪啪色激情五月天| 9久精品| 五月丁香色色| 天天操夜夜操| 69色婷婷| 99热在线观看免费精品| 久久婷婷原创视频| 五月天基地| 大香焦A∨| 五月婷婷欲色| 丁香啪啪中文字幕| 婷婷丁香五月综合激情视频| 春色激情| 九九精品视频在线观看| 91久久久久| 日韩欧美一级大黄网站| 婷婷激情97| 五月成人天| 9久热在线精品| 婷婷成人视频| 婷婷五月天AV在线| 婷婷久久丁香五月| 久久婷婷视频| 天天色视频| Se.婷婷五月天| 99国产精品久久久久久久久久久| 甈吧vv| 综合色七七| 中文无码精品一区二区三区| 日本www免费九九| 久久这里有精品视频| Y11111111111少妇电影院| 五月花激情| 999久久久国产精品| 久久婷婷五月综合色丁香| 五月丁香婷婷色色色| 日本久久精品| WWW.五月天9999| 色色色色丁香| 吉澤明步Av一區二區| 在线伦子99热| 超碰人人艹| 日本激情ⅩXX免费视频| 性生生活大片又黄又| 日韩欧美一级大黄网站| 日韩黄色AV无码| 久久婷婷五月综合伊人| 色色色综合色| 大香蕉九九| 爱婷婷久久视频| 精品夜夜澡人妻无码AV| 色五月婷婷久久| 色婷婷五月综合在线| 99精在线| 婷婷播播五月天| 激情婷婷网| 色婷婷操逼| 日本va网站| 国产91在线视频| 97香蕉久久超级碰碰高清版| 妻久久久久| Y11111111111少妇电影院| 99九九玖玖| 天天上天天爽| 国产综合A片| 中文字幕黄色片| 日日婷婷不卡| 丁香婷婷五月人体| 伊人91| 激情五月五月五月婷婷| 日韩精品99久久| 啪啪婷婷五月天激情| 婷婷深爱五月天在线| AV大片在线观看| 91日韩在线| 综合深爱五月| 色婷婷五月在线| 草草夜夜操| 五月天婷综合| 天天色伊人| 伊人9在线| 99这里只有精品| 亚洲色五月婷婷| 九九人妻福利| 92久操视频| 亚洲操操操| 丁香成人色情五月天| 色婷婷六月天| 欧美,日韩成人在线| 久久多色| 第一区久久网站| 黄色片区子| 99色在线观看视频者| 强伦轩人妻一区二区电影| 色婷婷丁香五月色综合网| 91九色国产在线| 1024成人免费看| 久久香蕉网| 国产成人99久久亚洲综合精品| 亚洲va日| 98永久精品| 婷婷D区| 5月丁香啪啪啪| 综合色色色色色色| 99久在线精品99re8热| 激情性爱婷婷| 超碰碰碰碰| 日本久热| 噜噜精品| 日韩AAA| 桃色Av色哟哟| 超级碰碰碰碰视频| 四季8848精品成人免费网站| 色婷婷影视| 青草五月天| 巴基斯坦粉嫰无码视频| 免费AAAAA网| 大香蕉五月| 香蕉人妻AV久久久久天天| 99综合在线| 丁香五月成人社区| 开心五月丁香婷婷| 女性自慰系列第五页| 黑人无码一区| 色婷婷另类| av高清无码| 婷婷五月电影| 26uuu精品一区二区| 五月激情偷拍婷婷| 密黄站| 色情丁香五月婷婷精品| 激情文学 综合 九月| 亚洲婷婷性爱| 五月婷婷六月丁香| 久操操| 色射影院| 天天色99| 99热思思| va婷婷| 五月天激情久色| 九九热在线观看视频网站| 久久五月天激情美女| av婷婷丁香| 婷婷丁香91综合| 另类少妇人与禽zOZZ0性伦| 五月婷婷啪啪| 久久女人天堂| 九月综合| 婷婷五月综激情| 亚洲激情另类| 亚洲综合99| 这里只有精品视频99| www.五月激情红色| www.婷婷,com| 色五月激情综合| 婷婷成人在线| 欧美猛片| 国产五月婷| 五月天在线视频尤物视频在线看| 五月丁六月香av| 五月婷婷成人网首页| 亚洲婷婷开心五月| 丁香五月天天日| 九九久久99| 久久婷婷五月激情网站| 天天艹夜夜爽| 色五月丁香在线| 婷婷五月天日日日干干干| 呦呦AV| 五月丁香六月婷婷a v| 亚洲激情视频网| 天天射夜夜骑| 丁香五月婷在线| 天天日,天天射,天天舔| 五月丁香龟婷婷| 婷婷五月天电影区小说区| 精品色| 色噜噜狠噜噜视频| 狼友视频在线观看18| 99热爱爱干干日| 日韩操人| 五月天偷拍| 国产成人精品一区二三区熟女在线| 成人 在线观看国产| 91在线操逼视频| 久777| 亚洲AVwwwwwww| 色婷婷AⅤ| 天天摸天天肏| 亚洲成人网无码| 五月丁香啪啪拍| 伊人婷婷五月天av| 99热在线精品观看| 操97免费超级视频| 99操碰| 99热这里| 欧美十二区| 丁香五月婷婷欧美成人色图| 91人人超碰在线| 超碰91av| 狠狠色丁香| 天天干天天干天天干天天干天天干天天 | 丁香色综合| 狠狠艹狠狠艹| www.五月婷婷久久.com| 久久久久久久久人妻| 婷婷五月天影院| 丁香六月啪| 性色做爰片在线观看WW| 91九九九色在| 六月婷婷综合激情| www.五月天婷婷.com| 久久精品爱爱| 五月天狠狠草| 99热资源在线| 亚洲另类在线观看| 久久九九99视频| 成人版视频在线观看| 永久思思热在线| 色色色色色色色色色999| www.色婷婷| 欧美精品18| 黄色激情网站在线观看| 日韩精品一品二区三区的使用体验| 色噜噜五月丁香婷婷| 五月丁香久人妻中文| 深爱丁香激情| 天天搞天天色综合| 激情综合五月婷婷| 久久五月情| 欧美黑人大吊| 天天天摸夜夜夜玩| 综合色99| 五月婷婷影视| 伊人久久五月天| 日韩av干| 丁香五月日韩| 亚洲无AV在线中文字幕| 果冻传媒A片一二三区| 五月丁香六月香香蕉| 婷婷在线午夜| 激情五月综合网最新| 91久久久久久久久久18| 99 re视频一区| 人人天堂操| http://www.sd-xiangsu.com/| 另类小说五月天| 91九色白丝| 婷婷色婷婷亚洲成人| 五月婷婷之美女图片| 五月婷婷中文字幕| 七七色综合| 国庆精品久久| 五月天综合在线观看视频| 91狠狠综合久久久| 美女爆乳18禁www久久久久久| 色色婷婷丁香| 五月丁香六月婷婷国产视频| 狠狠狠狠狠狠狠狠| 久久久久久久五月| 久久精品国产色| 99在线视频精品| 亚洲精品无码A片一区二区| 九九九九综合| 五月丁香淫淫婷婷婷| 天天操天天插| 色欲五月婷婷| 五月婷婷丁香色播网| 99视频在线| 激情视频综合| 欧洲第一久色| 久99热| 丁香色综合| 成年人看Va免费视频| 婷婷五月激情中文字幕| 爆乳熟女一区二区三区爆乳| 91超级碰人人操| 丁香婷婷久久激情| 99re免费精品视频| 青青草网武则天| 九九操综合网| 久草五月| 五月婷婷久久久| 六月婷婷综合| 99爱在线| 激情深爱综合| 337p大胆噜噜噜噜噜91Av| 九 九九九AV| 亚洲99在线| 久久精品99| 久久香蕉影院| 九月婷婷色色| Aα在线免费观看| 99热精品一| 中文字幕丰满孑伦无码专区| 97人妻碰碰中文无码久热丝袜| 五月丁香激情综合网| 香蕉视频性爱BB做爱| 精品九九视频在线观看| 一本色道久久综合狠狠躁小说| 色色色婷婷五月天| 极品人妻VideOssS人妻| 五月天婷婷丁香人人操91| 亚洲mm色| 国产无遮挡又黄又爽免费网站| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | 亚洲中文字幕av| 熟女激情网| 婷婷丁香五月色偷偷| 婷婷免费视频| 万月丁香狠狠爱| 情五月亚洲婷婷| 精品色色| 99热免费网站| 久久久97| AV激情五月| 高清无码入口| 一区色色色色网| 国产无套精品一区二区| 狼人狠狠操| 婷婷五月天影院| 五月丁香操婷逼| 婷婷五月电影院| 九九亚洲综合| 婷婷狠狠色| 91AV视频| 五月色综合| 色婷婷91| 99精品热视频只有精品10| 九九综合色| 久久这里只有精彩| 开心激情综合| 色综久久AV| 亚洲超碰在线| 激情婷婷人妻| 亚洲精品无AMM毛片| 六月丁香婷婷开心综合基地| 51精品国自产在线| 天天狠狠色| www.第四色99| 玖玖热视频| 亚洲精品成人片在线播| 97极品在线| 九色91美女| www.婷婷五月| 五月丁香色婷婷伊人| 极品人妻VIDEOSSS人妻| 亚洲看av的网站| 99se丁香| 色婷婷五月天久久| 亚洲AV第二区国产精品| www.色99| 九九热99re8热免费观看| 开心激情站| 思思99热在线| 91日在线视频| 色色色综合网| 丝袜人妻| 亚洲乱码日产精品BD| 韩国婷婷丁香五月| 亚洲久艹| 亚洲第一成人无码A片| 99热免费网站| 丰满少妇乱A片无码| 丁香五月婷婷激情中文| 99资源在线| 99热这里只有精品3| 色色网站在线免费观看视频| 超碰在线观看三级片| 亚美欧色影院| 91人人网| 色五月大香蕉| 欧美va欧美va差| 久久婷婷东京热| 热久精品| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 天天插天天爽| 97碰超级人人看| 五月欧美色播| 免费超碰在线观看| 五月婷丁香| 五月婷婷无码| 大香蕉AV电影在线| 婷婷五月天久久| 日韩综合网络男女香蕉a片| 精品色色| 噜噜色com| 五月天色色网站| 少妇人妻丰满做爰XXX| 六月丁香婷婷综合在线| 天天爽人人综合免费7799| 国产又爽又猛又粗的视频A片| 四月婷婷丁香| 亚洲天堂久久| 丁香五月天AV在线 | 91丨九色丨丰满人妖| 色五月婷婷少妇人妻| 人人操超碰| 婷婷伊人綜合中文字幕| 欧美天天性| 美欧日韩国产成人在战| 日日日日日| 久久婷婷视频| 久鲁鲁色网| 五月情涩综合婷婷| 狠狠狠狠狠狠| 综合婷婷都市激情| 99热青青草| 婷婷五月综合性爱| 日韩成人综合网| 免费看欧美成人A片无码| 四月婷婷丁香五月| 只有精品视频在线观看| 99热在线网站| 日本狠狠色| 色色色色色网| 日本狠狠爽| 啪啪婷婷五月天激情| 亚洲精品又粗又大又爽A片| 综合伊人久久| 综合六月激情婷婷| 97色碰| 激情五月天第四色| 久久九九99| 色婷婷狠| 久狠日av| 天天上天天爽| 五月婷婷丁香六月| 国产精品激情AV久久久青桔| 丁香五月日韩| 99热亚洲精品66| 丁香五月婷婷少妇| 五月婷婷七月丁香| 超碰九热| 91偷拍视频| 色色色色色色网| 色五月婷婷视频| 丁香九九九九| 九九热99精品| 国产肥白大熟妇BBBB视频| 国产精品久久..4399| 五月丁香六月婷婷不卡免费无码| 91se在线视频| 亚洲综合成人网站| 性欧美大战久久久久久久83| 99热这里只有精品3| 在线综合网| 天天色天天色天天色天天色天天色| 超碰av天堂| www网站在线观看| 国产毛片精品一区二区色欲黄A片| 日本久久99| 狼人狠狠操| 五月丁香六月婷婷综合网站 | 日本精品久久久久中文字幕|