国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

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

CANN ops-math 中的 Neg 算子:aclnnNeg 與 aclnnInplaceNeg 取負(fù)運(yùn)算完全指南

CANN ops-math 中的 Neg 算子:aclnnNeg 與 aclnnInplaceNeg 取負(fù)運(yùn)算完全指南 算子庫人工智能CANN【免費(fèi)下載鏈接】ops-math本項(xiàng)目是CANN提供的數(shù)學(xué)類基礎(chǔ)計(jì)算算子庫實(shí)現(xiàn)網(wǎng)絡(luò)在NPU上加速計(jì)算。項(xiàng)目地址https://gitcode.com/cann/ops-math點(diǎn)擊查看免費(fèi)下載Neg 是 CANN ops-math 數(shù)學(xué)算子庫中實(shí)現(xiàn)逐元素取負(fù)相反數(shù)運(yùn)算的基礎(chǔ)算子通過aclnnNeg/aclnnInplaceNeg兩段式接口對外提供能力是神經(jīng)網(wǎng)絡(luò)中符號翻轉(zhuǎn)、梯度計(jì)算等場景的常用構(gòu)件。本文以 Neg 算子 README 與其配套的 aclnnNegaclnnInplaceNeg 接口文檔 為主體結(jié)合算子 API、Host 側(cè) tiling、Kernel 側(cè)實(shí)現(xiàn)與可運(yùn)行樣例完整講解該算子的規(guī)格、接口、源碼原理與調(diào)用方式。讀完本文你將能夠在 Atlas A2 系列產(chǎn)品上獨(dú)立編譯運(yùn)行 Neg 算子樣例并理解其底層取負(fù) 類型轉(zhuǎn)換 視圖拷貝的完整計(jì)算流水。Neg 算子概述Neg算子對輸入的數(shù)值型數(shù)據(jù)執(zhí)行逐元素取負(fù)操作計(jì)算公式為y -x即對輸入張量x中的每一個(gè)元素計(jì)算其相反數(shù)并寫入輸出張量y。該算子在 neg_def.cpp 中通過算子原型注冊O(shè)P_ADD(Neg)定義其 shape 推導(dǎo)規(guī)則非常簡單——輸出與輸入形狀完全一致見 neg_infershape.cpp 中的InferShapeNeg直接將輸入 shape 拷貝給輸出。算子規(guī)格描述根據(jù) READMENeg 算子的規(guī)格如下項(xiàng)名稱Typedata typeformat算子輸入xtensorint64, int32, int16, int8, uint8, float16, bfloat16, float32ND算子輸出ytensor與輸入相同ND核函數(shù)名--neg-從源碼結(jié)構(gòu)看aclnn_neg接口層實(shí)際支持的 dtype 范圍更寬。在 aclnn_neg.cpp 中定義了兩份 dtype 支持列表dtype_support_listint8/uint8/int16/int32/int64/float16/float32/double/complex64/complex128與dtype_support_list_afterV200在上述基礎(chǔ)上追加 bfloat16。是否啟用后者由GetCurNpuArch()判斷——當(dāng)芯片架構(gòu)為DAV_2201或DAV_3510即昇騰 910B 及后續(xù)架構(gòu)時(shí)bfloat16 才會被放行。算子類型與貢獻(xiàn)信息該算子位于experimental/math/neg目錄屬于實(shí)驗(yàn)性數(shù)學(xué)算子的增量貢獻(xiàn)。按 README 中的貢獻(xiàn)表Neg 算子由個(gè)人開發(fā)者新增并持續(xù)演進(jìn)最初貢獻(xiàn) Neg 算子主體隨后貢獻(xiàn)了 int64/int16/uint8 三種整數(shù)類型的支持。目錄內(nèi)的完整代碼結(jié)構(gòu)如下op_api/aclnn 對外 API 層aclnn_neg.h/.cpp、neg.h/.cppop_host/算子原型、shape 推導(dǎo)與 tilingneg_def.cpp、neg_infershape.cpp、neg_tiling.cppop_kernel/昇騰 AI Core 上的 kernel 實(shí)現(xiàn)neg.cpp、neg.h、neg_tiling_data.h、neg_tiling_key.hexamples/可直接編譯運(yùn)行的調(diào)用樣例test_aclnn_neg.cpp、test_aclnn_inplace_neg.cppdocs/接口詳細(xì)說明 aclnnNegaclnnInplaceNeg.md支持的產(chǎn)品型號與環(huán)境要求按 README 說明本算子樣例支持如下產(chǎn)品型號Atlas A2 訓(xùn)練系列產(chǎn)品Atlas 800I A2 推理產(chǎn)品配套的 接口文檔 亦確認(rèn) Atlas A2 訓(xùn)練系列產(chǎn)品/Atlas A2 推理系列產(chǎn)品均支持本接口。這與源碼中的 AICore 支持列表相互印證neg.cpp中的AICORE_DTYPE_SUPPORT_LIST_AFTER_910B面向DAV_2201、DAV_3510架構(gòu)也就是 910B 之后的昇騰芯片。編譯運(yùn)行此樣例前需要先按 CANN 軟件安裝指南完成開發(fā)運(yùn)行環(huán)境的部署包括 CANN 工具鏈、昇騰驅(qū)動與固件并準(zhǔn)備好編譯工具鏈。環(huán)境就緒后可通過 quick_op_invocation.md 描述的build.sh腳本方式快速編譯運(yùn)行樣例。兩段式接口aclnnNeg 與 aclnnInplaceNegCANN 的算子 API 采用標(biāo)準(zhǔn)的兩段式調(diào)用模型Neg 算子同樣遵循該模型。兩段式接口的通用背景可參考 two_phase_api.md第一段接口負(fù)責(zé)參數(shù)校驗(yàn)、構(gòu)建算子計(jì)算流程并返回所需的 workspace 大小與執(zhí)行器第二段接口才真正把任務(wù)提交到指定 Stream 上執(zhí)行。aclnnNeg與aclnnInplaceNeg實(shí)現(xiàn)完全相同的數(shù)學(xué)功能區(qū)別僅在于輸出的承載方式aclnnNeg需要調(diào)用方新建一個(gè)輸出張量對象out來存儲計(jì)算結(jié)果原輸入保持不變aclnnInplaceNeg無需新建輸出張量直接在輸入張量selfRef的內(nèi)存中就地寫入結(jié)果原地取負(fù)適合需要省內(nèi)存、允許破壞原始數(shù)據(jù)的場景。四個(gè)接口的函數(shù)原型如下聲明見 aclnn_neg.haclnnStatus aclnnNegGetWorkspaceSize(const aclTensor *self, aclTensor *out, uint64_t *workspaceSize, aclOpExecutor **executor); aclnnStatus aclnnNeg(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, const aclrtStream stream); aclnnStatus aclnnInplaceNegGetWorkspaceSize(aclTensor *selfRef, uint64_t *workspaceSize, aclOpExecutor **executor); aclnnStatus aclnnInplaceNeg(void *workspace, uint64_t workspaceSize, aclOpExecutor *executor, aclrtStream stream);aclnnNegGetWorkspaceSize 參數(shù)說明參數(shù)方向說明self計(jì)算輸入Device 側(cè)的aclTensor*支持非連續(xù) Tensor見 non_contiguous_tensor.md數(shù)據(jù)格式支持 ND見 data_format.mdout計(jì)算輸出Device 側(cè)的aclTensor*數(shù)據(jù)類型需是 self 可轉(zhuǎn)換的類型類型轉(zhuǎn)換關(guān)系見 conversion_relationship.md同樣支持非連續(xù) Tensor 與 ND 格式workspaceSize計(jì)算輸出返回需要在 Device 側(cè)申請的 workspace 大小executor計(jì)算輸出返回 op 執(zhí)行器封裝了算子計(jì)算流程返回值aclnnStatus為統(tǒng)一狀態(tài)碼具體定義參見 aclnn_return_code.md。第一段接口會完成入?yún)⑿r?yàn)主要錯(cuò)誤場景161001(ACLNN_ERR_PARAM_NULLPTR): 1. 傳入的 self、out 是空指針。 161002(ACLNN_ERR_PARAM_INVALID): 1. self 和 out 的數(shù)據(jù)類型不在支持的范圍之內(nèi)。 2. self 與 out 的 dtype 不同。 3. self 與 out 的 shape 不同。這些校驗(yàn)邏輯在 aclnn_neg.cpp 的CheckParams中一一對應(yīng)CheckNotNull檢查空指針、CheckDtypeValid檢查 dtype 是否在支持列表內(nèi)、CheckPromoteType校驗(yàn) self 的 dtype 能否轉(zhuǎn)換為 out 的 dtype、CheckShape校驗(yàn)維度不超過 8 且 shape 一致。aclnnNeg 參數(shù)說明參數(shù)方向說明workspace計(jì)算輸入在 Device 側(cè)申請的 workspace 內(nèi)存起始地址workspaceSize計(jì)算輸入在 Device 側(cè)申請的 workspace 大小由第一段接口獲取executor計(jì)算輸入op 執(zhí)行器包含算子計(jì)算流程stream計(jì)算輸入指定執(zhí)行任務(wù)的 acl 流aclnnInplaceNegGetWorkspaceSize 參數(shù)說明參數(shù)方向說明selfRef計(jì)算輸入/計(jì)算輸出Device 側(cè)的aclTensor*既是輸入也是輸出就地計(jì)算支持非連續(xù) TensorND 格式workspaceSize計(jì)算輸出返回需要在 Device 側(cè)申請的 workspace 大小executor計(jì)算輸出返回 op 執(zhí)行器第一段接口的錯(cuò)誤場景161001(ACLNN_ERR_PARAM_NULLPTR): 1. 傳入的 selfRef 是空指針。 161002(ACLNN_ERR_PARAM_INVALID): 1. selfRef 的數(shù)據(jù)類型不在支持的范圍之內(nèi)。 2. selfRef 的維度范圍超過 8。從實(shí)現(xiàn)上看aclnnInplaceNegGetWorkspaceSize并沒有單獨(dú)寫一套流程而是直接復(fù)用普通接口——將selfRef同時(shí)作為 self 和 out 傳入aclnnNegGetWorkspaceSize見 aclnn_neg.cpp因此它天然繼承了所有 dtype、shape 一致性校驗(yàn)只是 out 與 self 指向同一塊內(nèi)存。aclnnInplaceNeg 參數(shù)說明與aclnnNeg完全相同workspaceDevice 側(cè) workspace 內(nèi)存地址、workspaceSize由第一段接口獲取、executorop 執(zhí)行器、stream任務(wù)執(zhí)行的 acl 流。源碼原理取負(fù)的完整計(jì)算流水理解了接口我們再深入源碼看這條計(jì)算流水到底做了什么。aclnnNegGetWorkspaceSize的構(gòu)建邏輯aclnn_neg.cpp清晰展示了 API 的完整計(jì)算路徑空 Tensor 快速返回若self-IsEmpty()為真直接返回 workspace 大小為 0空 Tensor 在 kernel 中天然支持Contiguous調(diào)用l0op::Contiguous把非連續(xù)輸入規(guī)整為連續(xù) Tensor這就是支持非連續(xù) Tensor的實(shí)現(xiàn)基礎(chǔ)Neg 計(jì)算調(diào)用l0op::Neg(selfContiguous, ...)執(zhí)行真正的取負(fù) kernelCast 類型轉(zhuǎn)換調(diào)用l0op::Cast把計(jì)算結(jié)果轉(zhuǎn)換為 out 的數(shù)據(jù)類型支撐out 是 self 可轉(zhuǎn)換類型的能力ViewCopy 落盤調(diào)用l0op::ViewCopy將結(jié)果寫入 out兼容 out 可能是非連續(xù) Tensor 的情況最后通過uniqueExecutor-GetWorkspaceSize()匯總整條流水所需 workspace 大小。第二段接口aclnnNeg/aclnnInplaceNeg的實(shí)現(xiàn)則非常簡潔直接調(diào)用框架的CommonOpExecutorRun完成提交執(zhí)行。AiCore 與 AiCpu 的分發(fā)策略l0op::Neg本身neg.cpp會根據(jù)輸入 dtype 和當(dāng)前芯片架構(gòu)決定走哪條計(jì)算路徑AiCore 路徑當(dāng) dtype 命中AICORE_DTYPE_SUPPORT_LISTfloat/float16/int32/int8/int64/int16/uint8/bf16時(shí)通過ADD_TO_LAUNCHER_LIST_AICORE宏將 Neg 算子加入 AiCore 任務(wù)隊(duì)列AiCpu 路徑其余情況通過ADD_TO_LAUNCHER_LIST_AICPU宏回退到 AiCpu 執(zhí)行保證接口的通用性。Kernel 層的逐類型實(shí)現(xiàn)AiCore 上的 kernel 實(shí)現(xiàn)neg.cpp 與 neg.h對每種 dtype 都做了針對性處理這是取負(fù)看似簡單、實(shí)則有坑的地方float / half直接調(diào)用向量指令Muls(dst, src, -1)完成乘 -1int32 / int16先Duplicate(-1)再用Mul逐元素相乘int8由于向量乘單元不支持直接對 int8 做乘法先Cast到 half 計(jì)算-1倍再通過左移/右移 8 位模擬 int8 的溢出截?cái)嘈袨樽詈筠D(zhuǎn)回 int8uint8與 PyTorch 的torch.neg(uint8)語義對齊——保持 uint8 類型并按 256 取模回繞。實(shí)現(xiàn)上先轉(zhuǎn) half 乘 -1、加 256再與 255 做按位與mask實(shí)現(xiàn)模 256 效果int6464 位取負(fù)最為復(fù)雜采用按位取反 加 1的補(bǔ)碼思路Not逐位取反后通過掩碼實(shí)現(xiàn)對低 32 位 1 的進(jìn)位傳播含低位進(jìn)位向高位傳遞的判斷詳細(xì)流程見 neg.h 中 int64 分支的實(shí)現(xiàn)bfloat16因Muls指令不支持 bfloat16先Cast到 float 乘 -1再Cast回 bf16。Tiling 策略按核心均分 尾部塊處理Host 側(cè)的 neg_tiling.cpp 負(fù)責(zé)把輸入數(shù)據(jù)切分到多個(gè) AI Core 上并行計(jì)算。核心思路是按 32BBLOCK_SIZE對齊切塊每個(gè)核分得大塊big core或小塊small core數(shù)據(jù)余數(shù)作為尾部塊tail block交給前tailBlockNum個(gè)核多算一份并通過SetTilingKey(1/0)區(qū)分是否有尾部塊兩種切分形態(tài)Kernel 側(cè)根據(jù)TILING_KEY_IS選擇對應(yīng)的初始化分支。tiling 還針對不同 dtype 調(diào)整 UB 緩沖區(qū)的劃分份數(shù)ubPartNum默認(rèn) 4 份int8 加 4 份、uint8 加 6 份、bf16 加 2 份這些類型計(jì)算時(shí)需要額外臨時(shí)緩沖如 int8/uint8 的 half 與 int16 中間緩沖區(qū)int64 則固定為 7 份并做 32 元素對齊與最大 repeat 次數(shù)255限制。Kernel 側(cè)使用雙緩沖BUFFER_NUM 2流水線按CopyIn → Compute → CopyOut循環(huán)處理每個(gè)分片尾部片單獨(dú)處理剩余數(shù)據(jù)。約束說明確定性計(jì)算aclnnNeg與aclnnInplaceNeg默認(rèn)即為確定性實(shí)現(xiàn)多次運(yùn)行結(jié)果一致可滿足調(diào)試與復(fù)現(xiàn)需求。確定性計(jì)算相關(guān)的通用約定可參考 determinism_compute.md。輸入輸出數(shù)據(jù)格式限定為NDshape 必須一致輸出 dtype 必須是輸入可轉(zhuǎn)換到的類型。調(diào)用示例aclnnNeg示例代碼位于 examples/test_aclnn_neg.cpp完整編譯與運(yùn)行流程參考 compile_and_run_sample.md。核心代碼如下#include iostream #include vector #include acl/acl.h #include aclnnop/aclnn_neg.h #define CHECK_RET(cond, return_expr) \ do { \ if (!(cond)) { \ return_expr; \ } \ } while (0) #define LOG_PRINT(message, ...) \ do { \ printf(message, ##__VA_ARGS__); \ } while (0) int64_t GetShapeSize(const std::vectorint64_t shape) { int64_t shapeSize 1; for (auto i : shape) { shapeSize * i; } return shapeSize; } int Init(int32_t deviceId, aclrtStream* stream) { // 固定寫法資源初始化 auto ret aclInit(nullptr); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclInit failed. ERROR: %d\n, ret); return ret); ret aclrtSetDevice(deviceId); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclrtSetDevice failed. ERROR: %d\n, ret); return ret); ret aclrtCreateStream(stream); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclrtCreateStream failed. ERROR: %d\n, ret); return ret); return 0; } template typename T int CreateAclTensor(const std::vectorT hostData, const std::vectorint64_t shape, void** deviceAddr, aclDataType dataType, aclTensor** tensor) { auto size GetShapeSize(shape) * sizeof(T); // 調(diào)用aclrtMalloc申請device側(cè)內(nèi)存 auto ret aclrtMalloc(deviceAddr, size, ACL_MEM_MALLOC_HUGE_FIRST); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclrtMalloc failed. ERROR: %d\n, ret); return ret); // 調(diào)用aclrtMemcpy將host側(cè)數(shù)據(jù)拷貝到device側(cè)內(nèi)存上 ret aclrtMemcpy(*deviceAddr, size, hostData.data(), size, ACL_MEMCPY_HOST_TO_DEVICE); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclrtMemcpy failed. ERROR: %d\n, ret); return ret); // 計(jì)算連續(xù)tensor的strides std::vectorint64_t strides(shape.size(), 1); for (int64_t i shape.size() - 2; i 0; i--) { strides[i] shape[i 1] * strides[i 1]; } // 調(diào)用aclCreateTensor接口創(chuàng)建aclTensor *tensor aclCreateTensor(shape.data(), shape.size(), dataType, strides.data(), 0, aclFormat::ACL_FORMAT_ND, shape.data(), shape.size(), *deviceAddr); return 0; } int main() { // 1. 固定寫法device/stream初始化參考acl API手冊 // 根據(jù)自己的實(shí)際device填寫deviceId int32_t deviceId 0; aclrtStream stream; auto ret Init(deviceId, stream); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(Init acl failed. ERROR: %d\n, ret); return ret); // 2. 構(gòu)造輸入與輸出需要根據(jù)API的接口自定義構(gòu)造 std::vectorint64_t selfShape {4, 2}; std::vectorint64_t outShape {4, 2}; void* selfDeviceAddr nullptr; void* outDeviceAddr nullptr; aclTensor* self nullptr; aclTensor* out nullptr; std::vectorfloat selfHostData {0, 1, 2, 3, 4, 5, 6, 7}; std::vectorfloat outHostData {0, 0, 0, 0, 0, 0, 0, 0}; // 創(chuàng)建self aclTensor ret CreateAclTensor(selfHostData, selfShape, selfDeviceAddr, aclDataType::ACL_FLOAT, self); CHECK_RET(ret ACL_SUCCESS, return ret); // 創(chuàng)建out aclTensor ret CreateAclTensor(outHostData, outShape, outDeviceAddr, aclDataType::ACL_FLOAT, out); CHECK_RET(ret ACL_SUCCESS, return ret); // 3. 調(diào)用CANN算子庫API uint64_t workspaceSize 0; aclOpExecutor* executor; // 調(diào)用aclnnNeg第一段接口 ret aclnnNegGetWorkspaceSize(self, out, workspaceSize, executor); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclnnNegGetWorkspaceSize failed. ERROR: %d\n, ret); return ret); // 根據(jù)第一段接口計(jì)算出的workspaceSize申請device內(nèi)存 void* workspaceAddr nullptr; if (workspaceSize 0) { ret aclrtMalloc(workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(allocate workspace failed. ERROR: %d\n, ret); return ret); } // 調(diào)用aclnnNeg第二段接口 ret aclnnNeg(workspaceAddr, workspaceSize, executor, stream); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclnnNeg failed. ERROR: %d\n, ret); return ret); // 4. 固定寫法同步等待任務(wù)執(zhí)行結(jié)束 ret aclrtSynchronizeStream(stream); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclrtSynchronizeStream failed. ERROR: %d\n, ret); return ret); // 5. 獲取輸出的值將device側(cè)內(nèi)存上的結(jié)果拷貝至host側(cè) auto size GetShapeSize(outShape); std::vectorfloat resultData(size, 0); ret aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), outDeviceAddr, size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(copy result from device to host failed. ERROR: %d\n, ret); return ret); for (int64_t i 0; i size; i) { LOG_PRINT(result[%ld] is: %f\n, i, resultData[i]); } // 6. 釋放aclTensor aclDestroyTensor(self); aclDestroyTensor(out); // 7. 釋放device資源 aclrtFree(selfDeviceAddr); aclrtFree(outDeviceAddr); if (workspaceSize 0) { aclrtFree(workspaceAddr); } aclrtDestroyStream(stream); aclrtResetDevice(deviceId); aclFinalize(); return 0; }這段代碼完整覆蓋了 CANN 算子調(diào)用的七個(gè)標(biāo)準(zhǔn)步驟初始化 → 構(gòu)造 aclTensor → 兩段式調(diào)用 → 同步等待 → 取回結(jié)果 → 釋放張量 → 釋放資源。對于 shape 為{4, 2}、輸入為{0,1,2,3,4,5,6,7}的 float32 數(shù)據(jù)期望輸出為{-0,-1,-2,-3,-4,-5,-6,-7}-0即浮點(diǎn)負(fù)零是取負(fù)運(yùn)算的正常結(jié)果。調(diào)用示例aclnnInplaceNeg原地版本examples/test_aclnn_inplace_neg.cpp與普通版本的結(jié)構(gòu)幾乎一致核心差異有兩點(diǎn)不需要創(chuàng)建 out 張量以及結(jié)果直接回寫到 selfRef 的內(nèi)存。核心代碼如下#include iostream #include vector #include acl/acl.h #include aclnnop/aclnn_neg.h #define CHECK_RET(cond, return_expr) \ do { \ if (!(cond)) { \ return_expr; \ } \ } while (0) #define LOG_PRINT(message, ...) \ do { \ printf(message, ##__VA_ARGS__); \ } while (0) int64_t GetShapeSize(const std::vectorint64_t shape) { int64_t shapeSize 1; for (auto i : shape) { shapeSize * i; } return shapeSize; } int Init(int32_t deviceId, aclrtStream* stream) { // 固定寫法資源初始化 auto ret aclInit(nullptr); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclInit failed. ERROR: %d\n, ret); return ret); ret aclrtSetDevice(deviceId); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclrtSetDevice failed. ERROR: %d\n, ret); return ret); ret aclrtCreateStream(stream); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclrtCreateStream failed. ERROR: %d\n, ret); return ret); return 0; } template typename T int CreateAclTensor(const std::vectorT hostData, const std::vectorint64_t shape, void** deviceAddr, aclDataType dataType, aclTensor** tensor) { auto size GetShapeSize(shape) * sizeof(T); // 調(diào)用aclrtMalloc申請device側(cè)內(nèi)存 auto ret aclrtMalloc(deviceAddr, size, ACL_MEM_MALLOC_HUGE_FIRST); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclrtMalloc failed. ERROR: %d\n, ret); return ret); // 調(diào)用aclrtMemcpy將host側(cè)數(shù)據(jù)拷貝到device側(cè)內(nèi)存上 ret aclrtMemcpy(*deviceAddr, size, hostData.data(), size, ACL_MEMCPY_HOST_TO_DEVICE); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclrtMemcpy failed. ERROR: %d\n, ret); return ret); // 計(jì)算連續(xù)tensor的strides std::vectorint64_t strides(shape.size(), 1); for (int64_t i shape.size() - 2; i 0; i--) { strides[i] shape[i 1] * strides[i 1]; } // 調(diào)用aclCreateTensor接口創(chuàng)建aclTensor *tensor aclCreateTensor(shape.data(), shape.size(), dataType, strides.data(), 0, aclFormat::ACL_FORMAT_ND, shape.data(), shape.size(), *deviceAddr); return 0; } int main() { // 1. 固定寫法device/stream初始化參考acl API手冊 int32_t deviceId 0; aclrtStream stream; auto ret Init(deviceId, stream); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(Init acl failed. ERROR: %d\n, ret); return ret); // 2. 構(gòu)造輸入與輸出原地版本只需要selfRef無需新建out std::vectorint64_t selfRefShape {4, 2}; void* selfRefDeviceAddr nullptr; aclTensor* selfRef nullptr; std::vectorfloat selfRefHostData {0, 1, 2, 3, 4, 5, 6, 7}; // 創(chuàng)建selfRef aclTensor ret CreateAclTensor(selfRefHostData, selfRefShape, selfRefDeviceAddr, aclDataType::ACL_FLOAT, selfRef); CHECK_RET(ret ACL_SUCCESS, return ret); // 3. 調(diào)用CANN算子庫API uint64_t workspaceSize 0; aclOpExecutor* executor; // 調(diào)用aclnnInplaceNeg第一段接口 ret aclnnInplaceNegGetWorkspaceSize(selfRef, workspaceSize, executor); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclnnInplaceNegGetWorkspaceSize failed. ERROR: %d\n, ret); return ret); // 根據(jù)第一段接口計(jì)算出的workspaceSize申請device內(nèi)存 void* workspaceAddr nullptr; if (workspaceSize 0) { ret aclrtMalloc(workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(allocate workspace failed. ERROR: %d\n, ret); return ret); } // 調(diào)用aclnnInplaceNeg第二段接口 ret aclnnInplaceNeg(workspaceAddr, workspaceSize, executor, stream); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclnnInplaceNeg failed. ERROR: %d\n, ret); return ret); // 4. 固定寫法同步等待任務(wù)執(zhí)行結(jié)束 ret aclrtSynchronizeStream(stream); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(aclrtSynchronizeStream failed. ERROR: %d\n, ret); return ret); // 5. 獲取輸出的值結(jié)果已寫回selfRef的device內(nèi)存 auto size GetShapeSize(selfRefShape); std::vectorfloat resultData(size, 0); ret aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), selfRefDeviceAddr, size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); CHECK_RET(ret ACL_SUCCESS, LOG_PRINT(copy resultData from device to host failed. ERROR: %d\n, ret); return ret); for (int64_t i 0; i size; i) { LOG_PRINT(resultData[%ld] is: %f\n, i, resultData[i]); } // 6. 釋放aclTensor原地版本只需要釋放selfRef aclDestroyTensor(selfRef); // 7. 釋放device資源 aclrtFree(selfRefDeviceAddr); if (workspaceSize 0) { aclrtFree(workspaceAddr); } aclrtDestroyStream(stream); aclrtResetDevice(deviceId); aclFinalize(); return 0; }對比兩個(gè)示例可以看到原地版本少了out張量的創(chuàng)建、釋放與aclrtFree整體內(nèi)存占用更低。使用原地接口前務(wù)必確認(rèn)原始輸入不再被需要否則會因數(shù)據(jù)被覆蓋而產(chǎn)生錯(cuò)誤。如何選擇與注意事項(xiàng)普通版 vs 原地版的選擇若計(jì)算結(jié)果要寫入獨(dú)立的輸出張量、原始輸入還需要繼續(xù)參與后續(xù)計(jì)算使用aclnnNeg若希望省掉一塊輸出內(nèi)存、且原始數(shù)據(jù)允許被覆蓋例如作為某個(gè)鏈?zhǔn)竭\(yùn)算的中間結(jié)果就地翻轉(zhuǎn)符號使用aclnnInplaceNeg。實(shí)踐要點(diǎn)workspace 的申請必須在第一段接口之后、第二段接口之前且只有當(dāng)workspaceSize 0時(shí)才需要申請否則直接傳空指針即可兩段式調(diào)用之間executor是連接兩者的關(guān)鍵句柄不可提前釋放計(jì)算完成后務(wù)必調(diào)用aclrtSynchronizeStream同步再執(zhí)行 Device 到 Host 的結(jié)果拷貝否則可能讀到未完成計(jì)算的數(shù)據(jù)輸出out的 dtype 與 shape 必須與self保持一致或可轉(zhuǎn)換否則第一段接口會返回161002(ACLNN_ERR_PARAM_INVALID)整數(shù)類型尤其 uint8 取負(fù)遵循模 256 回繞語義與 PyTorch 行為對齊數(shù)值上neg(1) 255這是由 Kernel 層實(shí)現(xiàn)決定的預(yù)期行為而非錯(cuò)誤。小結(jié)Neg 算子雖然語義簡單y -x但其工程實(shí)現(xiàn)完整覆蓋了 CANN 算子開發(fā)的各個(gè)層面算子原型注冊與 shape 推導(dǎo)neg_def.cpp、neg_infershape.cpp、dtype 感知的 tiling 切分neg_tiling.cpp、AiCore/AiCpu 雙路徑分發(fā)neg.cpp、以及針對 int8/uint8/int64/bf16 等類型的精細(xì)向量化 kernelneg.h。通過aclnnNeg與aclnnInplaceNeg兩段式接口開發(fā)者既可以在獨(dú)立輸出上完成取負(fù)也可以原地翻轉(zhuǎn)數(shù)據(jù)配合 examples 中的可直接運(yùn)行樣例即可在 Atlas A2 系列產(chǎn)品上快速驗(yàn)證算子行為為理解 CANN 數(shù)學(xué)算子的標(biāo)準(zhǔn)開發(fā)范式提供了極佳的參照。贊分享算子庫人工智能CANN【免費(fèi)下載鏈接】ops-math本項(xiàng)目是CANN提供的數(shù)學(xué)類基礎(chǔ)計(jì)算算子庫實(shí)現(xiàn)網(wǎng)絡(luò)在NPU上加速計(jì)算。項(xiàng)目地址https://gitcode.com/cann/ops-math點(diǎn)擊查看免費(fèi)下載相關(guān)推薦CANN ops-math 算子 aclnnAcos 與 aclnnInplaceAcos 兩段式接口完全指南CANN ops math 算子 aclnnAcos 與 aclnnInplaceAcos 兩段式接口完全指南 導(dǎo)讀 本文以 CANN 數(shù)學(xué)算子庫 ops ma算子庫人工智能CANNAIMNet2-rxn在有機(jī)合成中的應(yīng)用5個(gè)真實(shí)案例帶你掌握核心技巧AIMNet2 rxn在有機(jī)合成中的應(yīng)用5個(gè)真實(shí)案例帶你掌握核心技巧 AIMNet2 rxn是一款專為廣義有機(jī)反應(yīng)建模設(shè)計(jì)的神經(jīng)網(wǎng)絡(luò)原子間勢函數(shù)能夠以接近ω算子庫人工智能CANNCANN ops-math 算子解析IsNegInf 負(fù)無窮判斷算子的 ACLNN 接口與 AiCore 實(shí)現(xiàn)CANN ops math 算子解析IsNegInf 負(fù)無窮判斷算子的 ACLNN 接口與 AiCore 實(shí)現(xiàn) 導(dǎo)讀 本文聚焦 CANN ops math 倉算子庫人工智能CANN創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
在线观看色视频| 一区麻豆 高清中文字幕| 一道本东京热加勒比一区二区三区| 无码视频一区二区| 欧美黄色片在线播放| 精品久久久久,69国产成人精| 欧洲亚洲人人爽爽视频| 操逼啊啊啊91| 综合色区偷拍| 91久久久久久久久久久| 欧美天天弄| 亚洲精品视频在线| se..亚洲欧美| 91九久| 91性片| 成人丁香五月| 欧美人妻制服| 夜夜肏2021| 九九热国产| 色婷婷基地| 亚洲97网站| 日韩中文字幕视频在线观看| 中文字幕丝袜| 夜夜嗨AV一区天天| 欧美AAAA黄片| 久久成年精品| 国产精品久久久久无码A√| 午夜欧美神马久久久久| 亚洲精品无码久久AV| 密臀AV在线| 日本操逼视频不卡直接放| 亚洲综合在线高清| 日日操免费视频| 青青草日本中文字幕| 岛国福利在线精品播放| 青草伊人久久| 按摩中文字幕| 国模不卡| 男人的天堂视频精品乱在线| 国产精品熟女AV中文字幕在线播放| 国产精品视频91久久| 性色高清在线| 国产情侣自拍在线播放| 四虎精品永久在线观看| 伊色综合天堂色97| 黄色AAAAAAAAAAA大片| 黄色一区三区| 国产精品久久久亚洲一区| 国产黄色视频久久| 亚洲欧美日韩激情不卡| 草久久久| 99热超碰| 亚洲性爱无码乱伦av| 五月天九九日国产精品一区二区三区| 久久婷婷五月天| 国产精品com| 加勒比AV网| 黑人操一区二区| 亚洲欧美97| 99re这里只有精品3| a天堂视频| 91亚洲影视| 中文字幕十五区| 亚洲另类在线观看| 操逼不卡中文字幕| 青青草中文字幕| 男人精品天堂一区| 高树玛利亚无码流出| 亚洲精品无码成人久久久99| 精品一级毛片在线观看| 亚洲在线A| 国产原创精品| 免费A V在线| 亚洲自拍偷拍视频在线| 久热精品在线| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 久久天天摸| 亚洲欧美日韩免费电影| 超碰97中文| 女上位精品在线| 色月天AV导航| 色噜噜综合在线| 欧美性爱一级操| 一级二级三级黑人无码| 色哟哟AⅤ| 一区二区三区不卡视频| 99re98| 五月天久久人妻| 乱码人妻一区二区三区| 日本精品免费一区二区三区四区| 亚洲情色1区| 99久久婷婷国产综合精品草原| av最新免费中文字幕| 人妻另类 专区 欧美 制服| www.人人摸在线视频| 欧美亚州色的图| 国产日韩欧美| 九九九九九九综合| 久久粉色| 91n欧美| 日韩日韩日韩-国产乱码精品一区二区| 熟妇艹鸡八| 国产老熟女| 五月丁香久久| 67914亚洲精品| 超碰在线看| 亚洲精品日韩国产欧美| 日韩一区二区三区四区五区| 中文字幕精品一区二区精| 一区不卡在线观看av| 久久伊人最新网址视频| 四虎国产精品永久在线囯在线| 亚洲色人阁| 欧美伊人电影| 黑人综合网| 亚洲色综合| 91综合色噜噜| 91大神精品长腿在线观看网站| 日韩三级伊人| 日韩在线性爱免费视频| 51一区二区三区| 日本女优在线视频福利| 婷婷大香蕉| 婷婷久草一区二区三区| 啪啪视频mP4| 97国产亚洲中文在线| laoshunv91| 日韩精品大香蕉伊人在线| 蜜桃臀一区二区aV| 超碰在线一区二区| 日韩操p| 少妇xx精品| 欧美一级黄色18片免费看| www国产天美久久久| 日韩精品1区2区中文字幕| www国产天美久久久| 91精品伊人久久久大香线蕉91| 亚洲欧洲综合视频在线| 五十路六十路七十路熟婆| 97资源视频| 午夜理论片在线观看免费| 久久老子无码午夜伦不卡| 亚洲精品视频在线播放| 欧美亚洲国产自久久| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 亚洲熟妇极品| 伦在线97| 91爱啪| 久久久久久亚洲Av无码| 久久五月婷| 国产原创精品| 福利天天都操| 日韩精品中文字幕人妻| 黄色小视频日本txt| 五月激情影院| 不卡一区视频| 免费看美国人人爽,人人操| 欧美亚洲一区二区久久久婷精品大包诱| 成人欧美日超碰| 欧美色97| 欧美日本一区二区a人| 920日本午夜免费| 中文在线久久字幕| 人人操人人肉久久精品| 艹精品| 91 刺激在线| 加勒比日本在线| 欧美色97| 亚洲色 国产 欧美 日韩| 色97| 久热这里| 深田咏美亚洲精品福利社| 欧美在线l亚洲| 熟人人妻少妇精品久久| 一起草日韩| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 96精品一区| 国产精品又黄又猛又粗| 婷婷五月天网| 我想要啊 啊 啊| 成人小说另类在线| 国产精品久久久久久久久久久久久久久久久久| 91天天| 91性高潮久久久久久久久| 很黄很污的免费网站| 天天色综合影视网| 国产视频不卡在线观看| 97超碰人操| 久9re热视频这里只有精品| 25国产精品免费观看| 人妻无码视频一区二区三区久久| 91丨九色丨国产丨人妻在线| 精品人妻视频一区二区三区蜜桃视频| 婷婷干黄色| 中文字幕在线观看AV| 亚洲色图欧美| 婷婷久草一区二区三区| 国产精品久久久久久久久久久久久久吹| 91精品无码人妻系列| 好屌色综合| 欧美大香蕉同搞| 久久999久| 97人人夜夜精品视频| 激情图片亚洲色图| 黄片qw| 日韩国产十八禁| 伊人影院日本| 亚洲综合888| 日本熟女不卡视频| 97er欧美性| 欧美一级国产一级| 亚洲另类色综合网站| 国产超碰| 91美女在线观看| 天天干一区二区| 无码国产精品96久久久久孕妇| 麻豆久久视频在线地址| 国内毛片热久久思思热| 一区,二区,三区视频| 国产Aα| 淫纸中9区| 91狠狠综合久久久| 中文字幕丰满人妻日本| 精品一二三区女同| 五月天婷婷色色| 欧美1727免费观看视频| 99亚洲精品| 在线亚洲精品久久久| 亚洲αv一区二区三区| 骚日日av| 久久国产精品91| 国内毛片无遮挡国产| 97久久国产亚洲精品超碰热| 天天爽天天干| 日韩av免费一级电影| Julia Annxxxxx| 国产激情综合五月久久| 欧美性爱精品七区| 欧美日韩天堂| 很很干很很操| 成年人性爱日韩| 国产精品剧情| 亚洲人码13| 日本大片日本一区二区免费高清| 欧美一区二区三区互相| 四虎精品亚洲| 欧美青青视频| 亚洲男人天堂2019| 尤物一级在线免费观看| 国产又猛又粗又爽又黄| 春色综合网| 日日噜噜夜夜久久亚洲一区二区| 日日日日日| 中文字幕一区二区三区四区在线视频| 中文三一区| 欧洲亚洲人妻无码中字久久三区四区| 天堂中文日本在线观看| 日韩欧美加勒比| 91精品久久久久五月天精品| 97国产|免费| 欧美操逼视频二区| 精品久久一区二区三区四区五区| www.久久最新地址| 夜夜操美女| 三四中文字幕| 丁香六月东京热| 亚洲AV乱码专区国产噜噜亚洲 | www.高清无码诱惑一区.com | 好爽免费视频,| 国产精品探花在线| www国产无码| 久久大线蕉一区| 蜜乳AV一区| 精品超碰色| 2010男人的天堂| 久久精品国内Av熟女高清| 曰韩少妇无码| 人妻丝袜无 码视频专区| 最新亚洲黄色免费电影| 亚洲高清在线se| 淫淫总合网| 尤物网址| 国产97在线视频| 中文字幕-区二区三区四区视频中国 | 97碰| 97在线播放 | www.人人cao| 欧美一区二区三区不卡高清视频| 麻豆精品三区视频| 蜜桃视频精品一区二区| 日韩欧美中文| 东京热一区二区中文字幕| 无码操逼天堂| 亚洲欧洲视频小说在线观看| 日韩探花精品在线视频| 91精品人妻偷情| 欧美 日韩第一性色| 天操天操夜操夜月操月年年操| 欧美人与性动交a美精品| 久久精品无码专区| 夜夜免费视频| 国产精品密臀网在线观看| 亚洲免费看片| 丰满人妻无码一区二区三区| 欧美第一页| 99久在线精品99re8| 伊人久久大香线综合无码| 九九伊人网| www黄片免费看com| 国产99精品一区二区三区免费| 男人天堂2019| 草B在线| 91爱看| 日本天天人人狠狠在线日美女 | 亚洲国产精品成人综合| 不卡在线观看视频| 婷婷人妻激情| 精品女同一区| 欧洲亚洲天堂精品| 强奸乱伦av电影| 亚洲中文字幕熟女| 97超碰人妻| chaopen97久久| 成人熟女区| 精精夜夜| 久久综合中文国产| 女人天堂AV五区在线| 亚洲日本韩国在线| 精品久久人妻成人网| 国产女人高潮嗷嗷嗷叫小说| AAAA级日本片免费视频| 久久精品熟妇丰满人妻99| 亚洲区小说| 亚欧美色图| 久久精品99久久久久久| 久久久久ab| 成年男人的天堂| 97日本超碰综合| 92福利社视频| 青青11操操操操操操操操| 五月丁香狠狠爱| 久久精品99| 不卡免费av在线播放| 风流老熟女一区二区三区l| 国产欧美成人第一页在线观看 | 无码人妻精品一区二区中文| 欧美日韩亚洲一区二区在线观看| 成人麻豆av电影网站| 国产精品人人爽人人做可爱福利| 亚洲成人在线高清| 人妻献身系列第54部| 天天躁日日躁成人字幕aⅴ| 内射小黄片| 嫩呦国产一区二区三区AV| 人人摸.人人色| q2午夜理论片夜色av| 久久久久幕乱码| 99最新日韩偷拍视频| 日本五区不卡| 久久久九九九| 淫荡熟女乱伦网| 美女写真| 99色综合| a男人的天堂| 亚洲视频,小说| 欧洲大香蕉| 欧美激情 亚洲色图| 男人综合网| 水多多映视AV| 十八禁av无码免费网站APP| 成人性爱视频在线看| 影音先锋中文字幕日本好一区二区 | 免费簧片在线观看| 婷婷五月天丁香| 91在线美女| 国产25页| 国产国产亚洲一二三久久| 日韩欧美传媒一区国产| 性爱综合一区二区| 亚洲超碰AV| 思思热在线观看| 亚洲欧洲小说图片视频 | 成人小说另类在线| 日韩精品黄片免费观看| 久久黄黄| 久久精品国产精品| 日骚逼视频| 九九精品无码专区免费| 天美传媒AV在线播放| 翔田千里无码中出中文字幕| 亚洲欧美日韩综合在线尤物 | 97在线资源| 中日韓欧美高清| 日韩中文字幕人妻视频| 99热这里只有精品8| 精品国产91久久久久久一区黄无| 日夜尻逼网| 欧美一区二区男人天堂| 全免费a敌肛交毛片免费| 欧美一级三级| 天天大干大香蕉| 日本久久女同性恋视频| 欧美特大黄一级片片免费| 国产夜夜艹| 啊啊啊啊啊舒服| 亚洲无码精品AV久久久| 色色色欧美| 1204av韩国| 亚州性9| 亚洲av无线观看| 亚洲熟妇丝袜在线观看| 免费视频观看60秒| 乱伦图av| 性欧美体内射精| 青女偷拍网| 在线国产福利网址导航| 欧美日韩国产中文精品字幕自在自线, | 国产精品久久久亚洲第一牛牛_在线观看| 91久久免费视频互動交流 | 欧美性天天影视| 男人的天堂久久狠| 日本性交操一区二区不卡系列| 久久九色| 婷婷视频网| 素颜老阿姨乱情色| 国产精品久久妻无码网站| 色播五月丁香| 欧美96交| 免费精品福利在线观看| 国产丸一视频| 久久久久亚洲av综合波多野制衣| 偷拍欧美激情| 国产精品久久| 超碰97精品在线| 中文字幕一区二区三区人妻不卡| 婷婷丁香五月天亚洲天堂网| 色偷偷色偷偷欧美日韩| 一级成人性爱| 欧美 亚洲 大香| 九九碰九九爱97超碰| 26uuu国产| 夜夜黄| 欧美亚洲日本激情在线| 亚洲色图 图片| 日本乱人伦片中文三区| 色91综合网| 97欧美超碰| 天天摸天天插天天日| 欧美性91| 污啪啪啪视频| 校园春色五月天| 婷婷在线播放| 欧美78P| 五月婷婷丁香| 国产剧情在线| 久久婷婷国产一区二区色| 色色九区| 东京太热久久久| 久久精品国产Aⅴ| 丰满少妇一区二区三区专区| 欧美亚洲中文| 夜夜操av亚洲一区二区| av一区二区三区四区| 亚洲欧美国产中文字幕| 久草视频在线视频在线视频在线观看| 男人的亚洲天堂| 99性爱在线观看| 日韩无码专区| 欧美日韩精品久久久久久久久东北老熟妇| 啊…啊…操我用力操我| 亚洲欧美综合| 国产精品密臀网在线观看| 性久久| 亚洲脚交| 超碰79人人乐| 超碰免费人妻人人| 天天拍天| 国语人妻精彩刺激| 懂色中文一区二区三区| 天天干1区2区在线| 99亚洲天堂| 天美91| 亚洲大色堂| 香蕉人人操tv| 日日骚中文字幕| 欧美大香蕉97| 操比国产| 九九九久久久| 国产女人9999| 色色五月天婷婷| 男人的天堂 在线一区| 影音先锋一区二区在线资源| 九九无码视频| 婷婷操视频| 少妇丝袜在线观看AV| 亚洲中文字幕网| aaa亚无码专区| 色网1| 99在线精品视频| 欧美性爱日韩高清| 91男人综合| 日韩紧密久久| 日本 欧美 国产一区| 操一操摸一摸| 亚洲久久东京热一二三四五区视频| 成人 日韩欧美一区| ji熟女.com| 美国美女AV在线| 隔壁邻居波多野结衣中文字幕| 色网亚洲人| 国产一区麻豆免费观看| 啊v视频在线观看| 日本一区二区三区免费观看| 少妇的嫩逼图片| 青青操在线亚洲视频观看欧美在线| 日韩少妇一区二区三区| 无码一区免费在线不卡| 国产三级中文字幕粉嫩 | 91在线免费精品视频| 色婷婷一区二区三区久久午夜| 国模限制级电影| 天天做日日爱夜夜爽| 精品久久久av无码免费| 超碰人人干天天射| 亚洲欧美日韩电影网站一区| 96AV久久久| 亚洲超碰在线| 国产亲戚伦亲在线| 大香蕉免费3| 色色九区| 久久久成人免费av电影| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 精品精品精品| 国产男女无套视频免费观看| 密乳AV免费观看| 欧美性爽xyxOOOO| 日韩本不卡视频在线观看| julia中文字幕在线观看| 国产精品肉丝自拍| 超踫中文字幕| 97色在线| 伊人99热| 国产日比| 婷婷久热| 亚洲熟女中文字幕在线| 欧亚乱色熟女一区二区| 伊人久久大香线蕉无码| 亚洲性爱免费电影| 91精品微拍福利| yiqicaoav| 97精| 亚洲爽图| 97超碰色| 26UUU欧美日本| 九九九久久久| 黄色无码高清黄色无码网站| 欧美一级A一级a爱片久久| 老熟女综合网| 欧美热图99| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 夜夜爽爽爽| 五月激情小说| 爽爽歪在线视频| 女优视频第10页| 亚洲综合网电影91| 五月天丁香欧洲日韩| 玖玖视频在线资源一区二区三区| 狠狠干狠狠干| 亚洲色天堂日韩中| 欧美日韩国产中文精品字幕自在自线, | 超碰成人公开| 日本视频一区二区三区| 一级啊性爱在线视频| 亚洲美女自拍偷拍视频| 无码自拍SM| 伊人91| 熟女人妻av在线资源,黄色的资源| 男人天堂一区二区| 95精品在线| 操香逼| 狠色婷婷久久一区二区三区_| 久久精品夜色国产亚洲AV| 天天躁狠狠躁av| 久久r精品| 亚州性色| 国产精品黑人一区二区三区| 国产一区在线观看无码AV| 欧美亚洲另类在线蜜桃| 久久久九九网站| 素人播放一区| 91美女视频在线| 亚洲日韩XXX| 亚洲欧美校园| 美女被啪到深处抽搐视频| 人妻二区| 亚卅熟女乱色| 久草精品热视| 色www精品视频在线观看| 亚洲在线观看| 搡老女人老熟女91| 少妇xx精品| www.久久久久| 91欧美长吊| 麻豆区久久久久亚| 秋霞色色影院| 中文字幕aⅴ在线视频| 日韩啪啪啪啪啪| 婷婷色香| 国产97av| 国产色综合亚洲色综合吹潮| 日韩午夜啪啪视频| 熟妇亚洲一区二区三区| 日韩特一级久久| 日少妇视频| 中文字幕一区二区在线日韩精品| 99热这里只有精品99| 黄网站黄视频网站进入口| 限制级中的三级片中的黑粗大屌屌日人妻熟女 | 日韩探花精品在线视频| 亚洲 欧美 中文 日韩超碰| 久久婷婷欧美| 欧美亚洲综合高清在线| 国产区性爱在线视频秋霞豆| 大鸡吧尹人在线| 久久精品91| 成人免费性爱视视| 婬女免费一二三区A片| 亚洲蜜臀懂色| 奶水 人妻 哺乳 在线| 日韩性爱1级片视频| 99精品网| 天天操熟妇| 超碰在线人妻中文字幕| 激情综合五月婷婷| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 在线观看AV片| 好爽,再快点啊哈嗯嗯嗯嗯| 怡红院网站在线视频| 日韩操p| 亚洲激情综合| 超碰97人人乐| 思思热久久成人| 夜夜操91744565| 亚洲资源一区| 日韩精品在线观看网站| 日本大香蕉| 天天澡天天爽日日AV| 高清无码国产亚洲| 97se综合| 人人操人人插人人摸人人干| 超碰午夜在线| 少妇被c 黄 免费观看| 综合激情婷婷| 无码人妻丰满熟妇区毛片| 欧美亚洲一级在线观看| 操死我干死我| 国产h小视频在线观看免费| 9l视频自拍9l九色成人| 久久久精品视频欧州站| 日韩乱中文| 日欧毛片久久| 久思思热视频在线观看| 中文字幕丝袜人妻| av网站免费看| 97超级久久强资源| 女生91网站| 丁香激情网| 精品丰满熟妇人妻一区| 婷婷亚洲五月***久久| 久久 久久国内精品亚洲| 亚洲第一精品在线视频| 性爱AV天堂| 操逼天美3区| 91国产美女丝袜足交精品视频| 白丝被操91| 青青草视频久久久久| 内射夫妻三片| 天天舔九色婷婷| se吧提供国产乱老熟视频胖女人| 大香蕉十区| 被男人吃奶很爽的毛片| 黄色高清久久无码依人| 吖在线不卡一区二区国产剧情| 五月婷婷hd| 樱花蜜乳av| 激情四射五月天| 国产综合网站在线播放 | 欧美黑人与女人91~| 亚洲国产成人7777| 麻豆黄四叶草网站| 日本一区视频在线观看| 色色色色色色色色综合| 一级久久久久久久久久久| 久久久九九| 久草视频分类在线| 亚洲影视综合| 国产大片精久久久久久| 蜜乳AV.COM| 超碰日韩美妻| 91精品久久久久久综合五月天| 久久啊啊| 国产农村妇女精品1区二区| 国产AV色黄看到爽| 综合天天。| 五月丁香啪啪| 成人26uuu| 99国内熟女露脸视频| 亚洲AV永久无码一区仙野| 懂色Av一区二区三区| 天天操天天射青青草| 久久亚洲欧美中文字幕国语| 91日日夜夜| 五月丁香啪| 麻豆综合一区av| 超碰无码五月97| 天天爽天天| 亚洲AV成人精品网站在AV| 无码男人天堂| 思思99热| 中文字幕久热视频在线| AV天堂因数| 91亚州欧美| 亚洲国产欧美中文永久| 中国熟女老妇仑乱一区二区三区| 大屁股国产在线视频| 天天日天天爽| 日韩精品碰碰| 青青久久艹| 91国产美女丝袜足交精品视频| 国产精品午夜高潮呻吟久久av| 精品人妻一区二区三区日产乱码| 激情小说亚洲图片| 97久久精品亚洲| 国产人伦a片信息免费片| 精品天堂| 国产精品一区二区后入| 国产黄a三级三级三级av在线看| 蜜乳av一区二区| sewuyueav| 天综合网欧美| 人妻精品综合中文字幕在线| 在线v中文字幕一区二区三区| 精品高潮| 蜜臀网址在线| 欧美91精彩| 又黑又大又粗| 久久久久久AⅤ无码免费肉站| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 97视频免费在线观看| 污电影在线观看| 中文乱码99| 日韩精品 资源| 午夜影美女日鸡鸡天天视频国产| 国产福利一区二| 国产精品日日摸天天碰| 美日韩一二三区| 人妻在线臀日韩| 97色婷婷| 亚洲免费人妻在| 国产精品嫩草久久久久| 26uuu最新| 人人操人人肉久久精品| 天美传媒精品一区二区三区| 欧美韩国你懂得在线 | 特污精品女优骚货黄色视频在线免费观看| 东京热不卡视频| 一区二区三区四区姦女| 国产女人高潮视频| 久久婷婷五月综合| 久草福利在线资源站| 日日日日做夜夜夜夜无码| 国产又黄又爽| 亚洲丝袜诱惑| 久久久91| 色色97爱| 97ai亚洲| 色老大| 久久久久久中文| 91女优在线观看| 日韩精品三级片长长久久| 99热精品国产| 欧美狠狠操| 日韩欧美成人大香蕉| 九九热免费国产视频婷婷伊人| 色综合五月天| 婷婷五月天色| 婷婷综合| 超碰av人人人| 吻戏激情性巴克| 亚洲高潮少妇| 欧日韩不卡视.频| 精品丰满人妻一区二区三区免费观| 五月天综合| 丁香六月婷婷| 日日狠狠久久偷偷色综合免费| 成人综合久久精品色婷婷| 亚洲免费人妻在| 日本在线播放不卡一区| 黄色一级视| 精品人妻美妇91job| 日本3级一区二区免费| 3p国产欧美99热| 国模精品娜娜一二三区| 97久久超碰| 99色综合| 91久青| 久久超碰、| 男人的天堂VA在线| 亚洲性少妇| julia ann久久| 精品国产乱码久久久影院| 欧美色图另类图片| 国产剧情在线| 国产福利一区二| 久艾草在线精品视频在线观看| 国产又黄又爽又刺激久久久久久| 人人操人人摸人人看人人干| 国产精品爽爽va在线观看98| 婷婷91| 小草精彩毛片| 亚洲视频小说| 欧美日韩亚洲国产中文永久天天看| 亚洲色图欧美色图综合| 欧美91变态| Sekablack无码一区| 国产AV毛片| 色欧洲| 一级AV性爱| 日韩一级特黄av毛片| 国产日本久久免费精品| 骚逼高潮久久精品| 青青草精品| 大香蕉在线SuP| 大香蕉淫人| 100啪啪视频大全| 国产aⅴ无码片毛片一级网站| 久操不卡视频| 中文字暮97| 中文字幕视频免费| 日本在线伊人啪啪| 激情小说图片亚洲首页| 国产真实野战在线视频| 玖玖视频在线资源一区二区三区| 91成人在线| 夜夜骑日日| 国产精品人妻免费精品| 黄色小视频日本txt| 久久日韩毛| 国产亚洲日本| juliaann欧美丝袜办公室| 成人一道本免费视频| 国产女性无套 免费观看| 岛国小电影| 嗯~啊~轻一点 视频| 日韩性爱一级片| 精品一区二区亚洲国产| 有码人妻系列| 国产蜜臀精品一区二区尤物| 91啦人妻| 五月激情天| 亚洲色图 综合| 亚洲色图欧美色图另类图片| 久久久久久久国产视频| 97天天搞在线| 亚洲自拍小说| 欧美亚洲第一页| 亚州伊人色综台| 97操综合| 久久伊人亚洲AV无码网站| 五月婷婷色| 国产精品不卡一区二区三区| 亚洲欧美日韩偷拍色图| 婷婷深爱五月| 91国产美女丝袜足交精品视频 | 亚洲无线码一区国产欧美国| 美女97超碰| 69一区二区三区 | 三级片大波波| 久夜操| 午夜寂寞欧美| 免费网站观看www在线观| 99热在线播放| 日韩av乱伦| 成人久久久精品| 欧美成熟性爱精品| 久久女人一区二区三区| 97超碰国产亚洲精品| 精品人妻中文字幕4399| 久久久久性熟视频| 最新制服中文第一页| 精品国产久热在线观看| 欧美激情久| 午夜人人操| 中文一区二区婷婷视频| 日逼97| 亚洲欧美经典一区二区| 成人久久久精品| 搡老女人老妇女AAA一VU麻豆 | 亚洲色欧| 欧美强奸一区二区诱惑| 久久熟女久| 午夜视频好爽啊| 亚洲男人的天堂AV| 国产精品久久久久久久无码AV| 亚洲麻豆精品二区三区| 丰满丝袜少妇AV| 亚洲另类春色| 久久五月综合| 久日91在线| 天天做天天爱| 国产丝袜视频| 91久久婷婷| 99只有精品| 久草资源在线| 丁香五月影院| 欧美色图第一页| 亚洲精品男人的天堂| 精品一级| 天美AV片| 国产精品久久久吖| 老女人日韩美91| 一二三区操逼国产91| 熟女在线视频| 国产精品分类在线观看| 欧美熟女妇同| 国产精品亚洲无码| 色综合20p| 亚欧高清在线| 天堂亚洲精品| 欧美日韩成人| 日韩亚洲欧美中文字幕| 精品一区96| 中国操逼无码| 天天看高清麻豆| 逼逼逼逼操操操操操操操操操午夜剧场| 97精品久久久久中文字幕| 操逼逼福利视频| 亚洲午夜蜜臀| 婷婷五月花| 亚州熟女乱伦| 美女诱惑在线一区| 日va操| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 又黑又大又粗| 免费国产电影一区二区| 青青伊人久久| 欧美性爱伊人| 后入国产| 亚洲综合小视频小说在线观看| 岛国黄| 精品无人区麻豆乱码1区2区图片| 69人妻精品一区二区绯色| 亚洲啪啪综合?v一区综合精品区| 96免费视频在线| av天堂手机版追回| 久久一区二区三区四区五区| 午夜福利在线视频1000| 亚洲精品成人激情在线| 99re9| 九九九九欧美| www.色五月| 久久久久久久久久va| 美国三级日本三级久久99| 久久综合九九| 亚洲无线码欧洲精品区别| 天天干1区2区在线| 熟妇熟女视频一区二区三区| 蜜乳AV.COM| 国产精品日日摸天天碰| 日韩久久超碰色| 久久99午夜精品一区人妻| 96麻豆精品一区二区三区| 久草婷婷| 丁香五月激情综合| 国产高清精品一区二区三区毛片 | 人人妻天天做天天爽| 日韩人妻精品久久久久| 国产操伦| 亚洲美女精品九九视频| 一区,二区,三区视频| 婷婷五月天伊人| 日韩av不卡在线看| 欧美激情区| 偷拍色图| 99国产精品人妻人伦| 欧美一区二区观看在线| 精品午夜福利导航| 国产97综合| 一及黄久一点| 婷婷五月色| 手机在线播放国产福利| 亚洲激情视频| 精品9999| 欧美日韩少妇色情| 亚洲人成网www| 亚洲欧美日韩精品久| 强奸乱伦 亚洲一区| 97久久超碰日韩精品| 精品亚州18| 91AV老熟女视频| 99视频自拍| 强奸乱伦Av网| av一区二区三区不卡| 国产成人五月天丁香花| 天天操天天7| 97在线欧洲| 混色激情av| 亚卅熟女乱色| 国产成年免费大片黄在线观看| 最新日本中文字幕| 人妻第一页| 国产自偷| 99re6国产精品99re| 国产精品色哟哟| 精品久久在线区一区| 色色色色综合网| 欧美强奸乱| 精品中文字幕一区二区| 国产资源中文字幕在线| 性色A∨91| 国产又粗又长又大的视频| 蜜桃臀一区二区aV| 青青伊人久久| 色九九九九| 天天亚洲综合| 超碰爽人妻熟女Av| 日本91白丝| wwwss在线观看| 天天色播| 欧美很很操视频| 玖玖爱免费观看视频| 超碰人妻天天干| 国产av波波国产精品| 久久性爱精品一区| 久久久久久99AV无码免费网站| 97视频免费在线观看| 香蕉视频欧美一卡二卡| 久这精品中文在线观看视频| 91bbbbbb| 九九热国产| 另类欧美色| 天啪| 国产精品福利视频| 狠狠91| 张柏芝国产一区在线观看| 亚洲国产综合图区中文字幕| 精品在线蜜臀| 蜜桃狠狠色伊人亚洲综合网站| 91天天综合网| 大香蕉一级黄色片久久| 国产一区二区二区按摩精品啪视频| 清纯唯美亚洲综合| 精品国产Av无码久久久伦古装| 秋霞怕怕片| 日本黄大片在线观看视频| 一本色道久久天天射天天干| 亚洲成人性爱网站在线播放| 精品久久久高清无码| 人人操,操人人| 日本一级性爱| 亚洲九九夜夜| 嗯嗯嗯好爽| 天天干天天日天天射黄色大片| 熟女天天干| 中文字幕第23区| 亚州五月| 999精品乱码| 亚洲 欧美 日韩 国产一区二区 | 26uuu欧美| 欧美日韩国产中文精品字幕自在自线,| 国产九九久久久精品| 国产高清不卡视频| 久久九操在线观看| 97色欧洲| 嗯嗯啊啊视频在线看 | 美女主播色欲91抠b在线播放| 国产视频小说| 中韩中文字幕在线观看| 丰满人妻一区二区三区色-百度| 国产二区三区免费视频| 377p欧洲日本亚洲大胆| 欧美一区二区亚洲天堂| 91N欧美| 91五月天| 91日韩网站| 绯色一区二区三区不卡少妇 | 色香蕉影院| av婷婷色网| 日本黄页视频在线观看| 99久草| 樱花蜜乳av| 午夜天堂啪啪| 厕所偷拍在线| 精品一区二区三区蜜桃臀www| 夜夜久久久| 成人av在线播放| 亚洲AV永久无码一区仙野| 国产精品久久发布| 无码人妻系列少妇| 大香蕉综合网| 欧美黄片免费在线观看视频| 亚洲久热| 91高跟美女在线播放| 韩日欧亚a级| 翔田千里Av在线| 婷婷亚洲天堂| 国产熟女| 日本不卡在线二区三区| 18禁免费视频| 黑操B| 亚洲 无码 有码 中文字幕| 黑人娇小av在线播放| 亚洲国产麻豆一区二区三区| 久久熟女人| 超碰欧美97资源| 亚洲精品一二牛牛| 一块操欧美性爱| 青久操| 夫妻天天操岛国视频| 亚欧无码在线| 欧美欲色| 欧美性爱一区二区三区| 性影在线视频| 天堂九九九九九九九九九| 超碰一区二区| 蜜臀一区二区三区在线| 岛国精品视频在线观看| 绑缚麻绳人妻寝取完整版| 欧美97色| 欧美综合区| 一区二区国产视频在线观看| 欧美高清第一页| 岛国成人av在线播放网址| 嗯嗯啊啊视频一区二区三区| 无码78| 99re国产中文字幕| 午夜后入| 91啦人妻| 欧美毛片在线网| 青青草原香蕉日本Ap| 国产一级不卡在线观看| 欧美亚洲丝袜美女电影| 搡老女人老熟女91老熟女综合网| 精品v日韩欧美国产| 96免费视频在线| 日韩综合无码一区久久92| 激情综合五月| 热热色综合网| 亚洲成人免费中文字幕| 亚洲精品xxx| 欧美成年人性爱视频免费观看| 国产高潮AA片免费看| AV中文字幕剧情1区2区3| 亚洲一区中文精品| 日本在线不卡123| 久久在肏| 亚洲色啪| 国产精品一区二区麻豆| 91足交| AV中文字幕剧情1区2区3|