色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

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

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

CANN ops-math 中的 Neg 算子:aclnnNeg 與 aclnnInplaceNeg 取負(fù)運(yùn)算完全指南 算子庫(kù)人工智能CANN【免費(fèi)下載鏈接】ops-math本項(xiàng)目是CANN提供的數(shù)學(xué)類基礎(chǔ)計(jì)算算子庫(kù)實(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é)算子庫(kù)中實(shí)現(xiàn)逐元素取負(fù)相反數(shù)運(yùn)算的基礎(chǔ)算子通過(guò)aclnnNeg/aclnnInplaceNeg兩段式接口對(duì)外提供能力是神經(jīng)網(wǎng)絡(luò)中符號(hào)翻轉(zhuǎn)、梯度計(jì)算等場(chǎng)景的常用構(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算子對(duì)輸入的數(shù)值型數(shù)據(jù)執(zhí)行逐元素取負(fù)操作計(jì)算公式為y -x即對(duì)輸入張量x中的每一個(gè)元素計(jì)算其相反數(shù)并寫入輸出張量y。該算子在 neg_def.cpp 中通過(guò)算子原型注冊(cè)O(shè)P_ADD(Neg)定義其 shape 推導(dǎo)規(guī)則非常簡(jiǎn)單——輸出與輸入形狀完全一致見(jiàn) 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 才會(huì)被放行。算子類型與貢獻(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 對(duì)外 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ì)說(shuō)明 aclnnNegaclnnInplaceNeg.md支持的產(chǎn)品型號(hào)與環(huán)境要求按 README 說(shuō)明本算子樣例支持如下產(chǎn)品型號(hào)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ū)動(dòng)與固件并準(zhǔn)備好編譯工具鏈。環(huán)境就緒后可通過(guò) 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è)輸出張量對(duì)象out來(lái)存儲(chǔ)計(jì)算結(jié)果原輸入保持不變aclnnInplaceNeg無(wú)需新建輸出張量直接在輸入張量selfRef的內(nèi)存中就地寫入結(jié)果原地取負(fù)適合需要省內(nèi)存、允許破壞原始數(shù)據(jù)的場(chǎng)景。四個(gè)接口的函數(shù)原型如下聲明見(jiàn) 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ù)說(shuō)明參數(shù)方向說(shuō)明self計(jì)算輸入Device 側(cè)的aclTensor*支持非連續(xù) Tensor見(jiàn) non_contiguous_tensor.md數(shù)據(jù)格式支持 ND見(jiàn) data_format.mdout計(jì)算輸出Device 側(cè)的aclTensor*數(shù)據(jù)類型需是 self 可轉(zhuǎn)換的類型類型轉(zhuǎn)換關(guān)系見(jiàn) conversion_relationship.md同樣支持非連續(xù) Tensor 與 ND 格式workspaceSize計(jì)算輸出返回需要在 Device 側(cè)申請(qǐng)的 workspace 大小executor計(jì)算輸出返回 op 執(zhí)行器封裝了算子計(jì)算流程返回值aclnnStatus為統(tǒng)一狀態(tài)碼具體定義參見(jiàn) aclnn_return_code.md。第一段接口會(huì)完成入?yún)⑿r?yàn)主要錯(cuò)誤場(chǎng)景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中一一對(duì)應(yīng)CheckNotNull檢查空指針、CheckDtypeValid檢查 dtype 是否在支持列表內(nèi)、CheckPromoteType校驗(yàn) self 的 dtype 能否轉(zhuǎn)換為 out 的 dtype、CheckShape校驗(yàn)維度不超過(guò) 8 且 shape 一致。aclnnNeg 參數(shù)說(shuō)明參數(shù)方向說(shuō)明workspace計(jì)算輸入在 Device 側(cè)申請(qǐng)的 workspace 內(nèi)存起始地址workspaceSize計(jì)算輸入在 Device 側(cè)申請(qǐng)的 workspace 大小由第一段接口獲取executor計(jì)算輸入op 執(zhí)行器包含算子計(jì)算流程stream計(jì)算輸入指定執(zhí)行任務(wù)的 acl 流aclnnInplaceNegGetWorkspaceSize 參數(shù)說(shuō)明參數(shù)方向說(shuō)明selfRef計(jì)算輸入/計(jì)算輸出Device 側(cè)的aclTensor*既是輸入也是輸出就地計(jì)算支持非連續(xù) TensorND 格式workspaceSize計(jì)算輸出返回需要在 Device 側(cè)申請(qǐng)的 workspace 大小executor計(jì)算輸出返回 op 執(zhí)行器第一段接口的錯(cuò)誤場(chǎng)景161001(ACLNN_ERR_PARAM_NULLPTR): 1. 傳入的 selfRef 是空指針。 161002(ACLNN_ERR_PARAM_INVALID): 1. selfRef 的數(shù)據(jù)類型不在支持的范圍之內(nèi)。 2. selfRef 的維度范圍超過(guò) 8。從實(shí)現(xiàn)上看aclnnInplaceNegGetWorkspaceSize并沒(méi)有單獨(dú)寫一套流程而是直接復(fù)用普通接口——將selfRef同時(shí)作為 self 和 out 傳入aclnnNegGetWorkspaceSize見(jiàn) aclnn_neg.cpp因此它天然繼承了所有 dtype、shape 一致性校驗(yàn)只是 out 與 self 指向同一塊內(nèi)存。aclnnInplaceNeg 參數(shù)說(shuō)明與aclnnNeg完全相同workspaceDevice 側(cè) workspace 內(nèi)存地址、workspaceSize由第一段接口獲取、executorop 執(zhí)行器、stream任務(wù)執(zhí)行的 acl 流。源碼原理取負(fù)的完整計(jì)算流水理解了接口我們?cè)偕钊朐创a看這條計(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 的情況最后通過(guò)uniqueExecutor-GetWorkspaceSize()匯總整條流水所需 workspace 大小。第二段接口aclnnNeg/aclnnInplaceNeg的實(shí)現(xiàn)則非常簡(jiǎn)潔直接調(diào)用框架的CommonOpExecutorRun完成提交執(zhí)行。AiCore 與 AiCpu 的分發(fā)策略l0op::Neg本身neg.cpp會(huì)根據(jù)輸入 dtype 和當(dāng)前芯片架構(gòu)決定走哪條計(jì)算路徑AiCore 路徑當(dāng) dtype 命中AICORE_DTYPE_SUPPORT_LISTfloat/float16/int32/int8/int64/int16/uint8/bf16時(shí)通過(guò)ADD_TO_LAUNCHER_LIST_AICORE宏將 Neg 算子加入 AiCore 任務(wù)隊(duì)列AiCpu 路徑其余情況通過(guò)ADD_TO_LAUNCHER_LIST_AICPU宏回退到 AiCpu 執(zhí)行保證接口的通用性。Kernel 層的逐類型實(shí)現(xiàn)AiCore 上的 kernel 實(shí)現(xiàn)neg.cpp 與 neg.h對(duì)每種 dtype 都做了針對(duì)性處理這是取負(fù)看似簡(jiǎn)單、實(shí)則有坑的地方float / half直接調(diào)用向量指令Muls(dst, src, -1)完成乘 -1int32 / int16先Duplicate(-1)再用Mul逐元素相乘int8由于向量乘單元不支持直接對(duì) int8 做乘法先Cast到 half 計(jì)算-1倍再通過(guò)左移/右移 8 位模擬 int8 的溢出截?cái)嘈袨樽詈筠D(zhuǎn)回 int8uint8與 PyTorch 的torch.neg(uint8)語(yǔ)義對(duì)齊——保持 uint8 類型并按 256 取?;乩@。實(shí)現(xiàn)上先轉(zhuǎn) half 乘 -1、加 256再與 255 做按位與mask實(shí)現(xiàn)模 256 效果int6464 位取負(fù)最為復(fù)雜采用按位取反 加 1的補(bǔ)碼思路Not逐位取反后通過(guò)掩碼實(shí)現(xiàn)對(duì)低 32 位 1 的進(jìn)位傳播含低位進(jìn)位向高位傳遞的判斷詳細(xì)流程見(jiàn) 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對(duì)齊切塊每個(gè)核分得大塊big core或小塊small core數(shù)據(jù)余數(shù)作為尾部塊tail block交給前tailBlockNum個(gè)核多算一份并通過(guò)SetTilingKey(1/0)區(qū)分是否有尾部塊兩種切分形態(tài)Kernel 側(cè)根據(jù)TILING_KEY_IS選擇對(duì)應(yīng)的初始化分支。tiling 還針對(duì)不同 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 元素對(duì)齊與最大 repeat 次數(shù)255限制。Kernel 側(cè)使用雙緩沖BUFFER_NUM 2流水線按CopyIn → Compute → CopyOut循環(huán)處理每個(gè)分片尾部片單獨(dú)處理剩余數(shù)據(jù)。約束說(shuō)明確定性計(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申請(qǐng)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手冊(cè) // 根據(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算子庫(kù)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申請(qǐng)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é)果 → 釋放張量 → 釋放資源。對(duì)于 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)不需要?jiǎng)?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申請(qǐng)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手冊(cè) 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無(wú)需新建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算子庫(kù)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申請(qǐng)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; }對(duì)比兩個(gè)示例可以看到原地版本少了out張量的創(chuàng)建、釋放與aclrtFree整體內(nèi)存占用更低。使用原地接口前務(wù)必確認(rèn)原始輸入不再被需要否則會(huì)因數(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)符號(hào)使用aclnnInplaceNeg。實(shí)踐要點(diǎn)workspace 的申請(qǐng)必須在第一段接口之后、第二段接口之前且只有當(dāng)workspaceSize 0時(shí)才需要申請(qǐng)否則直接傳空指針即可兩段式調(diào)用之間executor是連接兩者的關(guān)鍵句柄不可提前釋放計(jì)算完成后務(wù)必調(diào)用aclrtSynchronizeStream同步再執(zhí)行 Device 到 Host 的結(jié)果拷貝否則可能讀到未完成計(jì)算的數(shù)據(jù)輸出out的 dtype 與 shape 必須與self保持一致或可轉(zhuǎn)換否則第一段接口會(huì)返回161002(ACLNN_ERR_PARAM_INVALID)整數(shù)類型尤其 uint8 取負(fù)遵循模 256 回繞語(yǔ)義與 PyTorch 行為對(duì)齊數(shù)值上neg(1) 255這是由 Kernel 層實(shí)現(xiàn)決定的預(yù)期行為而非錯(cuò)誤。小結(jié)Neg 算子雖然語(yǔ)義簡(jiǎn)單y -x但其工程實(shí)現(xiàn)完整覆蓋了 CANN 算子開發(fā)的各個(gè)層面算子原型注冊(cè)與 shape 推導(dǎo)neg_def.cpp、neg_infershape.cpp、dtype 感知的 tiling 切分neg_tiling.cpp、AiCore/AiCpu 雙路徑分發(fā)neg.cpp、以及針對(duì) int8/uint8/int64/bf16 等類型的精細(xì)向量化 kernelneg.h。通過(guò)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ā)范式提供了極佳的參照。贊分享算子庫(kù)人工智能CANN【免費(fèi)下載鏈接】ops-math本項(xiàng)目是CANN提供的數(shù)學(xué)類基礎(chǔ)計(jì)算算子庫(kù)實(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é)算子庫(kù) ops ma算子庫(kù)人工智能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ì)函數(shù)能夠以接近ω算子庫(kù)人工智能CANNCANN ops-math 算子解析IsNegInf 負(fù)無(wú)窮判斷算子的 ACLNN 接口與 AiCore 實(shí)現(xiàn)CANN ops math 算子解析IsNegInf 負(fù)無(wú)窮判斷算子的 ACLNN 接口與 AiCore 實(shí)現(xiàn) 導(dǎo)讀 本文聚焦 CANN ops math 倉(cāng)算子庫(kù)人工智能CANN創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
黄页| 国产热av| 97久久精品亚洲| 色悠久| 北京美女一区二区| 成人一区二区三区四区| 免费的av网| 婷婷视频在线免费观看| 无码最新| 污色区网站| 狠色婷婷久久一区二区三区_| 五月婷视频| 天天艹天天日| 日韩极品无码B| 在线洲亚线| 亚洲狼狼干综合1| 91狠狠综合久久久| 国产综合网站在线播放| 精品久久无码午夜福利| 亚洲码在线中文在线观看| 怡红院久久老司机| 久久精品噜噜噜成人看免欧美大片| 嗯~啊~快点 死我视频| 青青草日韩无码| 偷拍自拍在线视频观看| 人妻 中文 日韩| 亚洲国产成人精品999| 日日操夜夜操天天操免费观看麻豆| 日韩欧美资源| 国产精品97超碰| 国产成人天堂| 亚洲天天更新| 黄色大片视频在线免费看| 麻豆av一区二区| 久久久免费高清中文视频| 少妇第一页| 亚洲色资源| 75大香蕉| 国产在线精品电影观看| 日韩av电影网站| 91老熟女老女人国产老太| 台湾肥佬网一区二区三区| 欧美黑人猛交春色影视大全| 天天看片麻豆| 久久人妻少妇| 97亚洲自在精品在线观看| а√天堂资源官网在线资源| 国产精品日日摸天天碰| 黑人猛交| 久操网视频| 国产又操| 精品少妇后入一区二区三区四区人妻巨乳| 男人的天堂在线2| 久久国产视频专区一二三| 夜夜操av亚洲一区二区| 天天亚洲| 久久精品国产亚洲AV片多多| 国产又粗又又黄又猛| 免費人妻夜夜爽天天爽爽一区| 欧美制服网站美腿丝袜| 亚洲永久AV无码精品秋霞| 性生活无遮挡纯毛片在线看| 超碰社区97| 三及片网站| 日夜伊人网| 亚洲AV成人无码一二三久久| 97色色网| 亚洲一区二区 麻豆传媒| 欧美97视频| 国产91 丝袜在线播放| 国产亚洲精品一区二区三区| 亚洲最大AV网| 免费草草草草草视频| 九九九999久久久网站| 天天看天天日天天操| 亚洲AV成人无码一二三久久| 久热这里| 久久爽爽精品| 超碰色综合| a v网站在线播放| 成功精品影院| 人妻精品一区二区三区| 日本熟女中文字幕一区| 色妹子A V| 亚洲人91| 日韩无码人妻| 激情色播| 欧美极品少妇| 激情五月综合开心五月| 天天综合色电影| 97爱啪| 黄色AV免费| 国模一区二区三区| 国产精品美女久久久久久网站| 欧亚性爱啪啪| 麻豆一区二区三区精品| 国产成人在线观看网址| 日韩性爱网址| 欧美同性恋 的搜索结果 - 91n| 51久久夜色精品国产麻豆| 欧美精品日韩一区二区| 国产欧美成人精品| 久96热在线观看视频| 亚洲精品人妻吞精av | 97超碰国产亚洲精品| 精品国产三级av韩国在线| 五月天婷婷久久| 俺也射| 亚洲 欧美 制服 另类 自拍| 9999久久久久| 中文字幕在线日亚州9| yy少妇精品久久| aaa亚无码专区| 日本三级中国三级99人妇网站| 青青草AV色| h无码动漫在线观看| 超碰98综合网| 国产色精品午夜大片| 都市激情人妻一区二区青青操视频| 97视频免费在线观看| 五月香婷婷| 97在线/亚洲| 成人美女av| 色综合1991| 精品性爱一区二区| 疯操AV| 肉嘟嘟www视频在线观看高清| 色大师网站www永久网站视频| 2017亚洲天堂| 亚洲一区二区三区麻豆传媒| 国产日逼视频| 91女优在线观看| 秋霞免费AV| 久久中久文96| 久久色激情一区二区三区| 天天干天天操天天操夜夜操天天操 | 肉动漫无遮挡h在线观看| 九九热最新| 九九热av| 国产嫩草精品A88AV在线| 国产一区免费午夜视频| 欧美综合综合| 4141514逼喷水三级片| 无码人妻精品一区二区中文| 久久青娱乐| 日本熟妇熟色97一本在线观看| av亚欧| 欧美日韩精品久久| 九九性视频| 亚州性9| 九九九午夜| 激情无码日韩| 亚洲综合伊人无码久久| 天天综合有色网| 猛交交| 日婷婷| 91精品人妻偷情| 国产妇女精品视频青青草| A片 AV一级在线播放观看免费| 国产视频小说| 伊人久久88国产女| 操逼免费视频无码国产| 欧美—性—交—色| 伊人玖玖网| 国产热RE99久久6国产精品首| 狼人狠干| 国桃视频产巨乳精品一区二区在线| 99热只有这里有精品| 性色A∨91| 久久精品人妻一区二区| 看看小穴| 欧美综合区| 美女裸体无遮挡永久免费观看网站| 久久久夜夜夜| 天天看高清麻豆| 大香蕉亚洲中文| 国产精品点击进入在线影院| 国产sv美女内射| 蜜臀AV成人精品蜜臀AV久久| 五月丁香激情综合| 日本www操操操| 国产老女人久久毛| 野狼福利社区| 国产91 丝袜在线播放| 久久视频,这里只有精品| 夜夜高潮夜夜爽| 99久热| 丰满岳乱妇一区二区三区| 极品色| 久草综合网| 人妻 制服 日韩 中文 在线| 99青草| 九九热AV| 99久在线精品99re8| 思思热免费在线视频| 超碰久超碰久| 97网站在线观看| 欧美一二在线| 国产天天看| 天色综合网| 920日本午夜免费| 国产精品久久久久久片| 日韩不卡在线一区二区| 国产毛片久久久久久久| 亚洲中文字幕久久人妻| 色呦呦呦在线观看视频| 日本午夜福利影院| 9久久精品| 人妻熟女av国产网站| 国产大学生口爆吞精合集| 色色色色日本| 91free福利| 久综合网| 91久久久久久久久久久| 天天射网| 超碰97在线 欧美 国产| 91国产大片| 91色噜噜狠狠| 诱惑人妻欧美一区在线播放| 丝袜加勒比| 国语精品av| 久久久久久人体| 欧美性爱一区二区三区| 超碰欧美97| 性色综合网| 91东北熟女| 超碰97欧美| 91久久免费视频互動交流| 性色av大全| 岛国毛片手机在线观看| 亚洲国产欧美中日韩成人综合视频| 久久精品性| 开心五月激情网| 熟女人妻av在线资源,黄色的资源 粉嫩国产精品久久粉嫩 | 无码 黑人一区二区三区| 成人小说视频在线精品欧美| 亚洲综合中文字幕有码| 欧美亚洲综合色| 久久秀这里有精品| 99色日| 一二三四区电影| 蜜桃久久一区二区| 欧美黄色大片在线观看| 丁香六月激情综合| 99国产精品久久久久久久成人热| 亚洲AV色图一区| 午夜福利激情在线视频| 久久久亚洲高清不打码| 婷婷久草一区二区三区| www.高清无码诱惑一区.com| 欧美人妻熟女在线| 牛牛AV人人夜夜澡人人爽| 午夜爽爽爽在线观看永久入口姬片| 超碰av在线| 中文字幕日韩精品一区二区三区| 91中文字幕在线观看| 久久久久九九九| 亚洲黄色网址视频| 东京太热久久久| 91激情国产| 伊人热综合| 久热这里| 后入式999| 欧美一区二区三区四区综合| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 综合影院永久入口国产| 伊人婷婷五月天| 成人熟女区| 老女人综合网| 看看小穴| 日本加勒比无码专区| 在线观看亚洲专区| 日欧美色| 天堂v无码免费视频| 超碰91在线| 国产精品第二页| 天美传媒精品一区二区| 99色热| 美熟女逼导航AV操逼| 91AV入口| 少妇同性| 中文字幕人妻资源在线| 久超超碰| 国产av激情无码久久天堂| 日本99久久| 青青草导航在线视频| 熟女精品va中文字幕| 91欧美长吊| 亚洲国产精品V?在线播放| 五月天婷婷欧美三区| 国产9熟妇视频网站| 欧美视频一区二区在线| 国产人妻久久精品一区二区三区| 高清无码国产亚洲| 大茄子熟女AV导航| 丁香五月激情五月| 一起草三级AV电影在线观看 | 91女色| 欧美日韩91| 208天天久久九九九| 精品人妻中文字幕4399| 超碰碰激情97+久| 丁香五月自拍| 欧美精品系列| 99re国产中文字幕| 婷婷激情丁香| 色老汉色| 亚洲欧洲精品视频发布| 亚洲91射| 亚洲国男人的天堂| 天堂v无码免费视频| 亚洲 中文 女同| 亚洲人成网站7777| 亚洲凸凹超碰成人| 人妻-91porn| 婷婷丁香人妻| 久久蜜桃综合网| 精品国产一区二区三区四区在线看| 蜜臀久久在线视频| 亚洲激情网一二三四区| 丁香六月激情| 黑人在线91| 五月天色图| www亚洲免费| 午夜九九| 夜夜操91744565| www.91逼逼.com| 国内成人圈中文字幕无码视频| 日本中文字幕在线视频 | 国产在线精品偷| 狠日欧美| 麻豆 亚洲 97| 国产精品女同| 亚洲制服欧美另类内射| 大学生美女口爆| 啊啊啊啊啊啊啊在线| 99操逼| 午夜福利国产欧美日韩夜夜| 97视频免费在线| 99re69综合| 欧美激情中文字幕另类小说| 欧美日韩大香蕉| 人妻无码一区二区三区久久99| 亚洲男人天堂2019| 国产97色在线| 美女操逼福利视频| 国模无码人体一区二区三| 97国产精选| 国产精品网站免费| 密桃99999| 在线看片国产精品每日更新| 国内毛片热久久思思热| 夜夜欧美| 中韩中文字幕在线观看| 内射黑丝袜| 日韩AV中文字幕电影| 丁香五月天激情网站| 精品国产乱码| 搡老女人老91妇女老熟女| 91 亚欧| 足交视频老司机| 一区二区三区四区姦女| 不卡超碰护士AV在线免费播放| 熟女字幕| 日本在线不卡v二区| 欧美人与动性人交a| 精品日日人妻| 另类图片天天影视| 91黑丝在线| 精品国产乱码久久久久久免费| 午夜欧美神马久久久久| 在线 亚洲 网爆 自拍| 91黑丝露脚| 五月婷婷色| 日韩中文字幕二区| 丁香色婷婷| 国产精品国产拍高清AV| 中文字幕交换人妻| 熟女字幕| 天美麻花大全视频| 丁香五月性爱| 久久9视频| 丁香五月天久久精品视频一区二区三区| 欧美性爱在线无码| av资源在线播放天堂| 欧美日韩精品一区二区三区高清| 国产人伦a片信息免费片| 最新av网站在线观看| www久久国产精品| 操国产逼| 手机在线A片| 99性爱在线观看| 国产精品无码在线| 亚洲精品a人片在线观看视| 色欲日韩欧美在线一区| 日本黄 R色 成 人网站| www.狠狠| 欧美亚洲丝袜美女电影| 日本 免费 一区二区三区 久久香蕉| 欧美日不卡| 嫩草 人人网精品| 91劲爆| 亚洲色婷婷综合久久一区二区三区| 免费男人的天堂| 色逼综合| 亚洲系列第一页| 久久久夜夜嗨免费视频| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 亚洲欧美自拍偷拍| 97人人模人人爽人人| 色五月婷婷在线| 按摩中文字幕| 亚洲日韩狠狠撸视频| 欧美色院| 秋霞久久亚洲精品成人| 天天色播| 人妻熟女一区二区三区在线| 男人的天堂日韩| 久久有码视频| 国产亚洲性生活视频播放| 天天综合网日韩7799| 人人插人人搞人人操| 伊人激情| 鸥美极品| 26uuu久久| av凤凰久久久| 91伊人大香蕉| 精品对白久久不卡| 中国zzijzzijzzwww精品| 天天插天天操| 日韩中文字幕2020| 天美精品原创av片国产| 中文字幕成人理论在线| 青青草亚洲一区 | 天天做日日做天天欢。| 日本免费不卡二区| 天天肏夜夜肏| 天天日天天干天天整| 混色激情av| 日夜尻逼网| 亚洲无码国产精品久久| 亚洲 欧美都市激情| 精品欧美日韩在线观看| 黄色大片免费在线| 五月丁香色综合| 日本孕妇孕交| 国产第12页| 丁香五月影院| 久久久久久免费电影| 亚洲一区日韩精品| 午夜呻吟欧美| 亚洲天堂无码| 色哟哟1区2区| 嗯啊视频免费在线观看| 午夜精品久久久久久久99热影院| 大香蕉中文| 婷婷九月色| 亚洲国产中文字幕| 亚洲国产成人精品久久久国产成人一区二区三.| 91色女| 花花AV导航| 凹凸视频特色日本特黄| 久久久精品一区二区| 中国少妇XXXX做受| 人妻免费观看| 色网在线视频观看免费| 欧美人妻中出| 成人精品一区二区91毛片不卡| 久久久久中出| 香蕉国产精品麻豆亚洲欧美日韩| 熟女中出视频| 黄色av网站在线播放| 国产精品欧美激在线| 国产亚洲精品久久久久小| 91欧美偷拍| 国产精品久久久久无码Av网曝门 | 视频国产欧美在线播放| 欧美五区| 国产精品熟女九色九色蜜臀| surenchaopeng| 亚洲天堂AV在线播放| 91/欧美| 日韩欧美aⅴ综合网站发布| 东北女人操比视频| 久久亚洲精品成人av| 久久精品男人的天堂| 黄色一级视| 一二区在线观看视频| 色色五月婷婷| 久久国产在线一区二区| 日本孕妇孕交| 色蜜AV| 不卡中文字幕aⅴ在线| 欧美在线55555| 日韩AV熟女乱伦| 另类欧美色| 久久综合日韩亚洲欧美| 99re国产精品视频| 青青草依人大香蕉| n1038 一二三区| 艹少妇网站| 视频二区美腿制服人妻欧美| 亚洲欧美中日韩| 日日操丁香五月天| 91综合网在线| 国产精品电影推荐| 婷婷五月天色| 欧美日韩另类在线播放| 97国产|免费| 97视频在线观看高清资源| 户外裸露刺激视频第一区| 国产免费内射视频| 神马久久69| 五月天色五月| 国产精品无码av嫩草| 果冻传媒A片麻豆熟妇人妻| 国产天天骚| 强奸乱伦αv片| 18禁止看精品中文字幕| 91天堂丝袜美腿| 大香蕉99热| 91蜜桃婷婷狠狠久久综合9色| 久久草草亚洲蜜桃臀| …中文字幕亚洲乱,97人妻无码费视…| 色97| 超碰精品在线| 国产家庭乱伦网址| 中文字幕一区二区三区四区在线视频| 99999久久精| 97超碰超欧美。| 天堂蜜桃无码视频一区二区| 久久AV无码网址| 成人26uuu| 性综合网| 大香蕉中文| 78m成人视线| 偷拍片久久| 大香蕉在线86| 中文字暮97| 超碰在线国产| 韩国三级理论在线| 91在线视频免费播放| 中文字幕熟女人妻丝袜| 外国免费性情大片| 中文字幕第7页| 日韩色女精品| 亚洲伊人久久精品影院| 成人国产二区三区在线,男女精品。| 欧洲与亚洲欧美精品中文字幕| 久久精品视频久久久| 五月天婷婷成人网| 亚洲欧美精品91| 六月婷婷色综合| av资源在线播放天堂| 伊人久久大香线蕉无码| 99色热国产视频精品| 97人人夜夜精品视频| 国模私拍一区二区三区神乳| 青青青国产手线观看视频2| 欧美黄页| 久久av无码| 国产兽交视频在线播放| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 欧美日韩另类激情图片| 欧美在线天堂| 日日爱99| 国产二区三区免费视频| 久久透逼视频| 国模不卡| 国产 丝袜 欧美中文 另类| 亚州操逼网| 九九这里只有精品| 99爱久久视频频| 精品然女一区二区| 亚洲九九视频在线观看| 亚洲精品 欧美97色色| 强乱老妇中文字幕| 一区二区影视| {男男暴菊gay无套网站| 福利伊人玖玖国产| 超碰97综合在线| 久久久天堂| 久久日韩毛| 澳门人妻久久| 97就爱干| 亚州男人天堂| 久久这里只精品免费福利| 黄色电影在线播放综合网站| 国产美女mm131爽爽爽爽| 99九九久久| 国产精品熟女AV中文字幕在线播放| 国产性感在线观看| 中文字幕精品亚洲熟女| 久久久久久久性爱| 乱伦一区二区三区‘| 美国一区二区免费视频| 久久黄黄| 91精品少妇搡搡搡| 日本操逼视频免费| 在线观看黄色电话| 精彩视频日韩| 久久久久久久久女黄| 日本操逼视频免费| 国产尹人在线视频免费| 日韩紧密久久| 欧美美逼| 免费作爱一级视频| 久久e6只有精品| 超碰社区97| 青娱乐福利99| 99亚亚热| 久久精品国产97欧美精品亚洲| yaouchengrenav| 日韩婷婷| 美女网站黄页| 一本精品日本在线视频精品 | 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚 | 国产日韩美女小穴视频网站不卡| 国产无码高清操逼视频| 日本超碰在线国产一区| 欧美综合传媒| 新久久AV| 97青娱乐超碰久久| 操逼操逼操| 色九区| 精品一区二区久久| 亚欧视频在线| 国产精品suv一区| 国产福利小视频高清在线观看| 国产欧美伊人| 中文字幕在线免费观看| aaa一级黄片| 伊人午夜福利视频| 国产熟女完整版中字| 99re这里只有精品3| 日韩猛交| 91美女中出| 日韩久射综合| 亚洲图片欧美在线视频| 夜夜高潮夜夜爽国产伦精品| 欧美系列在线一区二区| 中文字幕一区二区三四五区日日骚| 久久亚洲中文字幕视频| 91扒丝袜综合在线| 污色区网站| 嗯啊啊啊轻点视频| yw尤物av无码点击进入麻豆| 久热69九色熟妇97| 国产视频人人网| 亚洲。日韩。欧美| 蜜乳中文字幕a在线| 欧美爆操91| 91免费看一区二区三区| 麻豆区99999| 国产黄色在线播放观看| 91网18| 亚洲精品97| 中文字幕av色| 亚洲精品少妇| 久久久99久9| 日日干天天干夜夜爽| 美腿色图| 成人a大片在线观看| 国桃视频产巨乳精品一区二区在线| 日逼视频日本| 在线 欧美 亚洲| 啪啪一区| 亚洲一区二区三区在线激情| 欧美72网页| 日本国产高清色www视频在线| 春色综合免费| 91婷婷伊人狠人| 插入逼91| 97在线资源| 五月综合视频| 欧美传媒| 人妻人久久精品中文字幕| 操人91| 久久精品一区二区三区四区五区| 久久夜夜夜夜| 国产呦精品一区二区三区下载| 一区二区三区麻豆| 欧美亚男人的天堂| 特级毛片特黄久久免费看| 农村少妇久久久久久久| 天天干一区二区| 久久九九视频九九视频| 三级色影综合网| 97 国产一区| 91丨九色丨大屁股| 无码137片内射在线影院| 99久久9| 精品四五区| 不卡一区二区日本视频| 92久久| 欧美日动态视频| 黑操B| 草草网站影院白丝内射| 超碰91在线| 91亚洲狠狠色| 日韩精品人妻系列无码天堂| 性一交一乱一交A片久久四色| 曰韩人妻中文字幕在线| 国产精品夜夜夜| 96AV久久久| 99自拍视频在线观看| 国产久久成人| 偷拍精品一区二区三区| 天堂av最新电影网| 青春草A| 长长久久曰曰夜夜成人网| 日韩在线一区高清在线| 欧美男人天堂| 熟女熟妇一区二区三四区| 中文97国产| 99热99re超碰精品| 99婷婷| 天天做日日做天天欢。| 欧美性生活男人的天堂| 超碰美国| 成人九九| 天天性射网| 亚洲 综合 第一页| 大香蕉宅男伊人| 91久青| 大香蕉碰碰| 久久激情网| 丰满人妻一区二区三区大胸懂色| 久热影视| 国产亚洲福利第一页丝袜| 我想要 啊 啊 啊| 欧美亚洲特P| 欧成人在线| 亚洲乱熟女一区二区| 久久久久久久六六 | 99色在线| 久热99999| 嗯嗯啊啊日韩精品| 国产中文日韩欧美一区二区三区人妻丝袜美腿 | 97少妇人妻中文字幕久久| 欧美国产有色电影| 大香蕉啪啪啪啪在线| 久久精品一区| 亚洲熟妇熟在线电影视频| 精品人妻一区二区三区-国产| 欧美久久九九| 超碰97欧美在线| 啊啊啊不要好疼视频| 夜夜一区二区| 久草精品热视| 久久AV无码1区2区3区| av在线人气| 日韩午夜国产| 国产精品久久久久久久免牛肉蒲团| 欧美日韩一干二干| 放黄片放3级黄片没穿衣服| 精品无码少妇| 精品一级毛片在线观看| 日本久久女同性恋视频| 亚洲一区中文精品| 艹精品| 能直接看AV的网站| 久久激情网| 久久婷婷国产一区二区色| 欧美日韩国第一区| 极品久久久久久久久久久久久久| 狠狠躁天天躁日日躁97| 免看60秒涩涩视频| 中欧人妻丝袜中文字幕| 欧美18老人禁| 日韩一性一交一A片俄罗斯| 日亚韩精品视频二区三| 99热精品在线在线| 天天爽夜夜欢视| 风骚少妇视频中文字幕| 97中文字幕一区| 欧美激情激情xxxx欧美专区| 国产精品干干干| 五月丁香久久| 美国久久一二三四| 久久久久久久综合,国产| 嗯嗯啊啊啊好爽| 伊人网免费视频| 午夜寂寞欧美| www.四虎在线| 国产精品乱码久久久、久久| 国产精品熟女一区二区三区| 亚洲免费成人在线高清无码视频| 日本三级日本三级99| 亚洲乱色视频一区、二区在线| #NAME?| 欧美色宗合| 亚洲毛片一级带毛片基地| 日本三级中国三级99人妇网站| 国产久久日韩网站导航| 毛片99-全集电影手机免费观看完整-B029AV | 青青青草原| CCYY草草影院地址入口| 欧美视频在线视频免费va| 久插综合| 伊香蕉综合久久久久久久噜噜噜| 九月丁香婷婷色| 丝袜美腿欧美| 99re99在线视频| 99这里只有精品国产| 天天爽天天爽| 97爱啪| 一起草欧美| 欧美熟妇视频| 久久久久成人网| 在线中文字幕极品av| 欧美香蕉视xxx| 久久久久久九九九| 国内毛片无码一级毛片| 欧洲精品一二三在线| 免费a v| 丁香五月社区| 国产97av| 妺妺跟我一起洗澡没忍住| 欧美A√综合网| PMv在线观看| 深夜啪啪啪视频免费| 97在线/亚洲| 欧美视频边做饭边橾| 久久久专区| 国产在线视频二区| 一区二区精品更新提醒| 91夜色| 中文字幕二区日韩天堂| 东北女人高潮视频| 免费看日产一区二区三区| 97超碰中文| 亚洲成人日韩小说| 97在线观视频免费观看| 午夜福利一区二区影院| 日韩二级| 午夜福利一区二区影院| 97久久精品亚洲中六字幕| 欧美亚洲中文| 九九九久千久久激情蜜桃在线看 | 美女啊啊啊啊啊| 99精品在线播放| 99999久久精| 欧美成人精品A片免费一区99| JuliaAnnXXX888| 色五月综合网| 麻豆亚洲AV成人无码久久精品| 天天爽人人综合免费7799| 蜜臀99久久精品| 五月天色色色| 中文乱码字幕观看| 人人手机欧洲亚洲国产人妻| 97超碰人人操人人操| 中美日韩毛片| 啪啪AV导航| 国产吹潮女在线观看| 日韩精品一区二区三区色欲| 午夜欧美精品久久久| 亚洲 欧美都市激情| a片在线播放| 综合天天网| 国产呦精品一区二区三区下载| 国产精品另类| 亚洲中文字幕妇伦久久| 午夜.DJ高清在线观看免费7| 欧美极品少妇| 性爱动态120秒| 中文字幕高清精品一区| 伊人久久亚洲色欲综合网站 | 亚洲少妇免费视频\| 亚洲欧美国产日本一区二区三区| 欧州91高潮| 欧美久久婷婷| 日本精品高清一二区一本到| 亚洲欧美另类小说| 欧美色图私拍91| 黄色毛片A片| 欧美双插| 精品人妻一区春色| 人妻少妇色综合| ,成人免费啪啪视频| 久九9精品| 国产高清1234区| 亚洲国产成人精品久久久国产成人一区二区三. | 91精品老女人| 麻豆国产成人精品| 欧美在线视频99| 一级性爱啪啪视频| 蜜臀AV一区二区三区| 久操操| 深爱激情五月天| 素人一区二区三区日韩| 欧美综合综合| 久久99草| 亚洲色图91欧美日韩| 人人插人人摸人人| 青春草莓视频在线观看网址| 欧美亚洲清纯| 久久、1234| 中文字幕第页| 色乱二区| 日本高清免费一本视频在线观看| 九色 蝌蚪 熟女自 | 天天综合91| 福利天天都操| 97 九色| 美女露胸露奶头| 亚欧韩av| 无码WWW免费视频网站| 人人色人人操在线| 91深夜夜| 欧洲特黄毛片免费看欧洲毛片| 91痴汉| 伊人久久蜜月| 97综合国产精品高潮久久| 亚洲丝袜二区| 99热啪啪| 欧美久久伊人| 国产精品一级毛片不卡视| 国产肏逼网站| 中文字幕99999| 欧美姓爱综合网| 欧美亚洲韩国视频十五区| 亚洲色图伊人网| 天天干天天中出av| 91欧美长吊| 久草视频制服诱惑| 美女露胸露尿口| 欧美躁死她一区二区| 99热伊人| 91九九| 六月丁香网| 大香蕉久久| 婷婷精品视频| 激情av| 天天插天天干| 一区二区三区精品黑丝白丝酒店对鸡| 久久东京国产精品视频| 欧美啪啪女女| 久热超碰| 国产后入精品| 人妻在线臀日韩| 少妇同性| 无码视频一区二区| 制服中出中文人人精品| 人妻少妇精品久久久| 蜜臀th| 91国产伊人大香蕉| 亚洲综合有码| 日韩97P| 又大又大又大又粗爽高潮观看| 欧美亚洲中文| 亚洲无码超碰免费| 国产一进一出视频网站| 日韩操逼HD| www网站黄| 99爱在线视频| 歐美一級亂黃99在綫精品| 欧美另类自拍| 色妇91| 易易A毛视频| 久久久久久性爱免费视频| 国产女同在线观看视频| 少妇厨房愉情理伦片bd在线观看| 国产成人99久久亚洲综合| 午夜亚洲国产理论秋霞| 国产精品香蕉热久久新品| 日本片日本片祼观看网站在线看中文版网页在线看| 翔田千里av一区二区三区| 亚洲欧美九九| 日韩人妻无码精品系列| 欧美在线第五页| 天天日天天看| 亚洲色图尤物视频| 天天做日日爱夜夜爽| 丁香久久| juliaann丝袜大战黑鬼| 女人18精品一区二区三区| 搡老女人老91二区| 久久精品欧美一区二区三区不卡| 久久性爱大全| 大香蕉伊利av| 国产精品3| 亚州综合网| 美国日韩黄色片| 在现视频女上位好爽| 国产一区二区三区久久精品太古里| 久久熟女嫩草成人片免费| 蜜臀99久久精品久久久懂爱| 岛国大片在线观看网站入口| 开心五月婷婷激情| 麻豆天美传媒在线视频天堂| 亚洲色棕合| 91啦人妻| 色999亚洲人成色| 91草草草| 九九九久久久| 全球成人中文在线| 丝袜喷水在线| 青青草好吊色| 国产精品一区二区三区,亚洲综合 性开放中文AV高清无码免费看 | 欧美中出| 日韩AV熟女乱伦| 欧美激情欧美精品| 94色色电影网| 欧美黑人精品一区二区| 人妻精品4K4K4K4K4| 99rre在线精品99re8| 国产女人高潮嗷嗷嗷叫小说| 荡小穴在线观看| 91大香蕉伊人| 在线A日本| 2025亚洲男人天堂| 黑人在线91| 干婷婷综合网| 欧美综合网1| 国产高清视频无码在线| 美女尤物福利视频| 蜜臀va69| 久久久免费的精品| 少妇内射www在线观看视频| 久草在线| 色噜噜综合在线| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 99在线啪| 欧美日产国产在线成人第一区| 97午夜剧场日韩| 另类欧美色| 激情五月天丁香| 在线洲亚线| 国产免费永久精品无码| 啊啊啊在线看| 国产精品一级片在线看| 美女黑人91神马| 精品国产91av一区二区三区| 天天综合网在线| 东京热视频网| 国产不卡中文字幕免费avi| 大香蕉乱级| 欧美亚洲影视| 国产美女销魂在线观看不卡| 亚洲精品天天影视综合网 | 97碰碰日本乱偷人妻中文的| 日韩精品一区二区高清| 久久久婷| 男女性感激情网站| 蜜桃一区二区三区| 粉嫩不卡一区二区性爱| 999九九九九国产动| 欧美亚洲日本激情在线| 在线观看啊啊啊啊啊| 丁香婷婷九月| 特污精品女优骚货黄色视频在线免费观看| 五月香婷婷| 九九九九国产| 老熟女区| 日本免费专区| 免费男人的天堂| 狠狠色综合网| 国产女大学生AV| 麻豆精品A片免费观看| 天天操人人操狠狠插| 国产视频小说| 日韩精品中文字幕二区| 老女人综合| 久久亚州高清| 亚欧无码在线| 欧美劲爆第一页| 96AV久久久| 亚洲最新av无码成人精品区 | 久久久精品国产亚洲伊人| 日本影视久久免费| 欧美成人综合| 美女自卫慰黄网站免费| 超碰在线一区| 欧美色日| 色婷婷久久| 成人小说另类在线| 男人成人黄色视频在线观看免费下载| 久久久久久久久久久久久久久久9| 26UUU欧美激情一区二区| 亚洲亚洲亚洲天堂天堂| 久久怡红院| 亚洲国产91精品一区二区久久| 夜夜青青无码影院| 亚洲欧美精品一区天堂久久| 国产 亚洲 一二三四| 高清孕妇孕交 交孕妇| 91亚洲人电影| 成人a大片在线观看| 97伊人网| 国产一区二区三区,在线观看观看| 九九色婷婷| 另类TS人妖一区二区三区| KK色在线影院| 抽插爽| 天天干天天拍| www.av在线视频| 婷婷五月天激情四射| 偷拍综合亚洲| 97资源超碰| 另类专区在线观看| 午夜操逼不卡| 男人精品区| 五十路成人在线视频二区三区| 中文字幕在线观看第二页| 在线国产一区二区av| 亚洲国产精品成人综合| 青青五月天| 操逼短片| 国产精品视频播放| 麻豆国产免费影片| 天天干干天天干干| 国产免费黄色一级大片| 欧美日日人人天天| 亚洲少妇在线影音| WWW4虎| 精品人妻伦一二三区久久| 久久人人舔人人爽舔人人av片| 99热| 欧美+日产+中文| 涩亚洲欧洲| 啊啊啊啊啊啊啊在线| 欧美精品双插| 亚洲人在线成线成人| 日韩人妻资源网| 天天色播| 亚洲av强奸乱伦| 男男H黄动漫啪啪无遮挡网站| 中文字幕日韩精品久久| 亚洲欧美成人网站AAA| 麻豆亚洲AV成人无码久久精品| 亚洲日韩黑丝| 欧美激情亚洲情色| 亚洲欧洲日产国产综合网| 啊嗯好大视频在线观看| 午夜天天碰综合视频| 五月丁香色综合| 五月丁香大香蕉| 色99视频| 久操婷婷| 99热亚洲| 婷婷月色| Julia在线播放亚洲久久| 日本三级中国三级99人妇网站| 天天干天天狼在线视频| 乱欲一区二区| 国产亲戚伦亲在线| 日韩性爱小视频在线观看| 91强热人妻| 精品久久人妻成人网| 日本 欧美 国产一区| 国模精品娜娜一二三区| 国产亚洲精品自在线亚洲情侣| 日韩欧美经典在线观看| 天天爽夜夜爽夜夜爽精| 久久人人爽av亚洲精品天堂桃色 | 78超碰| 欧美91精品国产自产| 中文字幕丰满人妻日本|