日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

TVM代码生成codegen

發布時間:2023/11/28 生活经验 67 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TVM代码生成codegen 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TVM代碼生成codegen
硬件后端提供程序(例如Intel,NVIDIA,ARM等),提供諸如cuBLAS或cuDNN之類的內核庫以及許多常用的深度學習內核,或者提供框架例,如帶有圖形引擎的DNNL或TensorRT,使用戶以某種方式描述模型,實現高性能。此外,新興的深度學習加速器還具有自己的編譯器,內核庫或runtime框架。
當用戶嘗試在新的內核庫或設備上工作時,必須學習新的編程接口。對統一編程接口的需求變得越來越重要,使所有用戶和硬件后端提供程序都在同一頁面上。
為了與廣泛使用的深度學習框架共享編程接口,許多硬件設備提供商已嘗試將其設備后端集成到TensorFlow。由于TensorFlow沒有為新的后端提供正式的后端接口,必須破解TensorFlow進行注冊,這需要對許多源文件進行更改,從而使將來的維護變得困難。
本文演示了作為硬件后端提供程序,如何輕松利用自帶代碼生成(BYOC)框架,將硬件設備的內核庫/編譯器/框架集成到TVM。利用BYOC框架的最重要優點,設備的所有相關源文件都是獨立的,設備的代碼源/Runtime可插入TVM代碼庫。這意味著
1)使用代碼源的TVM代碼庫將在上游兼容
2)TVM用戶可以根據需要選擇啟用代碼源/runtime。
在本文的其余部分中,首先說明可能需要帶有BYOC的TVM的情況,然后概述BYOC編譯和runtime流程。然后,分步說明如何使用英特爾DNNL(又名MKL-DNN,OneDNN),作為運行示例,將供應商庫或執行引擎與BYOC集成到TVM。
將ASIC加速器帶入TVM
首先,做一個場景來說明,為什么要將加速器引入TVM,以及BYOC框架可以期待哪些功能。
想象一下,剛剛構建了一個具有ARM CPU和出色的加速器的邊緣設備平臺,該平臺為常見的圖像分類模型,提供了出色的性能。換句話說,加速器在Conv2D,ReLU,GEMM和其他廣泛使用的CNN算子上表現良好。
不幸的是,目標檢測模型也越來越受歡迎,并且客戶需要在平臺上同時運行圖像分類和目標檢測模型。盡管加速器能夠執行目標檢測模型中的幾乎所有算子,但缺少一個算子(例如,非最大抑制,NMS)。
讓TVM執行不受支持的算子
由于TVM具有用于不同后端的多個代碼源,開源社區很容易在短時間內在CPU或GPU上實現新的算子。理想情況下,如果將加速器的編譯流程與BYOC集成到TVM,TVM將執行Relay圖分區,以將部分圖卸載到加速器,而其它圖保持在TVM上。因此,可以申明平臺能夠運行所有模型,而不必擔心新的算子。
自定義圖形級優化
ASIC加速器必須具有編譯流程。可能是以下情況之一:
生成圖形表示并將其提供給圖形引擎:可能擁有圖形引擎,該引擎能夠在加速器上執行圖形(或神經網絡模型)。例如,英特爾DNNL和NVIDIA TensorRT都使用引擎來運行整個圖形或模型,因此能夠1)減少算子之間的內存事務,以及2)通過算子融合優化圖形執行。
為了實現以上兩個優化,需要在編譯期間處理圖形。例如,Conv2D和偏差加法是TVM中的兩個單獨的算子,可能是加速器上的一個算子(具有偏差加法功能的Conv2D)。在這種情況下,需要通過將conv2d - add圖形模式替換為your_conv2d_with_bias節點來優化圖形。
如果編譯流程屬于這種情況,建議閱讀本文中的所有其余部分,但跳過將DNNL帶到TVM:C源代碼生成。
生成匯編代碼并將其編譯為可執行的二進制文件:如果沒有像前面那樣的平臺的端到端執行框架,則可能有編譯器以ISA的匯編代碼編譯程序。為了將匯編代碼提供給編譯器,將需要一個代碼生成器來從Relay圖生成和優化匯編代碼。
如果編譯流程屬于這種情況,建議閱讀本文中的所有其余部分,但跳過將DNNL引入TVM:JSON Codegen / Runtime。
BYOC的工作方式
簡要解釋BYOC框架是如何工作的。簡而言之,給定圖1中的Relay圖,BYOC框架執行以下步驟:

圖1:原始Relay圖。
1.圖注解
制作用戶提供的Relay圖,第一步是在圖中注釋可能卸載到加速器的節點。需要遵循“將DNNL引入TVM:注釋規則”,實現受支持的算子的白名單,或定制組合算子的圖形模式列表。示例注釋結果如圖2所示。

圖2:帶注解的圖。
2.圖變換
第二步是基于注釋對圖形進行轉換和優化。具體來說,BYOC執行以下轉換。
2.1:合并編譯器區域:如圖2所示,圖中現在有許多“區域”可以卸載到加速器中,實際上可以合并其中的一些區域,減少數據傳輸和內核啟動開銷。因此,步驟2.1使用貪婪算法來合并盡可能多的那些區域,同時保證功能正確性。結果如圖3所示。

圖3:合并編譯器區域后。
2.2:分區圖:對于上一步中的每個區域,創建一個帶有屬性的Relay函數,Compiler以指示該Relay函數應該完全卸載到加速器上,如圖4所示。

圖4:圖分區之后。
3.代碼生成
現在知道應該卸載Relay圖的哪一部分了。將每個Relay功能依次發送Compiler=your_accelerator到代碼生成器。代碼生成器應將Relay函數編譯為與編譯流程相匹配的形式。可以是C源代碼或任何文本格式。
最后,所有已編譯的函數將與其它未卸載的Relay函數一起.so由TVM export_libraryPython API序列化為單個文件。換句話說,.so運行此流程后,用戶將僅獲得一個文件。
4.runtime
需要實現Runtime以初始化圖形引擎(如果適用)并執行已編譯的函數。在推理期間,當TVMRuntime遇到圖4中的相應函數調用時,TVM Runtime(即圖形Runtime或VM)將利用Runtime來調用已卸載的函數。Runtime負責使用給定的輸入張量啟動編譯后的函數。數組并將結果填充到輸出張量數組中。
在本文的其余部分,以DNNL為例,演示如何使用BYOC框架實現上述工作流程。本文中所有引用的代碼和行號均基于TVM存儲庫的master分支commit 8a0249c。
將DNNL帶到TVM:注釋規則
BYOC框架提供了兩種描述受支持的算子和模式的方法,可以同時使用。以DNNL為例,說明如何使用。將代碼源的注釋規則放在下python/tvm/relay/op/contrib/your_codegen_name.py。
單一運營商規則
可以使用BYOC API直觀地指定加速器支持哪些Relay算子。例如,使用以下代碼段構建一條規則,該規則說DNNL代碼源支持Conv2D:
@tvm.ir.register_op_attr(“nn.conv2d”, “target.dnnl”)
def _dnnl_conv2d_wrapper(attrs, args):
return True
這target.dnnl將向Relaynn.conv2d算子注冊一個新屬性。通過這種方式,BYOC注釋可以target.dnnl()為圖中的每個算子調用以檢查DNNL代碼源中是否支持。
另一方面,為每個算子編寫上面的代碼段可能很繁瑣。對于DNNL實施,實現了一個輔助函數_register_external_op_helper,更簡潔:
def _register_external_op_helper(op_name, supported=True):
@tvm.ir.register_op_attr(op_name, “target.dnnl”)
def _func_wrapper(attrs, args):
return supported
return _func_wrapper

_register_external_op_helper(“nn.batch_norm”)
_register_external_op_helper(“nn.conv2d”)
_register_external_op_helper(“nn.dense”)
_register_external_op_helper(“nn.relu”)
_register_external_op_helper(“add”)
_register_external_op_helper(“subtract”)
_register_external_op_helper(“multiply”)
在上面的示例中,指定了DNNL代碼源可以支持的算子列表。
圖形模式規則
加速器或編譯器可能已將某些模式(例如Conv2D + add + ReLU)優化為單個指令或API。在這種情況下,可以指定從圖形模式到指令/ API的映射。對于DNNL,Conv2D API已經包含了偏差加法,并且允許連接下一個ReLU,可以將DNNL稱為以下代碼片段:
DNNLConv2d(const bool has_bias = false, const bool has_relu = false) {
// … skip …
auto conv_desc = dnnl::convolution_forward::desc(
dnnl::prop_kind::forward_inference,
dnnl::algorithm::convolution_direct,
conv_src_md, conv_weights_md, conv_bias_md, conv_dst_md,
strides_dims, padding_dims_l, padding_dims_r);

// Attach ReLU
dnnl::primitive_attr attr;
if (has_relu) {
dnnl::post_ops ops;
ops.append_eltwise(1.f, dnnl::algorithm::eltwise_relu, 0.f, 0.f);
attr.set_post_ops(ops);
}

auto conv2d_prim_desc = dnnl::convolution_forward::primitive_desc(
conv_desc, attr, engine_);
// … skip …
在這種情況下,除了用于單個conv2d,想映射圖模式conv2d+relu到DNNLConv2d(false, true),并映射conv2d+add+relu到DNNLConv2d(true, true)。可以使用以下代碼片段實現此目的:
def make_pattern(with_bias=True):
data = wildcard()
weight = wildcard()
bias = wildcard()
conv = is_op(‘nn.conv2d’)(data, weight)
if with_bias:
conv_out = is_op(‘add’)(conv, bias)
else:
conv_out = conv
return is_op(‘nn.relu’)(conv_out)

@register_pattern_table(“dnnl”)
def pattern_table():
conv2d_bias_relu_pat = (“dnnl.conv2d_bias_relu”, make_pattern(with_bias=True))
conv2d_relu_pat = (“dnnl.conv2d_relu”, make_pattern(with_bias=False))
dnnl_patterns = [conv2d_bias_relu_pat, conv2d_relu_pat]
return dnnl_patterns
在DNNL示例中,實現了兩個具有不同名稱的模式,以便可以輕松地在代碼生成中識別。注意,這些模式以Relay模式語言實現。
使用模式表,然后可以使用從Relay傳遞來執行
%1 = nn.conv2d(%data, %weight, …)
%2 = add(%1, %bias)
%3 = nn.relu(%2)

%1 = fn(%input1, %input2, %input3,
Composite=“dnnl.conv2d_bias_relu”,
PartitionedFromPattern=“nn.conv2d_add_nn.relu_”) {
%1 = nn.conv2d(%input1, %input2, …)
%2 = add(%1, %input3)
nn.relu(%2)
}
%2 = %1(%data, %weight, %bias)
因此,DNNL代碼生成器可以獲取模式名稱conv2d_bias_relu并映射%1到DNNLConv2d(true, true)。
復合函數中還有一個名為“ PartitionedFromPattern”的屬性。如果模式包含wildcard算子,這可能會有所幫助。例如,可能有一個模式表(“conv2d_with_something”, conv2d -> *):
def make_pattern(with_bias=True):
data = wildcard()
weight = wildcard()
conv = is_op(‘nn.conv2d’)(data, weight)
return wildcard()(conv)
在這種情況下,將獲得帶有的復合函數Composite=conv2d_with_something,但是不知道實際匹配的圖形。那就是PartitionedFromPattern起作用的地方。通過查看匹配圖是否為conv2d -> add或conv2d -> relu,可以知道是否PartitionedFromPattern為nn.conv2d_add_或nn.conv2d_nn.relu_。
將DNNL引入TVM:Relay圖轉換
利用上一步中的注釋規則,現在可以應用BYOCRelay傳遞列表,以將Relay圖從圖1轉換為圖4:
mod = create_relay_module_from_model() # Output: Figure 1
mod = transform.MergeComposite(pattern_table)(mod)
mod = transform.AnnotateTarget([“dnnl”])(mod) # Output: Figure 2
mod = transform.MergeCompilerRegions()(mod) # Output: Figure 3
mod = transform.PartitionGraph()(mod) # Output: Figure 4
可以看出,每個Relay傳遞都可以映射到在BYOC工作原理中引入的步驟。
將DNNL引入TVM:JSON代碼生成/Runtime
現在,實現將Relay圖序列化為JSON表示的DNNL代碼源,然后實現DNNL JSONRuntime以反序列化并執行該圖。如果嘗試實現一個代碼生成器來生成C兼容程序,則可能需要直接進入下一部分。
為了使DNNL JSON的代碼生成/運行在TVM就這個例子中工作,確保DNNL可以在機器上,并與建立TVMset(USE_DNNL_CODEGEN ON)中config.cmake。
DNNL代碼生成在中實現src/relay/backend/contrib/dnnl/codegen.cc。在此文件中以兩種形式實現了DNNLUSE_JSON_RUNTIME代碼生成,在跟蹤代碼時,可以專注于宏所覆蓋的部分。
首先使用TVM注冊API(L510),注冊代碼源。該注冊使TVM編譯引擎使用Compiler= 來分發Relay功能relay.ext.。然后,實現DNNL編譯器(L490)的入口函數。閱讀代碼段中嵌入的注釋以獲取詳細信息:
runtime::Module DNNLCompiler(const ObjectRef& ref) {
// “ref” should be the paritioned Relay function with kCompiler=dnnl.
CHECK(ref->IsInstance());
auto func = Downcast(ref);

// Get the function name as the symbol to match in runtime.
auto func_name = GetExtSymbol(func);

// Serialize the function to a JSON string (introduce later).
DNNLJSONSerializer serializer(func_name, func);
serializer.serialize();
std::string graph_json = serializer.GetJSON();

// The constant tensor names that have been bound to the module.
// All constant tensors will be serialzied along with the JSON graph
// when export_library is invoked.
auto params = serializer.GetParams();

// The function to create DNNL JSON runtime (introduce later).
const auto* pf = runtime::Registry::Get(“runtime.DNNLJSONRuntimeCreate”);
CHECK(pf != nullptr) << “Cannot find JSON runtime module to create”;

// Create a DNNL runtime module that can run the serialized function.
auto mod = (*pf)(func_name, graph_json, params);
return mod;
}
TVM_REGISTER_GLOBAL(“relay.ext.dnnl”).set_body_typed(DNNLCompiler);
注意,每個Runtime模塊僅負責一個Relay功能,這意味著可能在單個.so文件中包含多個DNNLRuntime模塊。
DNNL JSON序列化
接下來,實現DNNL JSON序列化器(L429)。從BYOC JSON代碼生成器(src / relay / backend / contrib / codegen_json / codegen_json.h)派生了它。DNNL JSON序列化程序中的特殊過程嘗試,將組合函數調用序列化為DNNL JSON Runtime,可以解釋的JSON節點。假設有一個與pattern匹配的復合函數dnnl.conv2d_relu,那么BYOC JSON代碼生成器將生成以下JSON節點:
{
op: “kernel”,
name: “dnnl.conv2d_relu”,
inputs: [[0, 0, 0], [1, 0, 0]],
attrs: {
PartitionedFromPattern: [“nn.conv2d_nn.relu_”],
shape: [1, 32, 14, 14]
}
}
問題在于,在Runtime仍然需要Conv2D屬性,例如padding和stride,但是BYOC JSON序列化器僅附加復合函數的屬性,而不附加主體算子。另一方面,定制的DNNL JSON序列化程序將第一個也是唯一的Conv2D的屬性附加到復合函數中,以生成以下JSON節點:
{
op: “kernel”,
name: “dnnl.conv2d_relu”,
inputs: [[0, 0, 0], [1, 0, 0]],
attrs: {
shape: [1, 32, 14, 14],
data_layout: [“NCHW”],
kernel_layout: [“OIHW”],
strides: [1, 1],
padding: [1, 1, 1, 1]
}
}
從DNNL JSON序列化器可以看出,可以自定義序列化器以生成JSON中的任何形式,只要JSON Runtime可以解釋它們即可。
DNNL JSON Runtime
然后,實現DNNL JSON Runtime以解釋和執行序列化的JSON圖。放在下面src/runtime/contrib/dnnl/dnnl_json_runtime.cc。
同樣,首先注冊兩個API來創建Runtime,以便可以在任何地方使用。在runtime.DNNLJSONRuntimeCreate被序列化后的上一部分中使用,并且runtime.module.loadbinary_dnnl_json裝載時也可以使用.so了。
// Create a DNNL JSON runtime to interpret and execute the given JSON graph.
runtime::Module DNNLJSONRuntimeCreate(String symbol_name, String graph_json,
const Array& const_names) {
auto n = make_object(symbol_name, graph_json, const_names);
return runtime::Module(n);
}
TVM_REGISTER_GLOBAL(“runtime.DNNLJSONRuntimeCreate”)
.set_body_typed(DNNLJSONRuntimeCreate);

TVM_REGISTER_GLOBAL(“runtime.module.loadbinary_dnnl_json”)
.set_body_typed(JSONRuntimeBase::LoadFromBinary);
現在,解釋DNNL JSON Runtime實現。基本的類結構為:
class DNNLJSONRuntime : public JSONRuntimeBase {
const char* type_key() const { return “dnnl_json”; }
void Init(const Array& consts) override {
// Initialize the DNNL graph engine.
BuildEngine();

// Setup constants entries for weights.
CHECK_EQ(consts.size(), const_idx_.size())<< "The number of input constants must match the number of required.";
SetupConstants(consts);

}

void Run() override {
// 1. Fill in the input buffers.
// 2. Invoke the engine through intepreting the stream.
// 3. Read and fill output buffers.
}
}
該Init功能是負責通過解釋JSON圖形字符串,建設DNNL引擎(見L93的BuildEngine),并填補了固定的權重,以相應的數據輸入緩沖區(SetupConstant在JSON運行基類來實現,需要調用它在Init)。注意,即使運行了多次推理,該函數也只會被調用一次。
接下來,Run函數(L64)首先將輸入張量(可能來自用戶輸入或恒定權重)寫入在構建DNNL引擎時初始化的相應DNNL存儲緩沖區。然后啟動DNNL引擎以執行JSON圖。最后,將DNNL輸出存儲緩沖區寫回到相應的輸出張量。
由于DNNL JSONRuntime中的其余實現都是DNNL特有的,不再細說。想強調一點,盡管DNNL JSONRuntime是一個很好的開始,但JSON Runtime可以完全自定義以滿足要求。
將DNNL帶到TVM:C源代碼生成
現在,讓實現DNNL代碼生成器,該代碼生成器生成C源代碼,該源代碼調用DNNL API來執行Relay圖。注意,如果嘗試實現一個代碼生成器,生成其它圖形表示形式(如JSON格式),則可能需要閱讀將DNNL帶到TVM:JSON代碼生成器/Runtime,并跳過本節。
為了能夠在TVM CODEGEN對這個例子的工作DNNL C源代碼,確保DNNL可以在機器上,并與建立TVMset(USE_DNNL_CODEGEN C_SRC)中config.cmake。
DNNL代碼生成在中實現src/relay/backend/contrib/dnnl/codegen.cc。由于在這個文件用于說明目的實現的代碼,生成DNNL兩種形式,可以專注于部分不被覆蓋USE_JSON_RUNTIME宏跟蹤代碼時。
首先,使用TVM注冊API(L510)注冊代碼源。該注冊使TVM編譯引擎使用Compiler= 來分發Relay功能relay.ext.。然后,實現DNNL編譯器的入口函數(L490):
runtime::Module DNNLCompiler(const ObjectRef& ref) {
DNNLModuleCodegen dnnl;
return dnnl.CreateCSourceModule(ref);
}
TVM_REGISTER_GLOBAL(“relay.ext.dnnl”).set_body_typed(DNNLCompiler);
注意,每個Runtime模塊僅負責一個Relay功能,這意味著可能在單個.so文件中包含多個DNNL Runtime模塊。
然后,在L362中派生CSourceModuleCodegenBase實施。而負責其它模塊級過程,如序列化的,只需要實現在所述DNNL代碼生成函數(L389):DNNLModuleCodegenCSourceModuleCodegenBaseCreateCSourceModule
runtime::Module CreateCSourceModule(const ObjectRef& ref) override {
// Include headers
// …skip…
code_stream_ << “#include <dnnl/dnnl_kernel.h>\n”;
// …skip…

// "ref" should be the paritioned Relay function with kCompiler=dnnl.
CHECK(ref->IsInstance<FunctionNode>());
auto res = GenDNNLFunc(Downcast<Function>(ref));// "code" is the generated C code with DNNL APIs.
std::string code = code_stream_.str();// "res" is a tuple of constant weights (symbols, values).
// All constant tensors will be serialzied along with the generated C code
// when export_library is invoked.
String sym = std::get<0>(res);
Array<String> variables = std::get<1>(res);// Create a CSource module with all above artifacts.
const auto* pf = runtime::Registry::Get("runtime.CSourceModuleCreate");
CHECK(pf != nullptr) << "Cannot find csource module to create the external runtime module";
return (*pf)(code, "c", sym, variables);

}
接下來,實現GenDNNLFunc(L365)來使用DNNL API生成可編譯的C代碼,如下所示。參閱嵌入的注釋,以獲取與TVM C源Runtime模塊兼容的功能接口的說明。
// The example Relay graph: conv2d -> add -> relu.
#include
#include
#include
#include
#include <tvm/runtime/c_runtime_api.h>
#include <tvm/runtime/container.h>
#include <tvm/runtime/packed_func.h>
#include <dlpack/dlpack.h>
#include <dnnl/dnnl_kernel.h>
using namespace tvm::runtime;
using namespace tvm::runtime::contrib;

// Execute the conv2d->add->relu graph with DNNL.
extern “C” void dnnl_0_(float* dnnl_0_i0, float* dnnl_0_i1,
float* dnnl_0_i2, float* out0) {
// Allocate intermediate buffers.
float* buf_0 = (float*)std::malloc(4 * 4608);
float* buf_1 = (float*)std::malloc(4 * 4608);
float* buf_2 = (float*)std::malloc(4 * 4608);

// Pre-implemented op-based DNNL functions.
dnnl_conv2d(dnnl_0_i0, dnnl_0_i1, buf_0, 1, 32, 14, 14, 32, 1, 0, 0, 3, 3, 1, 1);
dnnl_add(buf_0, dnnl_0_i2, buf_1, 1, 32, 12, 12);
dnnl_relu(buf_1, buf_2, 1, 32, 12, 12);

// Copy the final output to the corresponding buffer.
std::memcpy(out0, buf_2, 4 * 4608);
std::free(buf_0);
std::free(buf_1);
std::free(buf_2);
}

// The wrapper function with all arguments in DLTensor type.
extern “C” int dnnl_0_wrapper_(DLTensor* arg0,
DLTensor* arg1,
DLTensor* arg2,
DLTensor* out0) {

// Cast all DLTensor to primitive type buffers and invoke the above
// execution function.
dnnl_0_(static_cast<float*>(arg0->data),
static_cast<float*>(arg1->data),
static_cast<float*>(arg2->data),
static_cast<float*>(out0->data));
return 0;
}

// The TVM macro to generate TVM runtime compatible function “dnnl_0”
// from our generated “dnnl_0_wrapper_”.
TVM_DLL_EXPORT_TYPED_FUNC(dnnl_0, dnnl_0_wrapper_);
注意,預先實現的基于op的DNNL函數位于src / runtime / contrib / dnnl / dnnl.cc中。
由于本文中的其余實現src/relay/backend/contrib/dnnl/codegen.cc都過于DNNL而無法在本文中進行詳細介紹。主要思想是實現一個Relay圖訪問者(L138),訪問給定的Relay函數并生成上面的C代碼。只要代碼生成器能夠生成與TVM Runtime兼容的C代碼,就可以完全自定義代碼生成器以符合要求。
C源代碼編譯
可能已經注意到,輸出的DNNLCompiler是一個帶有生成的C代碼的文本格式的模塊,該模塊尚未被編譯gcc為可執行二進制文件。實際上,生成的C代碼將在用戶調用時進行編譯export_libray(mod),如以下代碼片段所示:
def update_lib(lib):
# Include the path of src/runtime/contrib/dnnl/dnnl.cc
test_dir = os.path.dirname(os.path.realpath(os.path.expanduser(file)))
source_dir = os.path.join(test_dir, “…”, “…”, “…”)
contrib_path = os.path.join(source_dir, “src”, “runtime”, “contrib”)

# Setup the gcc flag to compile DNNL code.
kwargs = {}
kwargs["options"] = ["-O2", "-std=c++14", "-I" + contrib_path]
tmp_path = util.tempdir()
lib_name = 'lib.so'
lib_path = tmp_path.relpath(lib_name)# The generated C code with DNNL APIs is compiled to a binary lib.so.
lib.export_library(lib_path, fcompile=False, **kwargs)# Load the lib.so back to a runtime module.
lib = runtime.load_module(lib_path)
return lib

with tvm.transform.PassContext(opt_level=3):
json, lib, param = relay.build(mod, target=target, params=params)
lib = update_lib(lib)
rt_mod = tvm.contrib.graph_runtime.create(json, lib, ctx)
將DNNL引入TVM:使用DNNL Codegen / Runtime構建TVM
最后,在構建TVM時創建cmake / modules / contrib / DNNL.cmake,包含DNNL代碼源。出于演示目的,DNNL代碼生成器在同一cmake文件中具有兩個實現。只能根據需要專注于其中之一。
在準備好cmake文件之后,現在用戶可以set(USE_DNNL_CODEGEN ON)在其中指定build/config.cmake啟用DNNL代碼生成。

總結

以上是生活随笔為你收集整理的TVM代码生成codegen的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久久美女 | 日韩av高潮 | 亚洲成人av免费 | 91九色pron| 99精品美女| 国产亚洲精品久久久久久网站 | 欧美另类tv | 亚洲激情影院 | 一区二区三区免费网站 | 日韩精品一区二区三区丰满 | 亚洲精品乱码久久久久 | 欧美一区日韩精品 | 国产91在线看 | 日韩精选在线观看 | 中日韩在线| 国产精品av免费在线观看 | 在线性视频日韩欧美 | 东方av在线免费观看 | 三级在线视频观看 | 国产精品视频最多的网站 | 亚洲一级黄色 | 午夜性色| 九九热在线观看视频 | 久久国产精品99久久久久 | 精品专区一区二区 | 色婷婷综合久久久中文字幕 | 激情婷婷色 | 成人a视频在线观看 | 香蕉97视频观看在线观看 | 久久亚洲影院 | www.久艹| 国产五月色婷婷六月丁香视频 | 天天色天天操天天爽 | 最新av在线播放 | 久久精品一二三区白丝高潮 | 免费看片网址 | 九九免费精品视频在线观看 | 天天爱天天舔 | 天天狠狠干| 久久电影国产免费久久电影 | 久草精品电影 | 99久久99久久精品国产片果冰 | 韩日av在线 | 国产精品永久久久久久久www | 精壮的侍卫呻吟h | 在线免费观看涩涩 | 久久这里只有精品久久 | 日韩欧美一区二区在线 | 久久视频在线观看中文字幕 | 久久精品久久国产 | 欧美日本不卡视频 | 日韩超碰 | 亚洲免费成人 | 国产亚洲精品美女久久 | 国产在线观看网站 | 日韩mv欧美mv国产精品 | 天天干天天玩天天操 | 久久人91精品久久久久久不卡 | 成年人在线观看免费视频 | 日本中文字幕高清 | 黄色网址中文字幕 | 亚洲免费精品一区二区 | www.夜夜干.com | 成人午夜影视 | 婷婷丁香视频 | www.日本色| 欧美一级特黄aaaaaa大片在线观看 | 婷婷久月| 成人网页在线免费观看 | 99视频精品 | 亚洲精品一区二区网址 | 成人观看 | av免费电影在线观看 | 99久久精品免费 | 五月综合激情网 | 日韩午夜剧场 | 色婷婷导航 | 天天躁天天躁天天躁婷 | 欧美在线18 | 在线观看黄色免费视频 | 在线观看国产高清视频 | 在线中文字母电影观看 | 成人免费一级 | 亚洲视频99 | 国产免费a| 亚洲精品理论 | 2019精品手机国产品在线 | 久久久高清免费视频 | 国产精品热 | 制服丝袜一区二区 | 成人在线观看免费 | 二区三区中文字幕 | 99精品欧美一区二区蜜桃免费 | 成人aaa毛片| 91亚洲综合| 久久国产免费看 | 2021久久 | 精品一区二区在线免费观看 | 国产精品18久久久久白浆 | 日韩大陆欧美高清视频区 | 91精品毛片 | 蜜臀av性久久久久蜜臀av | 亚洲精品字幕在线 | 亚洲综合在线一区二区三区 | av福利第一导航 | 亚洲最大色 | 日韩精品一区在线播放 | 少妇精品久久久一区二区免费 | 欧美日韩在线免费观看 | 国产一区二区在线观看免费 | 操操综合网 | 久久福利国产 | 久久国产高清视频 | 亚洲欧美va | 久久国产精品视频 | av中文字幕网址 | 国产成人一二三 | 一区精品久久 | 五月婷婷一区二区三区 | 在线观看免费 | 亚洲首页 | 黄色国产在线观看 | 国产精品男女 | 欧美精品一区二区在线播放 | 国产一区二区手机在线观看 | 97在线观看免费 | 91黄色成人 | 国产高清永久免费 | 日韩激情在线视频 | 久久免费资源 | 欧美色图狠狠干 | 国产福利91精品一区 | 在线va视频 | 成人午夜片av在线看 | 天天鲁天天干天天射 | 精品电影一区二区 | 精品久久免费 | 永久中文字幕 | 最近2019好看的中文字幕免费 | 成年人毛片在线观看 | 天天干天天碰 | 国产在线97 | 国产精品av电影 | 中文字幕亚洲精品在线观看 | 久久综合色综合88 | 激情中文在线 | 亚洲jizzjizz日本少妇 | av中文资源在线 | 99精品视频在线播放免费 | 999久久久久久久久6666 | 久久国产精品99久久久久久丝袜 | aaa免费毛片 | 成人午夜免费剧场 | 日韩高清在线一区二区三区 | 国产在线精品一区二区三区 | 国产在线探花 | 日韩有码专区 | 国产麻豆电影在线观看 | 中文字幕在线网址 | 成人午夜av电影 | 欧美成人h版电影 | 精品国产乱码久久久久久久 | 成人av在线看 | 午夜黄色一级片 | 亚洲激情中文 | 日韩成人精品 | 亚洲jizzjizz日本少妇 | 日本丰满少妇免费一区 | 五月婷婷中文网 | 特级黄录像视频 | av在线观 | 亚洲高清在线观看视频 | 手机av在线网站 | 日韩av电影中文字幕在线观看 | 中文字幕在线播放视频 | 亚洲精品tv久久久久久久久久 | 国产色拍拍拍拍在线精品 | av一区二区三区在线播放 | 在线看欧美| wwwav视频 | 欧美国产一区在线 | 亚洲精品成人av在线 | 亚洲国产成人精品在线观看 | 日韩动漫免费观看高清完整版在线观看 | 国产一级二级av | 色天天久久 | 一区 二区 精品 | av高清一区 | 在线观看免费观看在线91 | 波多野结衣亚洲一区二区 | 丁香六月久久综合狠狠色 | 97视频在线观看视频免费视频 | 91三级在线观看 | 国产成人久久av免费高清密臂 | 黄色一级网 | 免费碰碰 | 九九热在线视频 | www.99av| 黄色软件视频网站 | 欧美一二三四在线 | 久久久96| 久久综合狠狠综合久久激情 | 国产小视频国产精品 | 九九免费观看全部免费视频 | 中文在线8资源库 | 日韩综合一区二区 | 午夜精品999 | 国产玖玖视频 | 97电影手机版 | 亚洲免费av网站 | 国产精品理论视频 | 国产免费叼嘿网站免费 | 国产又粗又硬又爽视频 | 亚洲伊人婷婷 | 中文乱幕日产无线码1区 | 干干日日| 欧洲av不卡 | 欧美俄罗斯性视频 | 亚洲国产日韩精品 | av+在线播放在线播放 | av丝袜天堂| 欧美一区二区在线免费观看 | 国产视频久久久久 | 亚洲视频 在线观看 | 国产色影院 | 国产精品视频全国免费观看 | 黄av资源 | 日本中文在线播放 | 天天操综合 | 天天爱天天射天天干天天 | 婷婷色在线 | 66av99精品福利视频在线 | 国产精品一区二区精品视频免费看 | 美女网站视频免费黄 | 欧美日韩精品久久久 | 国产精品自产拍在线观看中文 | 久久精品国产99国产 | 成人免费观看网址 | www.成人久久 | 91麻豆精品国产91久久久更新时间 | 亚洲国产人午在线一二区 | 在线视频中文字幕一区 | 欧美一二三区在线播放 | 国产高清视频免费在线观看 | 中文字幕一区二区三 | 丁香六月欧美 | 麻豆视频国产精品 | 亚洲 欧美 精品 | 日韩网站免费观看 | 久久免费视频4 | 国内久久精品视频 | 国产亚洲成av片在线观看 | 成人在线视频免费 | 国产免费中文字幕 | 在线看片91 | www.亚洲激情.com | 久久av一区二区三区亚洲 | 91精品国自产在线观看欧美 | 精品久久免费 | sm免费xx网站| 天天爱天天操天天爽 | 久久高清片 | 丁香资源影视免费观看 | 久久久精品免费观看 | 国产精品女教师 | 亚洲激情综合网 | 亚洲1区 在线 | 天天看天天干天天操 | 日日日网 | 美女免费视频一区二区 | 日韩视频一 | 久久久精品网站 | 欧美日韩中文字幕视频 | 欧美与欧洲交xxxx免费观看 | 日本h在线播放 | 三级av免费观看 | av天天干| 日韩二区在线播放 | 丰满少妇久久久 | 最新中文字幕在线资源 | 日日碰狠狠添天天爽超碰97久久 | 成人久久久久久久久 | 麻豆91在线 | 操操日日 | 四虎影视www | 国产精品美女久久久久久久 | 2000xxx影视 | 国内精品久久久久国产 | 欧美精品视 | 在线观看日韩专区 | 97视频在线免费播放 | 麻豆视频在线观看免费 | 国产精品少妇 | 久久免费大片 | 国产一级片免费视频 | 深爱婷婷激情 | 日韩av中文字幕在线免费观看 | 一区二区精 | 91看片淫黄大片在线播放 | 日韩一区二区三区观看 | 在线导航av| 日韩草比 | 日韩二级毛片 | 国产黄影院色大全免费 | 久久久国产一区二区三区四区小说 | 狠狠地操 | 精品一区三区 | 深夜福利视频在线观看 | 97av在线视频免费播放 | 亚洲精品一区二区三区在线观看 | 一级久久精品 | 日本最新高清不卡中文字幕 | 久久婷婷综合激情 | 欧美 高跟鞋交 xxxxhd | 欧美精品在线观看一区 | 国产免费影院 | 中文字幕丝袜一区二区 | 亚洲视频一区二区三区在线观看 | 狠狠干免费 | 国产精品人成电影在线观看 | 成年人在线电影 | 日本99久久 | 992tv人人网tv亚洲精品 | av不卡免费在线观看 | 99精品一级欧美片免费播放 | 天天av综合网 | 日韩精品视 | 中文在线√天堂 | 久久久噜噜噜久久久 | 欧美日韩成人一区 | 在线观看视频99 | 亚洲另类交 | 亚洲精品在线播放视频 | 激情网五月天 | 黄免费网站 | 在线观看免费av网站 | 亚洲区另类春色综合小说 | 亚洲91精品在线观看 | 久久国产精品99久久久久久丝袜 | 国产精品v欧美精品v日韩 | 91免费网址 | 天天干天天拍天天操天天拍 | 中文字幕在线观看91 | 色天天综合久久久久综合片 | 精品久久一区二区三区 | 亚洲精品xx | wwwwwww黄| 免费视频一级片 | 午夜精品久久久久久久99水蜜桃 | 激情在线网站 | 在线视频精品播放 | 久久99国产精品自在自在app | 91麻豆操 | 精品久久久久一区二区国产 | 在线视频福利 | 丁香婷婷激情 | 91精品在线视频观看 | 日韩综合精品 | 久久影院午夜论 | 福利片视频区 | 国产精品一区在线观看 | 国产精品久久久久亚洲影视 | 精品高清美女精品国产区 | 免费男女羞羞的视频网站中文字幕 | 国产精品a久久 | 国产午夜精品视频 | 国产亚洲欧美精品久久久久久 | 91完整版| 日韩精选在线 | av经典在线 | 黄色电影在线免费观看 | 99色精品视频 | 日本久久久影视 | 日韩久久久久久久久久 | 日韩在线视频免费播放 | 婷婷丁香色| 亚洲视频一级 | www在线观看视频 | 成人va天堂 | 美女免费视频一区二区 | 日韩免费中文 | 日韩小视频| 欧美亚洲另类在线视频 | 91视频在线免费下载 | 亚洲狠狠 | 激情综合网五月激情 | 99色在线观看 | 77国产精品 | 国产精品久久中文字幕 | 久久久免费精品国产一区二区 | 亚洲精品乱码白浆高清久久久久久 | 日韩视频www | 亚洲精品女人久久久 | 国产精品高清一区二区三区 | 99在线免费观看 | 911久久香蕉国产线看观看 | 91亚洲国产 | 99精品免费| 嫩草av影院 | 亚洲精品国偷自产在线91正片 | 欧美精品乱码99久久影院 | 久久精品专区 | 色天天综合久久久久综合片 | 人人看看人人 | 国产精品12 | 欧美成人黄色片 | 最近最新中文字幕 | 嫩草伊人久久精品少妇av | 日韩精品一区二区三区不卡 | 久久草草影视免费网 | 国产免费亚洲高清 | 日韩精品免费在线播放 | 国产精彩视频 | 日本在线中文在线 | 丁香久久 | 色婷婷 亚洲 | 国产一区二区在线免费播放 | 久久精品日本啪啪涩涩 | 人操人| 在线亚洲欧美视频 | 日本三级中文字幕在线观看 | 一区三区视频在线观看 | 国产理论在线 | 99中文字幕| 日韩免费视频线观看 | 国产精品区在线观看 | 另类五月激情 | 丁香五月缴情综合网 | 视频在线日韩 | av免费在线观看网站 | 欧美日韩综合在线 | 久草在线视频免费资源观看 | 天天干天天做天天操 | 亚洲aⅴ久久精品 | 亚洲精品无 | 97在线观看免费视频 | 五月天综合网站 | 久久综合色婷婷 | 成人网在线免费视频 | 伊人电影天堂 | 精品999在线 | 欧美日韩xx | 成年人网站免费在线观看 | 高清久久久久久 | 91在线观 | 亚洲男男gaygay无套同网址 | 亚洲国产精品久久 | 片黄色毛片黄色毛片 | 国产999精品久久久久久麻豆 | 国产视频网站在线观看 | 亚洲日本欧美 | 国产精品 日韩精品 | 中文字幕丝袜 | 成人在线播放视频 | 欧美日韩在线视频免费 | 日韩精品在线播放 | 国产一区二区在线播放 | 日韩精品 在线视频 | 91视频免费视频 | 在线观看中文字幕 | 日日爽| 日韩精品在线视频免费观看 | 国产 日韩 中文字幕 | 国产一区二区三区免费观看视频 | 国产视频一区二区在线 | 国产精品久久久久久一区二区 | 久久久久二区 | 超级碰碰视频 | av大全免费在线观看 | 中文字幕免费观看视频 | 欧美一级欧美一级 | 国产超碰在线观看 | 99精品热| 久久国产精品免费观看 | 91精品国自产在线偷拍蜜桃 | 日韩福利在线观看 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 日本在线视频一区二区三区 | 欧美黄色成人 | 成人久久电影 | 精品在线播放 | 一区二区欧美日韩 | 精品一区二区日韩 | 欧美视频在线观看免费网址 | 久久精品视频中文字幕 | 欧美日韩在线视频免费 | 精品综合久久 | 久久久麻豆精品一区二区 | 在线观看911视频 | 亚洲国产精品免费 | 狠狠色伊人亚洲综合网站色 | 天天综合天天综合 | 日韩电影在线一区二区 | 永久免费的av电影 | 中文字幕在线观看免费高清完整版 | 国产成人精品一区二区三区免费 | 色综合婷婷| 久草在线视频资源 | 在线天堂视频 | 看毛片的网址 | 黄色av大片 | 亚洲人成免费 | 免费一级片久久 | 在线免费91| 久香蕉 | 欧美一区二区伦理片 | 欧美9999 | 激情网五月天 | 久久,天天综合 | 99视频精品免费观看, | av电影 一区二区 | 亚洲精品在线观看中文字幕 | 激情欧美一区二区三区免费看 | 一本色道久久综合亚洲二区三区 | 精品久久久久久亚洲综合网 | 色婷五月 | 99综合电影在线视频 | 毛片1000部免费看 | 婷婷六月在线 | 韩国av一区二区三区在线观看 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产 一区二区三区 在线 | 国内精品久久久久久久久久 | 国产在线不卡一区 | 天天插天天射 | 一级做a爱片性色毛片www | 日本久久综合视频 | 国产免费观看av | 97视频在线免费播放 | 国产日本在线观看 | 国产精品美女在线观看 | 国产精品1区 | 免费看国产黄色 | 蜜臀av夜夜澡人人爽人人 | 91精品久久久久久久久 | 国产精品手机视频 | 国产专区在线视频 | 青草草在线 | 在线观看视频一区二区三区 | 玖玖在线视频观看 | 欧美日韩在线精品一区二区 | 九九九热精品免费视频观看 | 国产成人一级 | 在线色亚洲 | 亚洲成成品网站 | 黄色av网站在线观看 | 久久深夜福利免费观看 | 国产精品美女www爽爽爽视频 | 色婷婷久久一区二区 | 亚洲综合色站 | 成人av电影免费在线观看 | 国产午夜在线观看 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 在线中文字幕电影 | 91在线永久 | 麻豆传媒视频在线免费观看 | 天天操天天干天天插 | 亚洲片在线 | 九九久久影院 | 一区二区三区电影在线播 | av线上看| 成年人免费av | 亚洲精品久久久久久国 | 夜夜夜草 | 波多野结衣在线视频一区 | 91九色蝌蚪| 国产麻豆果冻传媒在线观看 | 色干干 | 一区中文字幕电影 | 91中文在线 | 最近中文字幕视频完整版 | 黄色.com| 精品999在线 | 精品一区精品二区 | 免费在线观看黄 | 国产一级a毛片视频爆浆 | 国产专区在线 | 色视频在线 | www亚洲国产 | 久久这里只有精品23 | 久久精品—区二区三区 | 久久久免费视频播放 | 四虎在线视频免费观看 | 97成人精品视频在线播放 | 99久久99视频只有精品 | 色婷婷五 | 欧美一级乱黄 | 国产91小视频 | 亚洲第一中文网 | 狠狠操狠狠干天天操 | 国产欧美综合在线观看 | 国产精品一区二区三区久久 | 国产精品18久久久久久久久久久久 | 亚洲永久字幕 | 99在线热播| 亚洲乱码久久 | 在线观看黄网站 | 久久久首页 | 99热这里只有精品1 av中文字幕日韩 | 99在线视频播放 | www.狠狠插.com| 成人免费在线看片 | 国产精品久久久久久久毛片 | 免费午夜网站 | 国产精品久久久精品 | 成年人电影免费看 | 亚洲成人av一区二区 | 国产涩涩在线观看 | 天天干天天拍 | 日韩高清av | av电影一区 | 黄色av免费在线 | 国产精品中文字幕在线观看 | 奇米网777 | 免费看成人片 | 俺要去色综合狠狠 | 91综合视频在线观看 | 欧美日韩在线观看不卡 | 天堂黄色片| 久久国产精品视频免费看 | 国产色啪| 欧美一级专区免费大片 | 午夜免费视频网站 | 日韩在线免费播放 | 91精品电影 | 91禁在线观看 | 色综合五月 | 99这里只有久久精品视频 | 亚洲精品短视频 | 91福利视频一区 | 久操综合| 久久精品网站视频 | 美州a亚洲一视本频v色道 | 人人超在线公开视频 | 亚洲va欧美va人人爽 | 在线色亚洲| 国产精品中文字幕在线播放 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 黄色一级大片在线免费看国产一 | 国语自产偷拍精品视频偷 | 国产喷水在线 | 色橹橹欧美在线观看视频高清 | 中文字幕在线观看第三页 | 成人免费大片黄在线播放 | 激情 婷婷 | 欧美日韩精品免费观看视频 | 摸bbb搡bbb搡bbbb | 天天插天天狠 | 欧美少妇xxxxxx | 亚洲三级黄 | 麻豆传媒视频在线 | 国产成人在线观看免费 | 人人搞人人干 | 亚洲国产精品视频 | 高清av影院| a级免费观看 | 国产黄网站在线观看 | 中文字幕在线观看国产 | 欧美国产日韩中文 | 99久久er热在这里只有精品66 | 新版资源中文在线观看 | 在线中文日韩 | 视频直播国产精品 | 亚洲成人精品久久 | 91视频麻豆视频 | 日韩欧美高清免费 | 国产99一区视频免费 | 国产激情小视频在线观看 | 中文字幕一区二区在线观看 | 欧美激情视频一区二区三区免费 | 五月婷在线视频 | 日韩精品免费 | 91精品视频在线免费观看 | 久久久网站 | 在线精品在线 | 久久日韩精品 | 久久精品亚洲综合专区 | 久久成人在线视频 | 亚洲国产精彩中文乱码av | 日本激情动作片免费看 | 日日爱999 | 中文字幕久久精品一区 | 美女黄频免费 | 丁香五月缴情综合网 | 国产精品麻豆欧美日韩ww | av黄色影院| 国产在线观看高清视频 | 久草热久草视频 | 成人h在线观看 | 国产精品乱码久久久久 | 亚洲精品国产麻豆 | 国产人免费人成免费视频 | 国产精品欧美 | 国产午夜亚洲精品 | 亚洲黄色一级大片 | 狠狠色伊人亚洲综合网站色 | 日韩有码欧美 | 制服丝袜一区二区 | 国产区精品 | av高清在线观看 | 欧美日本不卡高清 | 精品久久久久久久久久久久 | 一性一交视频 | 欧美久久久久久久久久久久 | 中文字幕中文 | 欧美另类高潮 | 国产视频不卡一区 | 亚洲天堂网视频在线观看 | 麻豆久久 | 久久艹久久 | 狠狠干美女 | 久久精品中文视频 | 久久亚洲二区 | 高清久久久 | 在线观看激情av | 国产精品入口久久 | va视频在线 | 久99久视频 | 91私密视频 | 91九色视频在线观看 | 欧美性直播 | 91久久丝袜国产露脸动漫 | www.久久久.com | 久久久www免费电影网 | 国产精成人品免费观看 | 精品国产亚洲日本 | 日韩中文在线播放 | 丁香婷婷综合激情五月色 | 激情av一区二区 | 99中文字幕视频 | 日韩影视在线 | 亚洲欧美国内爽妇网 | 日韩电影一区二区三区在线观看 | 中文字幕丝袜制服 | 亚洲欧美视屏 | 国内一级片在线观看 | 午夜黄色影院 | 黄色大全在线观看 | 欧美在线视频一区二区三区 | 视频在线播放国产 | 久久国产影视 | 日韩视频一区二区三区在线播放免费观看 | 国产色影院 | 色婷av| 国产精品精品久久久久久 | 婷婷丁香七月 | 亚洲黄色软件 | 日本黄色免费电影网站 | 久久精品日产第一区二区三区乱码 | 精品国产伦一区二区三区观看说明 | www.99热精品 | 日日操日日| av品善网 | 天天干天天草 | 91久色蝌蚪 | 国产精品一区二区在线观看 | 一本一本久久a久久精品综合妖精 | 三级在线视频播放 | 天天草天天干 | 国产精品大片在线观看 | 久久免费久久 | 午夜精品一区二区三区可下载 | 青青河边草免费直播 | 欧美日韩不卡一区二区三区 | 亚洲天天在线日亚洲洲精 | 欧美日韩视频在线播放 | 亚洲精品高清视频在线观看 | 97人人添人澡人人爽超碰动图 | 97av色 | 日韩精品黄 | 欧美在线久久 | 91精品一区二区在线观看 | 欧美91片| 一区二区视频播放 | 色香网| 521色香蕉网站在线观看 | 黄色一区三区 | 欧美大荫蒂xxx | 亚洲一区二区观看 | 激情五月激情综合网 | 网站你懂的 | av女优中文字幕在线观看 | 久久精品视频在线免费观看 | 成人久久影院 | 91激情在线视频 | 成人久久国产 | 国产手机视频在线播放 | 久久久久久久久久久影院 | 国产精品麻豆视频 | 久久久久欧美精品 | 麻豆小视频在线观看 | 天天操天天干天天爽 | 九九九国产 | 亚洲午夜久久久久久久久久久 | 91看片成人| www免费视频com━ | 中文字幕在线一区二区三区 | 丁香六月婷婷开心婷婷网 | 色婷婷狠狠18 | 天天舔天天搞 | 97在线观看视频 | av在线观| 中文字幕黄网 | 欧美精品一二三 | 国内精品在线观看视频 | 99成人精品 | 色激情在线 | 欧美精品三级 | 成人国产电影在线观看 | 91看片网址 | 99国产视频 | 成片免费观看视频大全 | 91 中文字幕| 欧美日韩一级在线 | 亚洲激情小视频 | 亚洲精品国偷自产在线91正片 | www.久久久.cum | 97超在线视频 | 黄色毛片视频免费观看中文 | 天天干天天操天天干 | 奇米先锋 | 日韩欧美在线高清 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 天天摸日日摸人人看 | 久久免费毛片视频 | 久久免费视频8 | 久久99国产综合精品免费 | 亚洲自拍av在线 | 色先锋av资源中文字幕 | 91最新地址永久入口 | 婷婷丁香六月 | 亚洲精品 在线视频 | 亚洲激情在线观看 | 亚洲国产欧美在线看片xxoo | 国产精品美女久久久久久免费 | 国产麻豆剧传媒免费观看 | 91精品伦理| 天天射天天干天天爽 | 国产美女精品人人做人人爽 | 中文字幕123区 | 欧美一二在线 | 综合色站导航 | 国产日韩精品一区二区三区在线 | 亚洲精品在线视频播放 | 精品伦理一区二区三区 | 国产青草视频在线观看 | 国产精品久久久久9999吃药 | 人人艹人人 | 亚洲狠狠干 | 久久在线免费观看 | 香蕉网站在线观看 | 久久精品久久久久电影 | 欧美日韩免费看 | 成 人 黄 色 视频 免费观看 | 日韩一区在线播放 | 天天插日日射 | 亚洲精品在线一区二区 | 99久久爱| 视频一区在线播放 | 亚洲国产日韩欧美 | 欧美日韩天堂 | 中文国产成人精品久久一 | 久久久久黄 | 美女网站视频免费黄 | 欧美天堂视频在线 | www黄免费| 97影视| 日韩动漫免费观看高清完整版在线观看 | 国内精品久久久久影院一蜜桃 | 91视频传媒| 又黄又爽的免费高潮视频 | 天天射天天干 | 草草草影院 | 狠狠色丁香久久婷婷综合_中 | 97视频在线观看视频免费视频 | 久久电影色| 国产毛片在线 | 精品99免费 | 欧美另类激情 | 午夜精品一区二区三区视频免费看 | 成人av在线资源 | 免费av网址在线观看 | 国偷自产中文字幕亚洲手机在线 | 91福利视频免费观看 | 国产黄色片免费看 | 久久综合日 | 狠狠躁天天躁综合网 | 成人一区二区三区在线 | 日韩久久一区 | 国产成人精品亚洲精品 | 99精品欧美一区二区三区 | 黄色在线观看污 | 97超碰人人模人人人爽人人爱 | 久草在线视频免费资源观看 | 午夜视频免费在线观看 | 午夜精品一区二区三区可下载 | 国产精品久久久久久一二三四五 | 久久欧美综合 | 日韩av不卡在线观看 | 成年人在线观看网站 | 久久久黄色 | 日本激情视频中文字幕 | 中文字幕在线观看播放 | 国产爽视频 | 日韩免费成人av | 又湿又紧又大又爽a视频国产 | 很黄很污的视频网站 | 超碰在线观看97 | 久久不射电影院 | 日韩网站在线播放 | 99热在线免费观看 | 国产精品 国内视频 | 国产99久久九九精品免费 | 欧美视频18 | 日韩成人黄色 | 天天综合网久久综合网 | 久久国产网站 | 久久区二区 | 69精品久久 | 久久天天操 | 国产高清免费视频 | 欧美极品xxxxx| 天天草天天干天天 | 天天·日日日干 | 激情丁香| 91成人在线观看喷潮 | 99色亚洲| 日韩一级片观看 | 国内久久久久 | 国产精品av久久久久久无 | 国产精品一区二区三区99 | 国产成人精品久久二区二区 | 亚洲精品中文在线观看 | 天堂av官网| av不卡中文 | 日女人电影 | 77国产精品 | 色中文字幕在线观看 | 日韩一区二区三区在线观看 | 一区二区三区中文字幕在线 | 97人人网| 97国产超碰| 青青草国产精品 | 免费能看的黄色片 | 国产精品免费久久久久影院仙踪林 | 九九视频网站 | 中文字幕资源站 | 久草在线免费播放 | 中文字幕字幕中文 | 欧美少妇xxxxxx | 久久精品视频在线免费观看 | www.超碰97.com | 国产香蕉久久精品综合网 | av免费片| 在线观看中文字幕亚洲 | 国产精品自产拍在线观看网站 | www.五月天 | 精油按摩av | 蜜臀aⅴ国产精品久久久国产 | 亚洲综合欧美激情 | 超碰人人99 | 亚洲黄色大片 | 日韩色在线观看 | 中文字幕 影院 | 亚洲国产成人在线观看 | 日韩欧美91 | 亚洲天天摸日日摸天天欢 | 国产高清在线免费 | 黄在线免费观看 | 欧美精品黑人性xxxx | 色婷婷狠狠18 | 91在线免费观看国产 | 亚洲91网站 | 久久精品超碰 | 在线免费黄色av | 国产在线观看高清视频 | 97超碰在线免费观看 | 在线国产黄色 | 在线观看视频国产 | av官网在线 | 日本黄色大片儿 | 免费福利小视频 | 欧美日韩在线免费观看视频 | 2021国产在线视频 | 成人免费观看大片 | 六月天综合网 | 欧美在线视频第一页 | 久久久久久久久久久综合 | 国产剧情一区二区在线观看 | 香蕉视频18| 日韩理论电影在线 | 91av社区| 日韩高清一 | 日本在线中文在线 | 日韩成人在线一区二区 | 五月婷婷在线观看视频 | 久久久久久久久网站 | 久久免费一级片 |