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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Intro OpenCL Tutorial

發布時間:2023/12/13 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Intro OpenCL Tutorial 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Benedict R. Gaster, AMD Architect, OpenCL?

OpenCL? is a young technology, and, while a specification has been published (www.khronos.org/registry/cl/), there are currently few documents that provide a basic introduction with examples. This article helps make OpenCL? easier to understand and implement.

Note that:

  • I work at AMD, and, as such, I will test all example code on our implementation for both Windows? and Linux?; however, my intention is to illustrate the use of OpenCL? regardless of platform. All examples are written in pure OpenCL? and should run equally well on any implementation.
  • I have done my best to provide examples that work out-of-the-box on non-AMD implementations of OpenCL?, but I will not be testing them on non-AMD implementations; therefore, it is possible that an example might not work as expected on such systems. If this is the case, please let me know via our?OpenCL? forum, and I will do my best to rectify the code and publish an update.

The following “Hello World” tutorial provides a simple introduction to OpenCL?. I hope to follow up this first tutorial with additional ones covering topics such as:

  • Using platform and device layers to build robust OpenCL?
  • Program compilation and kernel objects
  • Managing buffers
  • Kernel execution
  • Kernel programming – basics
  • Kernel programming – synchronization
  • Matrix multiply – a case study
  • Kernel programming – built-ins

The “Hello World” program in OpenCL?

Here are some notes of caution on how the OpenCL? samples are written:

  • OpenCL? specifies a host API that is defined to be compatible with C89 and does not make any mention of C++ or other programming language bindings. Currently, there are several efforts to develop bindings for other languages (see the links at the end of this article), and, specifically, there has been a strong push to develop?C++ bindings. In this and subsequent tutorials, I use the C++ bindings exclusively and describe OpenCL? in these terms. See the OpenCL? 1.0 specification for the corresponding C API.Alternatively, you can view the source for the C++ bindings to see what underlying OpenCL? function is used, and with what arguments by the particular C++ binding.
  • OpenCL? defines a C-like language for programming compute device programs. These programs are passed to the OpenCL? runtime via API calls expecting values of type?char *. Often, it is convenient to keep these programs in separate source files. For this and subsequent tutorials, I assume the device programs are stored in files with names of the form?name_kernels.cl, where?name?varies, depending on the context, but the suffix?_kernels.cl?does not. The corresponding device programs are loaded at runtime and passed to the OpenCL? API. There are many alternative approaches to this; this one is chosen for readability.

For this first OpenCL? program, we start with the source for the host application.

Header files

Just like any other external API used in C++, you must include a header file when using the OpenCL? API. Usually, this is in the directory?CL?within the primary include directory. For the C++ bindings we have (replace the straight C API with?cl.h):

  • #include <utility>
  • #define __NO_STD_VECTOR // Use cl::vector instead of STL version
  • #include <CL/cl.hpp>
  • For our program, we use a small number of additional C++ headers, which are agnostic to OpenCL?.

  • #include <cstdio>
  • #include <cstdlib>
  • #include <fstream>
  • #include <iostream>
  • #include <string>
  • #include <iterator>
  • As we will dynamically request an OpenCL? device to return the “Hello World\n” string, we define it as a constant to use in calculations.

  • const std::string hw("Hello World\n");
  • Errors

    A common property of most OpenCL? API calls is that they either return an error code (type?cl_int) as the result of the function itself, or they store the error code at a location passed by the user as a parameter to the call. As with any API call that can fail, it is important, for the application to check its behavior correctly in the case of error. For the most part we will not concern ourselves with recovering from an error; for simplicity, we define a function,?checkErr, to see that a certain call has completed successfully. OpenCL? returns the value?CL_SUCCESS?in this case. If it is not, it outputs a user message and exits; otherwise, it simply returns.

  • inline void
  • checkErr(cl_int err, const char * name)
  • {
  • if (err != CL_SUCCESS) {
  • std::cerr << "ERROR: " << name
  • << " (" << err << ")" << std::endl;
  • exit(EXIT_FAILURE);
  • }
  • }
  • A common paradigm for error handling in C++ is through the use of exceptions, and the OpenCL? C++ bindings provide just such an interface. A later tutorial will cover the use of exceptions and other optional features provided by the C++ bindings. For now, let’s look at the one remaining function, “main,” necessary for our first OpenCL? application.

    OpenCL? Contexts

    The first step to initializing and using OpenCL? is to create a?context. The rest of the OpenCL? work (creating devices and memory, compiling and running programs) is performed within this?context. A?context?can have a number of associated devices (for example, CPU or GPU devices), and, within a?context, OpenCL? guarantees a relaxed memory consistency between devices. We will look at this in detail in a later tutorial; for now, we use a single device,?CL_DEVICE_TYPE_CPU, for the CPU device. We could have used?CL_DEVICE_TYPE_GPU?or some other support device type, assuming that the OpenCL? implementation supports that device. But before we can create a?context?we must first queue the OpenCL runtime to determine which platforms, i.e. different vendor’s OpenCL implementations, are present. The classcl::Platform?provides the static method cl::Platform::get for this and returns a list of platforms. For now we select the first platform and use this to create a?context. The constructor?cl::Context?should be successful and, in this case, the value of?err?is?CL_SUCCESS.

  • int
  • main(void)
  • {
  • cl_int err;
  • cl::vector< cl::Platform > platformList;
  • cl::Platform::get(&platformList);
  • checkErr(platformList.size()!=0 ? CL_SUCCESS : -1, "cl::Platform::get");
  • std::cerr << "Platform number is: " << platformList.size() << std::endl;std::string platformVendor;
  • platformList[0].getInfo((cl_platform_info)CL_PLATFORM_VENDOR, &platformVendor);
  • std::cerr << "Platform is by: " << platformVendor << "\n";
  • cl_context_properties cprops[3] =
  • {CL_CONTEXT_PLATFORM, (cl_context_properties)(platformList[0])(), 0};cl::Context context(
  • CL_DEVICE_TYPE_CPU,
  • cprops,
  • NULL,
  • NULL,
  • &err);
  • checkErr(err, "Conext::Context()");
  • Before delving into compute devices, where the ‘real’ work happens, we first allocate an OpenCL? buffer to hold the result of the kernel that will be run on the device, i.e. the string “Hello World\n.” For now we simply allocate some memory on the host and request that OpenCL? use this memory directly, passing the flagCL_MEM_USE_HOST_PTR, when creating the buffer.

  • char * outH = new char[hw.length()+1];
  • cl::Buffer outCL(
  • context,
  • CL_MEM_WRITE_ONLY | CL_MEM_USE_HOST_PTR,
  • hw.length()+1,
  • outH,
  • &err);
  • checkErr(err, "Buffer::Buffer()");
  • ?

    OpenCL??Devices

    In OpenCL? many operations are performed with respect to a given context. For example, buffers (1D regions of memory) and images (2D and 3D regions of memory) allocation are all context operations. But there are also device specific operations. For example, program compilation and kernel execution are on a per device basis, and for these a specific device handle is required. So how do we obtain a handle for a device? We simply query a context for it. OpenCL? provides the ability to queue information about particular objects, and using the C++ API it comes in the form of?object.getInfo<CL_OBJECT_QUERY>(). In the specific case of getting the device from a context:

  • cl::vector<cl::Device> devices;
  • devices = context.getInfo<CL_CONTEXT_DEVICES>();
  • checkErr(
  • devices.size() > 0 ? CL_SUCCESS : -1, "devices.size() > 0");
  • Now that we have the list of associated devices for a context, in this case a single CPU device, we need to load and build the compute program (the program we intend to run on the device, or more generally: devices). The first few lines of the following code simply load the OpenCL? device program from disk, convert it to a string, and create a?cl::Program::Sources?object using the helper constructor. Given an object of type?cl::Program::Sources?a?cl::Program, an object is created and associated with a context, then built for a particular set of?devices.

  • std::ifstream file("lesson1_kernels.cl");
  • checkErr(file.is_open() ? CL_SUCCESS:-1, "lesson1_kernel.cl");std::string prog(
  • std::istreambuf_iterator<char>(file),
  • (std::istreambuf_iterator<char>()));cl::Program::Sources source(1,
  • std::make_pair(prog.c_str(), prog.length()+1));cl::Program program(context, source);
  • err = program.build(devices,"");
  • checkErr(err, "Program::build()");
  • A given?program?can have many entry points, called kernels, and to call one we must build a kernel object. There is assumed to exist a straightforward mapping from kernel names, represented as strings, to a function defined with the?__kernel?attribute in the compute program. In this case we can build a?cl::kernel?object,?kernel. Kernel arguments are set using the C++ API with?kernel.setArg(), which takes the index and value for the particular argument.

  • cl::Kernel kernel(program, "hello", &err);
  • checkErr(err, "Kernel::Kernel()");err = kernel.setArg(0, outCL);
  • checkErr(err, "Kernel::setArg()");
  • Now that the boiler plate code is done, it is time to compute the result (the output buffer with the string “Hello World\n”). All device computations are done using a command queue, which is a virtual interface for the device in question. Each command queue has a one-to-one mapping with a given device; it is created with the associated?context?using a call to the constructor for the class?cl::CommandQueue. Given a?cl::CommandQueue?queue,kernels can be queued usingqueue.enqueuNDRangeKernel. This queues a?kernel?for execution on the associated device. The kernel can be executed on a 1D, 2D, or 3D domain of indexes that execute in parallel, given enough resources. The total number of elements (indexes) in the launch domain is called the?global?work size; individual elements are known as?work-items.?Work-items?can be grouped into?work-groups?when communication between?work-items?is required.?Work-groups?are defined with a sub-index function (called the?local?work size), describing the size in each dimension corresponding to the dimensions specified for the global launch domain. There is a lot to consider with respect to kernel launches, and we will cover this in more detail in future tutorials. For now, it is enough to note that for Hello World, each work-item computes a letter in the resulting string; and it is enough to launch?hw.length()+1, where?hw?is the?const std::string?we defined at the beginning of the program. We need the extra?work-item?to account for the?NULL?terminator.

  • cl::CommandQueue queue(context, devices[0], 0, &err);
  • checkErr(err, "CommandQueue::CommandQueue()");cl::Event event;
  • err = queue.enqueueNDRangeKernel(
  • kernel,
  • cl::NullRange,
  • cl::NDRange(hw.length()+1),
  • cl::NDRange(1, 1),
  • NULL,
  • &event);
  • checkErr(err, "ComamndQueue::enqueueNDRangeKernel()");
  • The final argument to the?enqueueNDRangeKernel?call above was a?cl::Event?object, which can be used to query the status of the command with which it is associated, (for example, it has completed). It supports the method?wait()?that blocks until the command has completed. This is required to ensure the kernel has finished execution before reading the result back into host memory with?queue.enqueueReadBuffer(). With the compute result back in host memory, it is simply a matter of outputting the result to?stdout?and exiting the program.

  • event.wait();
  • err = queue.enqueueReadBuffer(
  • outCL,
  • CL_TRUE,
  • 0,
  • hw.length()+1,
  • outH);
  • checkErr(err, "ComamndQueue::enqueueReadBuffer()");
  • std::cout << outH;
  • return EXIT_SUCCESS;
  • }
  • Finally, to make the program complete an implementation for the device program (lesson1_kernels.cl), requires defining the external entry point, hello. The kernel implementation is straightforward: it calculates a unique index as a function of the launch domain using?get_global_id(), it uses it as an index into the string,?hw, then writes its value to the output array,?out.

  • #pragma OPENCL EXTENSION cl_khr_byte_addressable_store : enable
  • __constant char hw[] = "Hello World\n";
  • __kernel void hello(__global char * out)
  • {
  • size_t tid = get_global_id(0);
  • out[tid] = hw[tid];
  • }
  • For robustness, it would make sense to check that the thread id (tid) is not out of range of the hw; for now, we assume that the corresponding call toqueue.enqueueNDRangeKernel()?is correct.

    Building and running

    On Linux, it should be enough to use a single command to build the OpenCL? program; for example:
    gcc –o hello_world –Ipath-OpenCL-include –Lpath-OpenCL-libdir lesson1.cpp –lOpenCL

    To run:
    LD_LIBRARY_PATH=path-OpenCL-libdir ./hello_world

    On Windows, with a Visual Studio command window, an example is:
    cl /Fehello_world.exe /Ipath-OpenCL-include lesson.cpp path-OpenCL-libdir/OpenCL.lib

    Let’s assume that OpenCL.dll is on the path, then, running
    .\hello_world

    outputs the following string pm stdout:
    Hello World

    This completes our introductory tutorial to OpenCL?. Your feedback, comments, and questions are requested. Please visit our??OpenCL? forum.

    Useful Links

    The following list provides links to some specific programming bindings, other than C, for OpenCL?. I have not tested these and cannot vouch for their correctness, but hope they will be useful:

    • OpenCL? specification and headers:
      http://www.khronos.org/registry/cl/
    • OpenCL? technical forum:
      http://www.khronos.org/message_boards/viewforum.php?f=28
    • The C++ bindings used in this tutorial can be found on the OpenCL? web page at Khronos, along with complete documentation:
      http://www.khronos.org/registry/cl/
    • Python bindings can be found here:
      http://wiki.tiker.net/PyOpenCL
    • C# bindings can be found here:
      http://www.khronos.org/message_boards/viewtopic.php?f=28&t=1932

    ?

    OpenCL and the OpenCL logo are trademarks of Apple Inc. used by permission by Khronos.

    總結

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

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

    日韩免费一区 | 99久久久成人国产精品 | 日韩视频在线不卡 | 欧美有色 | 日韩精品亚洲专区在线观看 | 在线天堂中文在线资源网 | 国产在线观看xxx | 国产成人精品999 | 狠狠干中文字幕 | 国内精品久久久久 | 久久人人看| 国产九九九精品视频 | 欧美日韩高清国产 | 色的网站在线观看 | 亚洲精品一区二区18漫画 | 久久久久国产一区二区 | 中文字幕美女免费在线 | 综合久色| 国产亚洲字幕 | 国产精品久久久久久电影 | 操操日 | 国产精品久久久久久久久免费看 | 在线中文字幕视频 | 国产精品免费在线视频 | 在线电影 一区 | 亚洲视频免费 | 欧美日韩一区二区三区不卡 | 成人久久久久久久久 | 久久xxxx| 精品视频999 | 国产精品一区二区在线观看 | 最近免费中文视频 | 天堂黄色片 | 亚洲一区二区三区在线看 | 亚洲成av人片在线观看无 | 狠狠色2019综合网 | 午夜精品视频在线 | 亚洲专区欧美专区 | 精品国自产在线观看 | 亚洲成人欧美 | 久久综合九色欧美综合狠狠 | 美女免费网视频 | 亚洲精品福利在线 | 91在线资源 | 久久亚洲私人国产精品va | 成人精品一区二区三区中文字幕 | 国产精品一区二区久久 | 精品一区二区日韩 | 午夜精品一区二区三区免费视频 | 97超碰国产在线 | 91视频 - 114av| 四虎影视精品永久在线观看 | 水蜜桃亚洲一二三四在线 | 中文字幕乱码日本亚洲一区二区 | 午夜精品久久久久久久99婷婷 | 人人干免费 | 色夜影院 | 国产无吗一区二区三区在线欢 | 最新日韩在线观看视频 | 成年人免费在线播放 | 高清久久久 | www免费| 亚洲一区尤物 | 天天操夜操 | 日韩av黄 | 美女视频永久黄网站免费观看国产 | 国产视频一区二区在线 | 国产剧情av在线播放 | 狠狠的操狠狠的干 | 操操综合 | 国产破处在线视频 | 草久热 | 少妇做爰k8经典 | 亚洲在线免费视频 | 日韩在线精品一区 | 日韩精品一区二区三区免费视频观看 | 亚洲免费一级 | 免费观看一区二区三区视频 | 伊人狠狠色丁香婷婷综合 | 午夜在线资源 | 一区二区三区在线观看中文字幕 | 亚洲一区二区视频在线播放 | 欧美日韩网址 | 国产不卡一区二区视频 | 天天色.com| 免费av观看网站 | 色久综合 | 国产精品久久电影网 | 欧美片一区二区三区 | 91久草视频 | 黄色在线视频网址 | 九九久久久 | 久久久久久久久电影 | 日本久久成人 | 99精品在线观看视频 | 激情综合五月 | 日韩三区在线观看 | 夜添久久精品亚洲国产精品 | 我要看黄色一级片 | 亚洲粉嫩av | 亚洲成aⅴ人片久久青草影院 | 在线观看日韩精品 | 久久超级碰视频 | 日韩精品欧美一区 | 成人国产一区 | 91一区二区在线 | 国产中文字幕一区二区三区 | 亚洲电影av在线 | 亚洲激情网站免费观看 | 国产中文字幕一区二区三区 | 成人丁香花 | 久久综合色一综合色88 | 欧美经典久久 | 精品一区二区免费视频 | 亚洲特级毛片 | 亚洲国产福利视频 | 欧美精品免费一区二区 | 在线三级播放 | 亚洲不卡在线 | 涩涩爱夜夜爱 | 日韩精品一区二区三区中文字幕 | 国产日韩欧美视频在线观看 | 美女免费视频观看网站 | 欧美日韩视频在线观看免费 | 伊人丁香| 欧美精品亚洲精品 | 日日日干 | 日本高清dvd | 成人一区二区三区在线观看 | 亚洲国产免费 | 五月天伊人 | 久久久精品国产一区二区电影四季 | 国产精品二区三区 | 丁香婷婷电影 | 国产高清视频在线播放一区 | 久久理伦片 | 日韩成人一级大片 | 国产精品久久久久免费观看 | 亚洲激情视频在线观看 | 日韩精品一区二区三区水蜜桃 | 91精品国产一区二区三区 | 久久婷婷亚洲 | 色婷婷综合视频在线观看 | 九九九在线 | 在线观看一二三区 | 久久成人国产精品一区二区 | aav在线 | 亚洲精品动漫成人3d无尽在线 | 国产在线自 | 日韩成人精品 | 欧美三级高清 | 久久久鲁| 色婷婷 亚洲 | 天天射天天射天天 | 国产精品一区二区三区在线免费观看 | 日韩精品免费一区 | 天天骚夜夜操 | 欧美一区二区三区免费观看 | 日日射av| 波多野结衣视频一区 | 久久9999久久免费精品国产 | 久久久久 免费视频 | 亚洲精品九九 | 国产综合片| www.久草.com | 亚洲aⅴ免费在线观看 | 美女视频免费一区二区 | 香蕉久久久久久久 | 日韩av一区二区在线播放 | 最新一区二区三区 | 国产高清久久久久 | 最近中文字幕高清字幕免费mv | 国产精品一区二区久久久久 | 久久精品99久久久久久 | 久久久久久久亚洲精品 | 亚洲视频久久久久 | 国产香蕉视频在线播放 | 国产福利av在线 | 亚洲国产日韩精品 | 91精品国产福利在线观看 | 国产一区在线免费观看 | 天堂av色婷婷一区二区三区 | 亚洲精品国产精品国自产观看浪潮 | 国产午夜一区二区 | 午夜色站| 日本最大色倩网站www | 成人亚洲精品国产www | 毛片99 | 西西人体www444 | 91激情| 国产麻豆果冻传媒在线观看 | 99色视频在线 | 色噜噜日韩精品欧美一区二区 | 中文字幕日韩国产 | 日本黄色大片免费看 | 一级一级一片免费 | 午夜精品久久久久久久99婷婷 | 日韩综合在线观看 | 六月色婷| 亚洲精品免费在线视频 | 久久久网 | 欧美激情亚洲综合 | 国产五月色婷婷六月丁香视频 | 97精品免费视频 | 中文字幕在线影视资源 | 欧美做受xxx | 偷拍精品一区二区三区 | 国产视频二区三区 | 中中文字幕av | 波多野结衣电影一区二区三区 | 国内成人精品视频 | 天天操天天射天天 | 成人毛片100免费观看 | 日产乱码一二三区别免费 | 天天天天射 | 亚洲精品视 | 久草在线中文视频 | 最近中文字幕视频网 | 精品久久久免费 | 人人揉人人揉人人揉人人揉97 | 黄色.com| 日韩中文幕 | 视频在线一区 | 日日干日日色 | 日韩在线观| 亚洲一区二区视频在线 | 91九色自拍 | 国内精品久久久久国产 | www.午夜 | 久久一区二区免费视频 | 99热国产精品 | 国产一区高清在线观看 | 97超碰国产精品女人人人爽 | 欧美一区二区三区在线视频观看 | 久久久久久久久网站 | 亚洲精品电影在线 | 久久在线视频精品 | 欧美日韩三区二区 | 国产99久久久国产精品免费看 | 日韩videos| 久久久久久久久久久免费视频 | 国产中文字幕在线免费观看 | 国产成人亚洲在线观看 | 国产成人精品在线观看 | 欧美国产亚洲精品久久久8v | 人人干天天射 | 中文资源在线观看 | 日本精品中文字幕在线观看 | www免费视频com━ | 日韩免费中文 | 日韩精品视频在线观看免费 | 少妇bbb搡bbbb搡bbbb | 国产九九热视频 | 国产免费观看久久黄 | 天天干天天上 | 日韩在线视频免费播放 | 国产成人av综合色 | 奇米影视8888在线观看大全免费 | 久久久久久蜜桃一区二区 | www.久久久.com | 狠狠狠狠狠狠狠狠 | 综合五月婷婷 | 97色在线观看免费视频 | 成人午夜电影在线 | 国产中文字幕在线免费观看 | 中文字幕电影高清在线观看 | 69视频永久免费观看 | 伊人午夜视频 | 美女久久| 久久精品观看 | 久久久久激情视频 | 亚洲天天做 | 日韩视频一区二区在线观看 | 久草视频在| 欧美a免费 | 麻豆91精品视频 | 亚洲人av免费网站 | 日本91在线 | 在线观看国产成人av片 | 日韩精品一区在线观看 | 国产在线观看你懂得 | av在线小说| 久久国产精品久久w女人spa | 国产成人久久精品一区二区三区 | 免费下载高清毛片 | 日日弄天天弄美女bbbb | 999视频网| 国产一区二区在线播放 | 国产91学生粉嫩喷水 | 中文字幕在线久一本久 | 久色网| 黄色精品免费 | 色婷婷免费 | 免费亚洲一区二区 | 看片的网址 | 激情五月看片 | 成人免费视频播放 | 国产精品一区久久久久 | 一级片色播影院 | 国际精品久久久久 | 国产一级做a爱片久久毛片a | 91手机视频在线 | 成片人卡1卡2卡3手机免费看 | 国产综合视频在线观看 | 天天操福利视频 | 久久综合狠狠综合久久狠狠色综合 | 九九精品视频在线看 | 久久国产香蕉视频 | 天天天干夜夜夜操 | 久久免费播放 | 亚洲精品成人在线 | 日韩一二三 | 精品国产一区二区在线 | 国产一二区免费视频 | 亚洲第二色 | 久久99国产视频 | 国产一级片在线播放 | 91av成人 | 精品国产乱码久久久久久天美 | www.天天成人国产电影 | 久草在线视频看看 | 狠狠狠色丁香综合久久天下网 | 久久久久久久久久久网 | 天天色播| 精品久久久久久久久久久久 | av成人免费网站 | 国产亚洲欧美精品久久久久久 | 国产精华国产精品 | 美女视频黄免费的久久 | 最近字幕在线观看第一季 | 探花视频免费观看 | 欧美韩日精品 | 中文字幕在线免费观看 | 五月婷婷激情六月 | 国产免费久久精品 | 国产精品18久久久久久首页狼 | 色噜噜在线观看 | 国产成人中文字幕 | 99爱爱| 九九免费在线观看 | 伊人官网 | 91av电影网| 午夜精品一区二区三区可下载 | 日韩试看 | 精品国产黄色片 | 日韩和的一区二在线 | 99久久这里只有精品 | 日韩av在线免费看 | 亚洲专区视频在线观看 | 国产第一二区 | 岛国精品一区二区 | 丁香婷婷激情啪啪 | 亚洲精品午夜视频 | 五月婷在线| av成人动漫 | 在线 国产 日韩 | 婷婷综合国产 | 九九九九精品九九九九 | 国产精品一区二区久久 | 在线观看网站你懂的 | 欧美天堂视频在线 | 涩涩成人在线 | 久久成人国产精品一区二区 | 婷婷久久一区二区三区 | 日韩av片在线 | 国产精品一区二区 91 | 激情av在线播放 | 国产成人精品在线 | 最近高清中文字幕在线国语5 | 日韩高清无线码2023 | 国产精品毛片一区视频播不卡 | 亚洲国产资源 | 草草草影院 | 黄色在线免费观看网址 | 干天天| 久久在线观看 | 午夜视频在线观看一区二区 | 日韩免费高清在线 | 中文字幕在线观看第三页 | 一区二区三区高清不卡 | 亚洲精品a区 | 天天色综合1 | 最近中文字幕视频完整版 | 国产精品久久久网站 | 久久电影日韩 | 久草色在线观看 | 亚洲视频精选 | 91国内产香蕉 | 人人爽爽人人 | 久久精品国产亚洲a | 久久蜜臀一区二区三区av | 精品国产一区二区三区在线观看 | 免费观看www7722午夜电影 | 国产免费黄视频在线观看 | 丁香综合网| 五月综合激情 | 国产手机在线播放 | avhd高清在线谜片 | 色吧av色av | 99久久久国产精品免费观看 | 日韩系列| 日韩在线观看网址 | 欧美极品少妇xxxx | 99热在线看 | 激情丁香综合五月 | 精品久操| 天天色天天色 | 久久国产一区二区三区 | www.人人草 | www.色午夜.com | 在线精品视频在线观看高清 | 91精品国产乱码在线观看 | 久久精品免费 | 99精品视频播放 | 亚洲aⅴ在线 | 中文字幕免费久久 | 麻豆成人在线观看 | 亚洲精品在线国产 | 久草在在线 | 欧美天堂视频在线 | 久久久久久免费视频 | 精品国内自产拍在线观看视频 | 亚洲精品午夜久久久 | 久99久在线 | 日韩精品一区二区免费 | 中文字幕亚洲欧美日韩2019 | 岛国大片免费视频 | 91精品在线视频观看 | 草久久久 | 在线性视频日韩欧美 | 日日摸日日添日日躁av | 国产精品美女免费 | 亚洲另类视频在线 | 欧美日韩不卡在线视频 | 欧美小视频在线 | 色偷偷88888欧美精品久久 | 日日干干夜夜 | 97人人模人人爽人人喊网 | 国产精品综合久久久久久 | 亚洲日韩中文字幕在线播放 | 国产aa免费视频 | 蜜臀av在线一区二区三区 | 国产亚洲字幕 | 国产高清绿奴videos | 国产亚洲精品久久久久久大师 | 成人福利av| 国产一级二级视频 | 国产精品美女免费视频 | 中文字幕一区二区三区在线视频 | 97国产精品一区二区 | 草久久影院 | 91桃色国产在线播放 | 欧美久久久久久久久 | 一级久久精品 | 国语自产偷拍精品视频偷 | 91视频免费播放 | 日韩精品影视 | 色婷婷一区 | 国产精品免费在线播放 | 中文字幕日韩国产 | 射久久| 久久久久久国产精品999 | 久久毛片高清国产 | 国产在线精品观看 | 国产高清在线免费观看 | 国产夫妻性生活自拍 | 色妞久久福利网 | 日韩xxx视频 | av久久在线| 国产99久久九九精品 | 欧美污在线观看 | 黄色av成人在线 | 免费视频在线观看网站 | 色婷婷久久久综合中文字幕 | 色爱区综合激月婷婷 | 久久精品国亚洲 | 国产精品自在欧美一区 | 91x色| www.久久免费视频 | 国产精品网站一区二区三区 | 中文字幕在线影视资源 | 久草久草视频 | 在线看日韩av | 婷婷综合在线 | 国产成在线观看免费视频 | 久久久精品一区二区三区 | 国产成人综 | 婷婷久操| 久久99视频精品 | 久久久久久久看片 | 欧美福利网址 | 久久久久久久久久福利 | 夜夜操夜夜干 | 中文字幕av在线不卡 | 韩国av一区二区三区 | 91网在线观看 | 成人午夜精品 | 国产91成人在在线播放 | 欧美成人xxxxx | 91视频 - v11av | 一区二区三区中文字幕在线观看 | 五月婷婷国产 | 日日夜夜av | 91大神电影 | 国产精品一区二区在线免费观看 | 精品久久久久亚洲 | 成人影视免费看 | 最近中文字幕免费 | 黄色三级免费观看 | 99超碰在线观看 | 久久国产精品久久精品国产演员表 | 综合网中文字幕 | 亚洲精品乱码久久久久久按摩 | 国产在线 一区二区三区 | 日韩网站一区 | 97视频在线看 | 欧美一区二区三区在线视频观看 | 五月开心激情 | 在线色视频小说 | 久热香蕉视频 | 欧美日韩一区二区三区不卡 | 欧美性大胆 | 91色偷偷| 国产不卡一区二区视频 | 国产精品毛片一区视频 | 欧美a视频| 国内精自线一二区永久 | 91亚洲精品久久久中文字幕 | 激情综合啪 | 日韩欧美精品一区二区 | 亚洲国产人午在线一二区 | 久久综合影院 | 国产精品入口a级 | 伊人狠狠 | 黄色网址国产 | 天天躁天天操 | 色婷婷激情网 | 美女视频黄是免费的 | 欧美最猛性xxxxx免费 | 日韩三级在线 | 亚洲狠狠操 | 91精品夜夜 | 精品一区二区日韩 | 精品国产一区二区三区久久久蜜臀 | 99久久这里有精品 | 在线观看中文字幕 | 久久久一本精品99久久精品66 | 日韩系列在线 | 国产午夜精品久久久久久久久久 | 麻豆精品视频在线 | 2019中文 | 国产成人一二三 | 色综合天天综合在线视频 | 五月激情丁香婷婷 | 国内精品久久天天躁人人爽 | 999视频精品 | 国产成人精品久久久久 | 国产精品久久久久久久妇 | 日韩乱色精品一区二区 | 久久久久久久影院 | 日韩精品一区二区电影 | 久久99九九99精品 | 国产精品不卡在线播放 | 97色婷婷 | 丁香婷婷在线观看 | 色狠狠婷婷 | av短片在线观看 | 国产色婷婷精品综合在线手机播放 | 国产在线国产 | av永久网址 | 看av在线| 婷婷午夜天 | 99爱在线观看 | 久草在线费播放视频 | 91 中文字幕 | 亚洲精品在线观看网站 | 久久久久一区二区三区四区 | 成人中文字幕在线观看 | 一级特黄av | 黄色成人小视频 | 婷婷丁香激情五月 | 亚洲精品乱码久久久一二三 | 日韩中文字幕在线不卡 | 天堂麻豆 | 99久高清在线观看视频99精品热在线观看视频 | 中文字幕亚洲欧美日韩 | 国产精品毛片久久久久久 | 天天射天天干天天插 | 2022国产精品视频 | 日韩在线观看视频在线 | 天天色影院 | 在线网站黄 | 色网站视频 | 久久综合九九 | 日日干天天干 | 久久夜色网 | 国产精品免费人成网站 | 欧美日韩在线观看一区二区三区 | 亚洲丝袜一区二区 | 久久久免费在线观看 | 日日干精品 | 青青草国产在线 | 97视频免费在线观看 | 美女免费视频一区二区 | 香蕉精品视频在线观看 | 亚洲专区在线视频 | 日韩精品2区 | 不卡电影一区二区三区 | 中文字幕免费一区二区 | 欧美一级免费高清 | 欧美精品久久久久久 | 91成人精品在线 | 色婷婷狠狠18 | 亚洲涩涩涩涩涩涩 | 伊人色综合网 | 中文乱码视频在线观看 | 91最新网址在线观看 | 亚洲综合精品视频 | 久久久久观看 | 欧美一级片 | 国产小视频精品 | 日韩视频一区二区 | 2019中文最近的2019中文在线 | 人人看人人 | 亚洲 中文 在线 精品 | 久久精品视频在线观看 | 成人av播放 | 美女搞黄国产视频网站 | 亚洲一区二区黄色 | 日韩性色| 在线播放第一页 | 精品久久91 | 国产精品一区二区62 | 国产一区欧美二区 | 天堂av在线网 | 国产三级精品三级在线观看 | 91欧美在线| 97在线资源 | 超碰97久久 | 欧美日韩有码 | 九色视频自拍 | 午夜在线日韩 | 韩日精品在线 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 日本九九视频 | 五月婷婷av在线 | 六月天综合网 | 国产特级毛片aaaaaaa高清 | 丁香激情五月 | 伊人va| 久久久久国产精品www | 免费看精品久久片 | 免费观看丰满少妇做爰 | 色婷婷激情网 | 亚洲国产精品人久久电影 | 日韩 精品 一区 国产 麻豆 | 欧美一级日韩免费不卡 | 天天插夜夜操 | 免费看一级特黄a大片 | 中文字幕在线观看网站 | 日韩av高清 | 欧美五月婷婷 | av中文字幕在线免费观看 | 国产精品嫩草69影院 | 在线免费观看黄色大片 | 国产黄色大片免费看 | 看片的网址 | 日韩大片在线看 | 人人干人人做 | 午夜狠狠干 | 国产精品一区二区果冻传媒 | 精品二区视频 | 日韩一区正在播放 | 8x8x在线观看视频 | 亚洲国产免费看 | av久久在线 | 日韩欧美精品在线 | 免费高清在线视频一区· | 在线观看自拍 | 国产在线国产 | 极品美女被弄高潮视频网站 | 在线看污网站 | 久久高清av | 热re99久久精品国产99热 | 成人av在线影院 | 一本色道久久综合亚洲二区三区 | 麻豆综合网 | 久久99国产精品免费网站 | 国内精品小视频 | 在线视频观看国产 | 成年人看片 | 婷香五月| 久久精品—区二区三区 | 久久国产品 | 欧美日韩国产综合一区二区 | 国产伦理一区二区 | 香蕉视频色 | 四虎在线免费观看 | 亚洲欧美国产精品va在线观看 | 亚洲激情国产精品 | 91免费网站在线观看 | 在线亚洲欧美日韩 | 欧美91在线| 久久成人国产精品免费软件 | 久久视| 99视频在线精品国自产拍免费观看 | 久久综合中文字幕 | 91精品视频免费看 | 日韩中文字幕免费在线观看 | 国产福利小视频在线 | 欧美性春潮 | 欧美精品乱码久久久久 | 日韩av视屏在线观看 | 五月天高清欧美mv | 午夜视频在线观看一区二区三区 | 国产成人一区三区 | 综合伊人av| 久操视频在线播放 | 久久这里只有精品1 | 免费看国产精品 | 久久久九色精品国产一区二区三区 | 中文字幕专区高清在线观看 | 国产精品免费久久久 | 亚洲成av人片一区二区梦乃 | 在线免费观看涩涩 | 日韩精品短视频 | 国产一级片在线播放 | 波多野结衣在线播放视频 | 国产又黄又爽无遮挡 | 成人免费视频播放 | 91成人精品一区在线播放 | 国产精品久久久久久欧美 | 草久在线观看视频 | 日韩城人在线 | 欧美精品乱码99久久影院 | 看片的网址 | 免费看搞黄视频网站 | 国产精品久久久久高潮 | 国产精品18久久久久白浆 | 色婷婷国产精品一区在线观看 | 精品亚洲视频在线 | 91精品免费在线观看 | av免费观看在线 | 国产精品系列在线 | 日韩91精品| 激情五月激情综合网 | 免费在线观看一区二区三区 | 欧美精品999 | 9999在线视频| 不卡av电影在线观看 | 在线观看自拍 | 在线观看视频你懂的 | 欧美成人亚洲 | 99精品视频免费 | 国产最顶级的黄色片在线免费观看 | 最近最新mv字幕免费观看 | 亚洲精品在线播放视频 | 日韩国产精品久久久久久亚洲 | 中文字幕传媒 | 欧美视频在线观看免费网址 | 最新精品国产 | 黄污在线看 | 亚洲精品乱码久久久久久蜜桃不爽 | 欧美午夜精品久久久久 | 91亚洲欧美 | 国产精品丝袜久久久久久久不卡 | 在线观看爱爱视频 | 99久久超碰中文字幕伊人 | 国产高清在线a视频大全 | 久久一区二区三区四区 | 久久久久免费网站 | 天天操天天干天天摸 | 久久久久中文字幕 | 久久久久国产精品免费 | 超碰在线97国产 | 最新成人在线 | 成人免费在线网 | 国产在线免费观看 | 国产一二区视频 | 亚洲国产视频在线 | 手机av永久免费 | 精品欧美一区二区三区久久久 | 五月婷婷在线视频观看 | 国产精品嫩草69影院 | 国产又粗又猛又黄视频 | 五月天中文字幕mv在线 | 国产在线观看,日本 | 在线观看免费中文字幕 | 日av免费| 国产成人精品一区二 | 国产精品久久久久久久久久妇女 | 久久精品79国产精品 | 成人免费在线观看入口 | 国产精品黄色 | 国产你懂的在线 | 97色婷婷人人爽人人 | 午夜 在线 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | av观看免费在线 | 久久综合九色综合网站 | 国产精品久久久777 成人手机在线视频 | 成人黄色免费观看 | 九九热精品国产 | 亚洲人精品午夜 | 亚洲精品免费在线观看视频 | 亚洲成人蜜桃 | 成人av在线网 | 91国内产香蕉| 黄色网址国产 | 国产+日韩欧美 | 久久久久在线观看 | 日韩二区三区在线 | 97视频在线播放 | 天天搞天天 | 免费观看第二部31集 | 日韩aa视频 | 欧美性色黄大片在线观看 | 97色国产 | 欧美一区二区三区在线看 | 精品一区 在线 | 国产一及片 | 国产福利91精品张津瑜 | 在线亚洲成人 | 人成电影网 | 四月婷婷在线观看 | 国产999精品视频 | 日本九九视频 | 国产成人一二三 | 日本中文字幕在线一区 | 香蕉视频久久久 | av高清影院| 99精品免费在线 | 中文字幕 国产 一区 | 日韩两性视频 | 草在线| 黄色三级在线观看 | 亚洲激情视频在线 | 久久亚洲综合国产精品99麻豆的功能介绍 | av+在线播放在线播放 | 久久狠狠一本精品综合网 | 中文字幕av在线不卡 | 在线观看视频中文字幕 | 亚洲成a人片77777kkkk1在线观看 | 特级毛片在线 | 丁香在线观看完整电影视频 | 久久成人国产精品 | 亚洲精品国产区 | 999日韩| 国产日韩三级 | 国产精品门事件 | 久草视频在 | 色噜噜日韩精品一区二区三区视频 | 国产四虎在线 | 超碰人人做 | 国产精品资源在线观看 | 日本在线观看中文字幕 | 日精品在线观看 | 亚洲成人麻豆 | 午夜精品一二区 | 日本激情中文字幕 | 一区二区三区免费在线观看视频 | 日本aaa在线观看 | 精品一区二区电影 | 91精品久久久久久久久久入口 | 黄色小说免费观看 | 夜夜夜 | 特级西西人体444是什么意思 | 久草在线手机视频 | 日本黄色免费在线 | www黄免费 | 99精品视频免费 | 久久99精品久久久久蜜臀 | 国产精品麻豆视频 | 亚洲亚洲精品在线观看 | 爱爱av在线 | 99久视频 | 日韩av一区二区三区 | 91在线porny国产在线看 | 午夜精品久久一牛影视 | 日韩黄色免费在线观看 | 九九激情视频 | 亚洲va欧美va| 国产欧美精品xxxx另类 | 四虎永久国产精品 | 成人午夜免费剧场 | 免费看黄视频 | 亚洲欧美激情插 | 欧美日韩性 | 亚洲狠狠干| 精品国产一区二区三区日日嗨 | 日韩美女免费线视频 | 欧美日韩国语 | 国产专区在线播放 | 激情五月婷婷激情 | 免费午夜在线视频 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 黄色www免费| 99久久精品免费看国产免费软件 | 中文字幕在线观看完整 | 日韩精品影视 | 亚洲一区日韩在线 | 国产自产高清不卡 | 国产视频精品久久 | 99精品在线视频观看 | 热久久精品在线 | 91精品国产乱码 | 日日干综合 | 天天天在线综合网 | 操操操天天操 | 国产精品k频道 | 最近免费观看的电影完整版 | 国产成人精品a | 丁香花在线观看免费完整版视频 | 久久在现 | 国产精品福利无圣光在线一区 | 欧美性久久久久久 | 国产精品高潮在线观看 | 国产精品日韩在线 | 一本一本久久a久久精品牛牛影视 | 国产精品永久在线 | 日韩在线免费高清视频 | 精品婷婷| 国产精品专区h在线观看 | 精品国产一区二区三区不卡 | 日韩中文字幕国产 | 91精品久久久久久久99蜜桃 | 午夜视频色 | 国产91在线观看 | 国内精品久久久久久中文字幕 | 国产精品高潮久久av | 国产精品久久久久久吹潮天美传媒 | 一区二区三区手机在线观看 | 欧美大jb | 欧美精品免费一区二区 | 不卡av在线免费观看 | 久久人人爽av | 观看免费av | 少妇资源站 | 色黄www小说| 激情五月开心 | 国产精品一区二区美女视频免费看 | 啪啪激情网| aaawww | 国产码电影 | 久久久久欧美精品 | 一区二区不卡在线观看 | 97成人在线视频 | 久久精品视频一 | 国产中文字幕在线 | 一区二区三区免费在线播放 | 91欧美国产 | 欧美日本一区 | 国产馆在线播放 | 91伊人久久大香线蕉蜜芽人口 | 日韩动漫免费观看高清完整版在线观看 | 日韩亚洲国产中文字幕 | 深夜免费福利 | 韩日色视频| 久久伦理电影网 | 91精品推荐 | 在线观看日本韩国电影 | 欧美日产在线观看 | 一级黄色网址 | 黄色在线看网站 | 精品国产一二三四区 | 日韩有色| 欧美精品中文在线免费观看 | 久久在线视频精品 | 亚洲婷婷在线视频 | 日韩免费看的电影 | av免费看看| 最新中文字幕在线观看视频 | 日韩在线色视频 | 欧美亚洲精品在线观看 | 激情黄色一级片 | 国产精品毛片久久久久久久久久99999999 | 蜜桃视频在线观看一区 | 深爱激情婷婷网 | 美女视频黄免费 | 国产不卡一二三区 | av免费在线观看1 | 国产精品一区二区免费看 | 玖玖视频网 | 激情视频综合网 | 国产正在播放 | 色偷偷av男人天堂 | 在线中文字母电影观看 | 88av视频| 999久久久久久久久久久 | 日韩性片 | 一本—道久久a久久精品蜜桃 | 日日麻批40分钟视频免费观看 | 丁香六月婷婷综合 | 久草在线综合 | 韩国精品一区二区三区六区色诱 | 青青河边草手机免费 | 99在线看| 另类五月激情 |