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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

caffe caffe.cpp 程序入口分析

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

from:https://blog.csdn.net/u014114990/article/details/47747025

caffe.cpp??程序入口分析,
?
(1)main()函數中,輸入的train,test,device_query,time。 通過下面兩行進入程序。
????if (argc == 2) {
????return GetBrewFunction(caffe::string(argv[1]))();
?
(2)GetBrewFunction()函數定義如下,其返回BrewFunction函數指針。
static BrewFunction GetBrewFunction(const caffe::string& name) {
??// use map type to check name appears frequency?
??if (g_brew_map.count(name)) { //??判斷輸入的是不是g_brew_map中train,test,device_query,time中一個,
????return g_brew_map[name];????// 如果是的話,就調用相應的train(),test(),device_query(),time()
...
}
(3)g_brew_map實現過程,首先通過 typedef定義函數指針
typedef int (*BrewFunction)();
這個是用typedef定義函數指針方法。這個程序定義一個BrewFunction函數指針類型,
在caffe.cpp 中 BrewFunction 作為GetBrewFunction()函數的返回類型,可以是 train(),test(),device_query(),time() 這四個函數指針的其中一個。在train(),test(),中可以調用solver類的函數,從而進入到net,進入到每一層,運行整個caffe程序。
(4)g_brew_map定義
typedef std::map<caffe::string, BrewFunction> BrewMap;// 因為輸入參數可能為train,test,device_query,time,所以定義一個容器類型,
BrewMap g_brew_map;
(5) g_brew_map 初始化
#define RegisterBrewFunction(func) \
namespace { \
class __Registerer_##func { \
?public: /* NOLINT */ \
??__Registerer_##func() { \
????g_brew_map[#func] = &func; \
??} \
}; \
__Registerer_##func g_registerer_##func; \
}
這個作用和#define RegisterBrewFunction(func) g_brew_map[#func]=&func;??這個宏定義功能類似,其中,func可以為:train,test,device_query,time。
?
??綜上, caffe中定義了train(),test(),device_query(),time()四種方式。??如果需要,咱們可以增加其他的方式,然后通過RegisterBrewFunction()?函數注冊一下即可。 ???
??

二、補充知識點
????
typedef int (*funcptr)(); 什么意思

typedef int (*funcptr)(); 什么意思

定義一個函數指針類型。
比如你有三個函數:
void hello(void) { printf("你好!"); }
void bye(void) { printf("再見!"); }
void ok(void) { printf("好的!"); }

typdef void (*funcptr)(void);
這樣就構造了一個通用的函數
你用的時候可以這樣:
void speak(int id)
{
funcptr words[3] = {&hello, &bye, &ok};
funcptr fun = words[id];
(*fun)();
}

這樣的話,如果speak(0)就會顯示“你好!”
speak(1)就會顯示“再見!”
speak(2)就會顯示“好的!”

用于處理參數和返回值的形式都一樣,但是功能不確定的一組函數,可以使用函數指針。

比如算術運算符,加、減、乘、除,都可以用typedef int (*calc)(int,int)代表,等等

三、 #define 宏定義

??

1.簡單的define定義

#define?MAXTIME 1000

一個簡單的MAXTIME就定義好了,它代表1000,如果在程序里面寫

if(i<MAXTIME){.........}

編譯器在處理這個代碼之前會對MAXTIME進行處理替換為1000。

這樣的定義看起來類似于普通的常量定義CONST,但也有著不同,因為define的定義更像是簡單的文本替換,而不是作為一個量來使用,這個問題在下面反映的尤為突出。

2.define的“函數定義”

define可以像函數那樣接受一些參數,如下

#define?max(x,y) (x)>(y)?(x):(y);

這個定義就將返回兩個數中較大的那個,看到了嗎?因為這個“函數”沒有類型檢查,就好像一個函數模板似的,當然,它絕對沒有模板那么安全就是了??梢宰鳛橐粋€簡單的模板來使用而已。

但是這樣做的話存在隱患,例子如下:
#define?Add(a,b) a+b;
在一般使用的時候是沒有問題的,但是如果遇到如:c * Add(a,b) * d的時候就會出現問題,代數式的本意是a+b然后去和c,d相乘,但是因為使用了define(它只是一個簡單的替換),所以式子實際上變成了
c*a + b*d

另外舉一個例子:
#define?pin (int*);
pin a,b;
本意是a和b都是int型指針,但是實際上變成int* a,b;
a是int型指針,而b是int型變量。
這是應該使用typedef來代替define,這樣a和b就都是int型指針了。

所以我們在定義的時候,養成一個良好的習慣,建議所有的層次都要加括號。

3.宏的單行定義

#define?A(x) T_##x
#define?B(x) #@x
#define?C(x) #x

我們假設:x=1,則有:

A(1)------〉T_1
B(1)------〉'1'
C(1)------〉"1"

(這里參考了 hustli的文章)

3.define的多行定義

define可以替代多行的代碼,例如MFC中的宏定義(非常的經典,雖然讓人看了惡心)

#define?MACRO(arg1, arg2) do { /
/* declarations */?/
stmt1; /
stmt2; /
/* ... */?/
}?while(0)?/* (no trailing ; ) */
關鍵是要在每一個換行的時候加上一個"/"

摘抄自http://www.blog.edu.cn/user1/16293/archives/2005/115370.shtml?修補了幾個bug

4.在大規模的開發過程中,特別是跨平臺和系統的軟件里,define最重要的功能是條件編譯。

就是:
#ifdef?WINDOWS
......
......
#endif
#ifdef?LINUX
......
......
#endif

可以在編譯的時候通過#define設置編譯環境

5.如何定義宏、取消宏

//定義宏
#define?[MacroName] [MacroValue]
//取消宏
#undef?[MacroName]
//普通宏
#define?PI (3.1415926)

帶參數的宏
#define?max(a,b) ((a)>(b)? (a),(b))
關鍵是十分容易產生錯誤,包括機器和人理解上的差異等等。

6.條件編譯
#ifdef?XXX…(#else) …?#endif
例如
#ifdef?DV22_AUX_INPUT
#define?AUX_MODE 3?
#else
#define?AUY_MODE 3
#endif
#ifndef?XXX … (#else) …?#endif

7.頭文件(.h)可以被頭文件或C文件包含;
重復包含(重復定義)
由于頭文件包含可以嵌套,那么C文件就有可能包含多次同一個頭文件,就可能出現重復定義的問題的。
通過條件編譯開關來避免重復包含(重復定義)
例如
#ifndef?__headerfileXXX__
#define?__headerfileXXX__

//文件內容

#endif

以上只是我從網絡上搜集了一些關于define的一些用法,可能還不全面,而且#define的使用本來也存在這爭議,如果你對#define的用法也很有興趣,可以來參加我們的討論

四。宏定義是在c中常用的,

????????在c++中,定義常變量,應該用const定義, 定義常用函數,應該用 inline 定義,這兩種方法更好。?

?inline函數和用macro定義的函數區別?

macro定義?
只是很初級的一種代換,實現的功能很單一?
而且安全性很差,比如類型錯誤、括號漏寫?
都會造成很大的錯誤,?
而且錯誤不容易被發現,隱患很大?

inline函數?
內聯函數要比前者好很多?
功能也要全面很多!?
最主要的是???????
內聯函數能夠進行安全檢查(比如參數類型 ??等)?
如果在能夠使用兩著的情況之下?
推薦使用 ??內聯???????

不過有兩點要注意:?
1 ????內聯 ??是以代碼膨脹為代價的,???
??????不是所有的函數都適合用 ??內聯 ??方式?
??????要考慮函數的實際情況???
2 ????macro定義 ??也不是說一無是處了?
??????在合適的時候使用 ??也許會有意想不到的效果?


const與#define最大的差別在于:前者在堆棧分配了空間,而后者只是把具體數值直接傳遞到目標變量罷了。或者說,const的常量是一個Run-Time的概念,他在程序中確確實實的存在可以被調用、傳遞。而#define常量則是一個Compile-Time概念,它的生命周期止于編譯期:在實際程序中他只是一個常數、一個命令中的參數,沒有實際的存在。

const常量存在于程序的數據段.

#define常量存在于程序的代碼段。

2優缺點:

至于兩者的優缺點,要看具體的情況了。一般的常數應用,我個人認為#define是一個更好的選擇:

i.從run-time的角度來看,他在空間上和時間上都有很好優勢。

ii.從compile-time的角度來看,類似m=t*10的代碼不會被編譯器優化,t*10的操作需要在run-time執行。而#define的常量會被合并。

但是:如果你需要粗魯的修改常數的值,那就的使用const了,因為后者在程序中沒有實際的存在.

另外在頭文件中使用 #define 可以避免頭文件重復包含的問題,這個功能,是const無法取代的。

1-Google Flag
1-1 Define Flags
1-2 Accessing Flag
1-3 Set up Flags
2-Caffe cpp
2-1 Part 1
2-2 Part 2
BrewFunction
1-Google Flag
Document is?How To Use Google Commandline Flags, where All materials discussed below come from.

Google Flags(gflags) is created to deal with commandline flags.

1-1.?Define Flags.
<code class="language-c hljs ?has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#include <gflags/gflags.h></span>

? ?DEFINE_bool(big_menu, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Include 'advanced' options in the menu listing"</span>);
? ?DEFINE_string(languages, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"english,french,german"</span>,
? ? ? ? ? ? ? ? ?<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"comma-separated list of languages to offer in the 'lang' menu"</span>);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
Explain:?
Before defining gflags, include it at the top of file.

DEFINE_bool and DEFINE_string are flag types. Here are different types of flags.

<code class="language-c hljs ?has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">DEFINE_bool: boolean
DEFINE_int32: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">32</span>-bit integer
DEFINE_int64: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">64</span>-bit integer
DEFINE_uint64: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">unsigned</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">64</span>-bit integer
DEFINE_double: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">double</span>
DEFINE_string: C++ <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">string</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>
DEFINE_xxx takes three arguments:?
1. the name of the flag?
2. its default value?
3. ′help′ string that describe its use.

1-2. Accessing Flag
All defined flags are available with the prefix FLAGS_. In the example above, two variables, FLAGS_big_menu, and FLAGS_languages can be used.

1-3. Set up Flags
<code class="language-c++ hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">google:</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:ParseCommandLineFlags</span>(&argc, &argv, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>
2-Caffe. cpp
2-1. Part 1
<code class="language-c++ hljs ruleslanguage has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-array" style="box-sizing: border-box;">#include </span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"caffe/caffe.hpp"</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>
#include <gflags/gflags.h> is included in caffe.hpp/common.hpp

<code class="language-c++ hljs scss has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-function" style="box-sizing: border-box;">DEFINE_int32(gpu, -<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,
? ? <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Run in GPU mode on given device ID."</span>)</span>;
<span class="hljs-function" style="box-sizing: border-box;">DEFINE_string(solver, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>,
? ? <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"The solver definition protocol buffer text file."</span>)</span>;
<span class="hljs-function" style="box-sizing: border-box;">DEFINE_string(model, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>,
? ? <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"The model definition protocol buffer text file.."</span>)</span>;
<span class="hljs-function" style="box-sizing: border-box;">DEFINE_string(snapshot, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>,
? ? <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Optional; the snapshot solver state to resume training."</span>)</span>;
<span class="hljs-function" style="box-sizing: border-box;">DEFINE_string(weights, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>,
? ? <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Optional; the pretrained weights to initialize finetuning. "</span>
? ? <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Cannot be set simultaneously with snapshot."</span>)</span>;
<span class="hljs-function" style="box-sizing: border-box;">DEFINE_int32(iterations, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">50</span>,
? ? <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"The number of iterations to run."</span>)</span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li></ul>
Initial all flags. (refer to?How to define flags?)

2-2. Part 2
main function:

<code class="language-c++ hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">int main(int argc, char** argv) {
? <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> <span class="hljs-constant" style="box-sizing: border-box;">Print</span> output to stderr (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">while</span> still logging).
? <span class="hljs-constant" style="box-sizing: border-box;">FLAGS_alsologtostderr</span> = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>;
? <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> <span class="hljs-constant" style="box-sizing: border-box;">Usage</span> message.
? <span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">gflags:</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:SetUsageMessage</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"command line brew\n"</span>
? ? ? <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"usage: caffe <command> <args>\n\n"</span>
? ? ? <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"commands:\n"</span>
? ? ? <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" ?train ? ? ? ? ? train or finetune a model\n"</span>
? ? ? <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" ?test ? ? ? ? ? ?score a model\n"</span>
? ? ? <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" ?device_query ? ?show GPU diagnostic information\n"</span>
? ? ? <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" ?time ? ? ? ? ? ?benchmark model execution time"</span>);
? <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> <span class="hljs-constant" style="box-sizing: border-box;">Run</span> tool <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">or</span> show usage.
? <span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">caffe:</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:GlobalInit</span>(&argc, &argv);
? <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (argc == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>) {
? ? <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-constant" style="box-sizing: border-box;">GetBrewFunction</span>(<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">caffe:</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:string</span>(argv[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>]))();
? } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> {
? ? <span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">gflags:</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:ShowUsageWithFlagsRestrict</span>(argv[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>], <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"tools/caffe"</span>);
? }
}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li></ul>
caffe.cpp is able to do four different task: train, test, device_query and time.

train: train or finetune a model\n”?
test: score a model\n”?
device_query: show GPU diagnostic information\n”?
time: benchmark model execution time”);

caffe::GlobalInit(&argc, &argv); includes gflags parse sentence:

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">google:</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:ParseCommandLineFlags</span>(&argc, &argv, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">true</span>);</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>
So far, the corresponding flags are set up from command line.

It will call different functions by GetBrewFunction(). Here are four main functions: train(), test(), device_query() and time().

BrewFunction
<code class="language-c++ hljs cpp has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">typedef</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> (*BrewFunction)();
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">typedef</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">std</span>::<span class="hljs-stl_container" style="box-sizing: border-box;"><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">map</span><caffe::<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">string</span>, BrewFunction></span> BrewMap;
BrewMap g_brew_map;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>
The first line is to define BrewFunction as a function pointer with inputting no argument and returning int.

The second typedef is to create BrewMap as a map to store the flag and its corresponding function.

But How to initial BrewMap ??
see this block:

<code class="language-c++ hljs tex has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">#</span>define RegisterBrewFunction(func) <span class="hljs-command" style="box-sizing: border-box; color: rgb(0, 0, 136);">\
</span>namespace <span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">{</span> <span class="hljs-command" style="box-sizing: border-box; color: rgb(0, 0, 136);">\
</span>class __Registerer_<span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">#</span><span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">#</span>func <span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">{</span> <span class="hljs-command" style="box-sizing: border-box; color: rgb(0, 0, 136);">\
</span> public: /* NOLINT */ <span class="hljs-command" style="box-sizing: border-box; color: rgb(0, 0, 136);">\
</span> ?__Registerer_<span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">#</span><span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">#</span>func() <span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">{</span> <span class="hljs-command" style="box-sizing: border-box; color: rgb(0, 0, 136);">\
</span> ? ?g_brew_map<span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">[</span><span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">#</span>func<span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">]</span> = <span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">&</span>func; <span class="hljs-command" style="box-sizing: border-box; color: rgb(0, 0, 136);">\
</span> ?<span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">}</span> <span class="hljs-command" style="box-sizing: border-box; color: rgb(0, 0, 136);">\
</span><span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">}</span>; <span class="hljs-command" style="box-sizing: border-box; color: rgb(0, 0, 136);">\
</span>__Registerer_<span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">#</span><span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">#</span>func g_registerer_<span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">#</span><span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">#</span>func; <span class="hljs-command" style="box-sizing: border-box; color: rgb(0, 0, 136);">\
</span><span class="hljs-special" style="box-sizing: border-box; color: rgb(102, 102, 0);">}</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>
It uses DEFINE to create a class, then use its public constructor function to initial BrewMap.

#: the parameter is replaced by a string literal

????Eg. #define str(x) #x?
????cout << str(test);

????it would be cout<<’test’;

##: concatenates two arguments.

It is very important to make constructor function public, otherwise we can call it.

Actually, we make a observation that?RegisterBrewFunction?comes after each main function (eg, train, test). The Class is initialized with running its constructor before going into main function.

After running GetBrewFunction(), it returns &func. In main function, it executes func().

typedef int (*funcptr)(); 什么意思
---------------------?
作者:deep_learninger?
來源:CSDN?
原文:https://blog.csdn.net/u014114990/article/details/47747025?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

總結

以上是生活随笔為你收集整理的caffe caffe.cpp 程序入口分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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

欧美国产大片 | 国产福利在线免费观看 | 麻豆91在线观看 | 午夜三级理论 | 激情综合亚洲 | 亚洲一区二区精品视频 | 97超碰超碰 | 久久久久久久久毛片精品 | 99精品国产一区二区三区麻豆 | 国产日产精品久久久久快鸭 | 国产一级片一区二区三区 | 中文字幕一区二区三区四区在线视频 | 丰满少妇在线观看网站 | 美女黄频在线观看 | 免费在线国产精品 | 久久99久久99精品免视看婷婷 | 免费在线观看不卡av | 精品一区二区综合 | 九九热只有这里有精品 | 国产精品视频99 | 激情伊人五月天 | 国产成人在线免费观看 | 99这里只有精品视频 | 久久综合色天天久久综合图片 | 99精品视频在线观看免费 | 国产麻豆剧传媒免费观看 | 色综合久久99| 男女视频国产 | 国产在线91精品 | 国产精品亚洲成人 | 国产精品国产毛片 | 国产精品乱码一区二三区 | 99在线精品视频观看 | 久久久999| 久久免费资源 | av福利在线 | 亚洲1区在线 | 97人人爽人人 | 日日夜夜天天久久 | 91麻豆精品一区二区三区 | 在线之家免费在线观看电影 | 久久久福利影院 | 黄色大片视频网站 | 欧美激情视频一区二区三区免费 | 青青看片 | 国产精品不卡一区 | 久久国产精品99久久久久 | 国产精品一区二区三区久久久 | 日韩av男人的天堂 | 欧美午夜寂寞影院 | 国产 视频 高清 免费 | 国产亚洲精品久久 | 丁香婷婷激情 | 国产99久久精品一区二区300 | 国产麻豆精品免费视频 | 一级免费看 | 久久这里精品视频 | 97激情影院 | 日韩精品1区2区 | 激情五月婷婷 | 亚洲欧洲精品一区二区精品久久久 | 日韩av网站在线播放 | 亚洲作爱 | 色综合www| 国产精品久久三 | 成人黄视频 | 免费欧美高清视频 | 伊人官网 | 日韩欧美在线视频一区二区三区 | 久久久久久久久久亚洲精品 | 麻豆高清免费国产一区 | 色综合天天做天天爱 | 激情欧美丁香 | 色网站在线观看 | 在线三级中文 | 亚洲最大av网站 | 国产精品九九久久99视频 | 日韩一级黄色av | 色婷婷综合视频在线观看 | 少妇av网| 丁香婷婷综合激情 | 国产亚洲精品精品精品 | 欧美人人| 中文字幕在线播出 | 国产精品午夜免费福利视频 | 夜夜骑日日 | 久久精品国产一区二区三 | 又色又爽的网站 | 五月婷婷操 | 亚洲精品资源在线 | 久久国内精品 | 免费在线观看毛片网站 | 亚洲精品视频在线播放 | 在线免费性生活片 | www.久久免费 | 久久少妇 | 日韩最新理论电影 | 午夜精品电影一区二区在线 | 99国产在线 | 美女视频黄免费网站 | 日韩欧美一区视频 | 人人干天天射 | 免费看一及片 | 亚洲女在线 | 人人狠狠综合久久亚洲 | 精品国产乱码久久久久久天美 | 伊人天天干 | 永久免费精品视频网站 | av日韩中文 | 中文字幕一区在线 | 成人午夜电影在线播放 | 97av影院 | 欧美激情精品久久久久久免费 | 午夜国产福利在线观看 | 久久久精品日本 | 麻豆va一区二区三区久久浪 | 国产视频一区在线 | 在线黄色毛片 | 国产成人亚洲精品自产在线 | 国内精品久久久久久久 | 9999亚洲| 人人爽爽人人 | 美女一二三区 | 亚洲理论在线观看 | 日本久久免费电影 | 超碰在线最新网址 | 国产999精品久久久久久麻豆 | 亚洲一级片| 看国产黄色片 | 免费亚洲黄色 | 夜夜躁狠狠躁日日躁 | 一区二区三区在线播放 | 日本乱视频 | 日本黄色免费电影网站 | 最新中文字幕在线资源 | 99国产一区二区三精品乱码 | 国产伦理一区二区 | 亚洲国产中文字幕在线 | 在线 国产 亚洲 欧美 | 欧美日韩精品在线播放 | 韩国av免费在线 | 四虎成人精品在永久免费 | 亚洲伊人婷婷 | 99热99re6国产在线播放 | 91香蕉久久| 国产一区麻豆 | 亚洲女人天堂成人av在线 | 超级碰99 | 国产精品igao视频网网址 | 久久久久国产精品免费免费搜索 | 国产一区二区精品91 | 国产日本在线播放 | 一区二区不卡 | 久久久久久久久久免费视频 | 五月婷色 | 国产精品一区二区久久久 | 国产黑丝一区二区 | 久热电影 | 日韩欧美aaa| 天天射天天添 | 99爱视频在线观看 | 国产亚洲91 | 成人性生交大片免费观看网站 | 麻豆精品视频 | 久草在线高清视频 | 日本成人中文字幕在线观看 | 免费黄色在线 | 婷婷久久网 | 日韩高清免费在线 | 国产亚洲欧美在线视频 | 在线韩国电影免费观影完整版 | 欧美一级在线看 | 字幕网资源站中文字幕 | 久久最新网址 | 国产色网 | 国产精品免费观看国产网曝瓜 | 久久久久一区 | 国产精品久99 | 美女搞黄国产视频网站 | 天天躁日日躁狠狠躁av中文 | 成人h视频在线播放 | 日韩精品久久中文字幕 | 一区 二区电影免费在线观看 | 国产 av 日韩 | 亚洲综合在线一区二区三区 | 黄色国产精品 | 97国产大学生情侣酒店的特点 | 欧美日本一二三 | 欧美日韩视频精品 | 69xxxx欧美 | 免费在线91 | www.888av| 蜜桃av综合网 | 免费久久网站 | 人人干在线 | 成人精品一区二区三区电影免费 | 日韩一区二区三免费高清在线观看 | 日韩精品一区二区三区免费视频观看 | 久久新视频 | 国产欧美最新羞羞视频在线观看 | 九色91在线视频 | 中文字幕在线观看视频一区 | av网站免费线看精品 | 精品美女久久久久 | 国产群p视频 | 免费色视频网站 | 麻豆视频国产 | 高清一区二区三区av | 精品亚洲网 | 天天躁日日躁狠狠躁av麻豆 | 青青河边草免费观看完整版高清 | 在线成人国产 | 亚洲一区天堂 | 免费精品在线 | 日韩va在线观看 | 成人一级免费电影 | 久久精品99国产精品 | 日本精品视频网站 | 国产精品久久久久久久久蜜臀 | 伊人国产视频 | 一级久久精品 | 日韩在线观看网站 | 欧美一二区在线 | 在线黄色观看 | 亚洲欧美日韩国产精品一区午夜 | 国产69精品久久app免费版 | 亚洲人在线7777777精品 | 六月激情网 | 欧美成人黄 | 曰本三级在线 | 六月丁香综合网 | 免费高清在线观看成人 | 黄色国产精品 | 亚洲精品女人久久久 | 亚洲视频综合在线 | 香蕉日日| 在线观看黄网 | 四虎4hu永久免费 | 五月天网页 | 日韩av看片 | 亚洲欧美成人综合 | 国产高清免费在线播放 | 最近中文字幕视频完整版 | 成人一区二区三区中文字幕 | 伊人在线视频 | 亚洲欧洲精品一区 | 国内精品小视频 | 国产一区免费在线观看 | 亚洲精品久 | 久久久久久久久国产 | 精品在线小视频 | 日韩免费久久 | 欧美一区在线观看视频 | 欧美一二三视频 | 成人在线电影观看 | 91探花系列在线播放 | 日本不卡视频 | 在线观影网站 | 在线 国产 日韩 | 在线观看视频99 | 免费情缘 | 免费视频三区 | 亚洲另类在线视频 | 豆豆色资源网xfplay | 日韩一区二区三区高清在线观看 | 亚洲人在线视频 | 国产一区在线视频 | 一本一本久久a久久精品综合妖精 | 九月婷婷色 | 91热爆在线观看 | 久久视频一区 | 中文字幕中文字幕中文字幕 | 狠狠干 狠狠操 | 中文字幕在线国产 | 91视频com | 日韩免费电影网站 | 国产91精品在线观看 | 欧美一区二区日韩一区二区 | 一区二区三区四区五区在线视频 | 国产精品综合在线 | 欧美精品v国产精品v日韩精品 | 综合色久 | bbbb操bbbb| 婷婷激情av| 在线观看一 | 亚洲天堂视频在线 | 中文字幕中文字幕在线中文字幕三区 | 婷婷久久丁香 | 久草在线手机观看 | 热久久免费国产视频 | 国产精品久久网 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 亚洲第一香蕉视频 | 一级黄色在线免费观看 | 91探花国产综合在线精品 | 亚洲日韩中文字幕 | 天天操狠狠操夜夜操 | 美女国产精品 | 午夜视频免费 | 激情五月婷婷网 | 国产69精品久久久久久久久久 | 日产中文字幕 | 在线观看韩日电影免费 | a成人v在线 | 视频91在线| 久久福利小视频 | 日韩免费一区二区在线观看 | 色婷婷国产精品一区在线观看 | av亚洲产国偷v产偷v自拍小说 | 成人欧美在线 | 黄色资源在线 | 亚洲综合成人av | 日韩在线观看一区二区 | 午夜久久成人 | 婷婷久久一区 | 激情视频网页 | 最近最新最好看中文视频 | 香蕉视频在线播放 | 国产在线精品一区二区三区 | 成年人免费看片 | 亚洲va在线va天堂va偷拍 | 伊人色综合久久天天 | 蜜臀久久99精品久久久久久网站 | 久久男人免费视频 | 亚洲精品播放 | 亚洲国产69 | 在线观看视频国产 | 久草资源在线观看 | 国产精品18久久久久白浆 | 亚洲 欧美 成人 | 亚洲精品美女久久17c | 欧美日性视频 | 欧美经典久久 | 久久精品久久精品 | 在线观看一区二区视频 | 精品视频在线视频 | 综合五月婷婷 | 又黄又爽又湿又无遮挡的在线视频 | 夜夜爽88888免费视频4848 | 亚洲美女在线一区 | 91视频免费网站 | 久久新| 奇米影视四色8888 | 伊人婷婷久久 | 伊人狠狠色 | 东方av免费在线观看 | 五月天六月丁香 | 成人久久毛片 | 国产一区二区精品久久 | 91亚洲精品国产 | 精品久久久久久亚洲综合网站 | 中文字幕在线观看视频一区 | 午夜电影久久久 | www.com.日本一级| 日韩中文字幕免费视频 | av播放在线 | 亚洲黄色a | 在线亚洲免费视频 | 在线观看黄色小视频 | 国产一区在线播放 | 欧美视频二区 | 久久久久综合网 | 五月婷婷黄色 | 成年人网站免费观看 | 精品国产一区二区三区四区vr | 久草91视频 | wwwww.国产 | av色网站| 一级精品视频在线观看宜春院 | 国产高清视频免费最新在线 | 麻豆首页| 高清不卡一区二区三区 | 日韩中文在线观看 | 99久久精品费精品 | 久久久久97国产 | 国产精品白浆 | 日韩精品中文字幕久久臀 | 亚洲精品欧美精品 | 毛片3| 国产成人综合图片 | 97成人精品区在线播放 | 国产在线精品区 | 一区二区理论片 | 顶级欧美色妇4khd | 丁香视频五月 | 久久久国产高清 | 久久精品视频日本 | 久久99九九99精品 | 99热网站| 成人三级黄色 | 久久久久久久久久毛片 | 国产精品6999成人免费视频 | 欧美一级在线观看视频 | 天天综合网在线 | 麻豆视频免费看 | av五月婷婷| 香蕉久久久久久久 | 国产精品久久久久免费 | 精品国内自产拍在线观看视频 | 亚洲精品国产高清 | 97在线观视频免费观看 | 久久字幕网 | 四虎在线观看视频 | 国产精品福利视频 | 精品久久久久久电影 | 日韩激情中文字幕 | 韩日精品在线 | 亚洲精品玖玖玖av在线看 | 成人资源在线观看 | 日韩精品在线免费播放 | 日日夜夜精品网站 | 正在播放国产一区二区 | 日韩免费一级a毛片在线播放一级 | 亚洲国产偷 | 欧美精品久久久久性色 | 999在线视频 | 国产精品久久久久久久av大片 | 在线观看完整版 | 久久精品欧美一区 | 狠狠色伊人亚洲综合网站野外 | 国产精品完整版 | 国产精品久久99综合免费观看尤物 | av在线直接看 | 99久久久国产精品免费观看 | 久草线| 国产一区欧美一区 | 国产在线国产 | 99国产精品久久久久久久久久 | 欧美日韩精品二区第二页 | 96亚洲精品久久久蜜桃 | 亚洲精品动漫成人3d无尽在线 | 国产黄色片一级 | 免费a视频在线观看 | 欧美成年人在线观看 | 国产黑丝一区二区 | 日本护士三级少妇三级999 | 91在线免费播放 | 欧美性做爰猛烈叫床潮 | 91九色国产在线 | 美国av大片 | 噜噜色官网 | 成人国产精品久久久久久亚洲 | 911久久香蕉国产线看观看 | 亚洲精品国产精品久久99 | 日韩乱码在线 | 国产精品毛片久久久久久 | 美女一二三区 | 久久免费大片 | 久久香蕉国产精品麻豆粉嫩av | 免费的黄色的网站 | 成人av资源站| 色综合夜色一区 | 亚洲最新av在线网站 | 亚洲黄色免费在线 | www免费看| 337p日本欧洲亚洲大胆裸体艺术 | 精品国内| 91精品视频免费观看 | av看片网| 中文字幕精品一区久久久久 | 欧美日韩视频一区二区三区 | 天天操天天干天天插 | 久久久91精品国产一区二区三区 | 国产一区欧美二区 | 国产亚洲精品久久久久久电影 | 99热在线看 | 91麻豆精品91久久久久同性 | 久久久久久久久久久网站 | 国产精品嫩草影院9 | 国产一区二区在线免费播放 | 99久久精品久久久久久动态片 | 日日碰狠狠添天天爽超碰97久久 | 激情五月综合网 | 视频国产区| 日日日视频| 国产一级片免费视频 | 亚洲乱码久久 | 久草新在线 | 国产专区欧美专区 | 欧美日韩精品在线视频 | 人人干狠狠干 | 欧美最新另类人妖 | 69精品久久久 | av动图| 亚洲黄色一级大片 | 亚洲精品小区久久久久久 | 亚洲91精品在线观看 | 亚洲精品九九 | 免费av的网站 | 伊人中文在线 | 波多野结衣电影一区二区 | www久久99| 97av影院| 在线国产91 | 狠狠五月婷婷 | 干综合网 | 久久 亚洲视频 | 91av国产视频| 亚洲 成人 欧美 | 91精品国产乱码久久桃 | 欧美精品一区二区性色 | 亚洲综合色站 | 国产小视频你懂的在线 | 911香蕉视频 | 黄色www免费| 久久精品视频观看 | 欧美日韩国内在线 | 特级a毛片| 亚洲精品乱码久久 | 国产亚洲综合性久久久影院 | 天天综合导航 | 夜色在线资源 | 免费福利片2019潦草影视午夜 | 日本视频高清 | 麻豆视频观看 | 精品国内自产拍在线观看视频 | 日韩精品一区二区三区不卡 | 国产一区二区三区在线免费观看 | 久久国产精品小视频 | 国产精品久免费的黄网站 | 亚洲乱码精品久久久 | 好看av在线 | 国产日韩欧美在线观看 | 国产成人一区二区三区在线观看 | 国产午夜一区二区 | 欧美伦理一区二区三区 | 久久免费精彩视频 | 精品福利在线 | 精品伊人久久久 | 草免费视频 | 国产一区视频免费在线观看 | 亚洲国产精品va在线看 | 有码中文在线 | 2018好看的中文在线观看 | 国产精品九九久久久久久久 | 91伊人久久大香线蕉蜜芽人口 | 四虎免费在线观看视频 | www亚洲精品 | 亚洲高清在线精品 | 久久五月婷婷丁香 | 狠狠色丁香久久婷婷综合丁香 | 日韩网页 | 天堂久久电影网 | 日韩激情小视频 | 91精品一区二区三区久久久久久 | 亚洲国产精品500在线观看 | 欧美日韩精品电影 | 黄色中文字幕在线 | 超碰最新网址 | 欧美性生活小视频 | 超碰在线色 | 国产美女免费看 | 深夜精品福利 | 久久综合九色综合欧美就去吻 | 中文字幕在线免费看线人 | 久久一级片 | 精品久久91 | 国产精品一区二区你懂的 | 国产精品成人国产乱 | 香蕉视频在线播放 | 69av在线播放| 成人av在线资源 | 国产精品大片在线观看 | 欧美色图狠狠干 | 国产最顶级的黄色片在线免费观看 | 国产精品嫩草在线 | 国产精品 中文在线 | 韩日电影在线 | 国产午夜激情视频 | 中文字幕免费观看全部电影 | 婷婷丁香花| 国产精品99蜜臀久久不卡二区 | 午夜资源站 | 日韩久久影院 | 99精品偷拍视频一区二区三区 | 91亚洲精品久久久蜜桃 | 天天色综合1 | 久久久天堂 | 成全在线视频免费观看 | 婷婷网站天天婷婷网站 | 久久综合色综合88 | www在线观看国产 | 成+人+色综合 | 349k.cc看片app | 日韩动漫免费观看高清完整版在线观看 | 97成人精品区在线播放 | 天天操天天操一操 | 女人18片毛片90分钟 | 亚洲成av | 日本爱爱免费视频 | 亚洲国产成人精品在线观看 | 亚洲闷骚少妇在线观看网站 | 亚洲成人午夜av | av在线免费在线 | 久久久久综合网 | 国产流白浆高潮在线观看 | 欧美另类重口 | 韩日电影在线免费看 | 久久精品这里热有精品 | 91精品国自产在线偷拍蜜桃 | 国产婷婷视频在线 | 成人欧美一区二区三区黑人麻豆 | 天天摸日日操 | 四虎永久免费网站 | 婷婷午夜激情 | 国产三级久久久 | 黄色毛片电影 | 成人在线一区二区 | 欧美色综合天天久久综合精品 | 91网在线观看 | 久久久免费视频播放 | 欧美精品生活片 | 国产乱对白刺激视频不卡 | 懂色av一区二区在线播放 | 天天色天天射天天操 | 亚洲精品资源在线 | 亚洲天堂网视频在线观看 | 九九九国产 | 国产视频 亚洲视频 | 久久午夜精品影院一区 | 500部大龄熟乱视频 欧美日本三级 | 欧美成人影音 | 国产一区在线免费 | 99久久精品视频免费 | 国产黄色大片 | 久久最新视频 | 久久综合色8888| 伊甸园永久入口www 99热 精品在线 | 久久女同性恋中文字幕 | 色综合久久久久综合体桃花网 | zzijzzij日本成熟少妇 | 久久久久免费网站 | 最近免费观看的电影完整版 | 91香蕉视频污在线 | 国产精品毛片久久久久久久 | 国产美女精彩久久 | 九九免费观看全部免费视频 | 久久91网| www欧美xxxx| 一级片黄色片网站 | 色婷婷激情 | 国产日韩在线观看一区 | www.国产高清 | 久草在线精品观看 | 色婷婷亚洲婷婷 | 91色网址| 黄色成年片 | 四虎国产精 | 久久精品久久久久 | 久久国产视频网站 | 国产一区二区三区高清播放 | 青草视频在线免费 | 亚洲综合网 | www日| 欧美性成人 | 成人av电影免费在线观看 | 伊人天天干 | 亚洲自拍自偷 | 99亚洲国产精品 | 天天操天天操天天操天天 | 亚洲天天在线日亚洲洲精 | 狠狠躁日日躁夜夜躁av | 99综合视频| 亚洲成人av一区二区 | 黄色a大片| 国产麻豆剧传媒免费观看 | 国产麻豆精品久久一二三 | 五月在线视频 | 激情动态 | 亚洲精品97 | 91精品办公室少妇高潮对白 | 涩涩网站在线观看 | 国产性天天综合网 | 人人插人人做 | 色综合久久久久综合体桃花网 | 97超级碰碰| 精品久久久久久久久久久久久久久久久久 | 99精品国产免费久久久久久下载 | 又黄又爽又湿又无遮挡的在线视频 | 91成人短视频在线观看 | 在线视频亚洲 | 夜夜操狠狠干 | 精品资源在线 | 亚洲国产精品成人女人久久 | 天天干天天拍天天操 | 亚洲精品456在线播放 | 成人h动漫在线看 | 久久久久国产精品午夜一区 | 国产日本在线播放 | 黄色三几片 | 人人超碰人人 | 亚洲精选99| 黄色av电影网 | 天天操天天色天天射 | 久久全国免费视频 | 国产99久久久国产精品免费二区 | 天天操夜夜操夜夜操 | a天堂在线看| 国际精品久久久 | 久久精品99国产精品 | 日本精油按摩3 | 五月婷丁香网 | 日韩午夜三级 | 国内少妇自拍视频一区 | 日韩一级黄色av | 97精品国产 | 色全色在线资源网 | 精品人妖videos欧美人妖 | 韩国一区二区三区在线观看 | 久久综合五月婷婷 | 日韩精品一区二区三区水蜜桃 | 久久精品中文 | 亚洲黄色在线看 | 日韩av影片在线观看 | 欧美一级免费黄色片 | 中文字幕人成不卡一区 | 天天插天天狠天天透 | 国产精品国产三级国产aⅴ入口 | 在线观看免费福利 | 久久久久| 毛片网站在线观看 | 91超级碰碰 | 国产韩国精品一区二区三区 | 国产精品一区二区麻豆 | 免费在线观看不卡av | 国产精品久久精品国产 | 中文字幕在线观看资源 | 亚洲精品99久久久久中文字幕 | 久久综合天天 | 久久av福利| 日韩激情免费视频 | 国产精品视频久久久 | 久草精品电影 | 国产91对白在线播 | 国产理伦在线 | 久久96国产精品久久99软件 | 欧美日韩精品在线观看视频 | 日韩高清精品免费观看 | 91色国产在线 | 91精品国产乱码久久桃 | 99久久99久久精品 | 欧美一区视频 | 成人精品福利 | 亚洲精品国产欧美在线观看 | 久久永久免费 | 激情综合亚洲 | 欧美激情精品久久久久久免费印度 | 在线看成人 | 激情黄色一级片 | 久久99精品久久久久久三级 | 国产成人性色生活片 | 亚洲丝袜一区 | 欧美a级在线 | 顶级欧美色妇4khd | 日韩精品一区二区三区免费观看视频 | 国产一二区在线观看 | 五月开心婷婷 | 国产精品精品国产色婷婷 | 免费进去里的视频 | 国产精品自在线 | 国产中文在线字幕 | 国产无吗一区二区三区在线欢 | 日本xxxx裸体xxxx17| 亚洲精欧美一区二区精品 | 亚洲最大色| a天堂在线看| 久久久www成人免费毛片麻豆 | 日日草av| 99 久久久久 | 人人爽久久久噜噜噜电影 | 久久爱影视i | 日韩a在线观看 | 成人毛片在线观看视频 | 91精品老司机久久一区啪 | 黄av在线| 午夜精品一区二区三区在线视频 | 欧美大片aaa | 久久久久久久看片 | 婷婷五月在线视频 | 精品亚洲网 | 久久久久高清毛片一级 | 久久久精品国产一区二区三区 | av在线8| 日日日干 | 久久精品视频播放 | 国产美女视频 | 日韩成人免费电影 | 日韩视频一区二区三区 | 国产字幕在线播放 | 亚洲一区精品人人爽人人躁 | 久久综合五月天婷婷伊人 | 中文字幕a∨在线乱码免费看 | 日本中文字幕在线电影 | 久久精品国产精品亚洲 | 亚洲最快最全在线视频 | 国产精品手机看片 | av电影免费在线播放 | 天天干天天怕 | 综合久久影院 | 精品黄色视 | 国产精品va最新国产精品视频 | 波多野结衣一区二区 | avwww在线观看 | 免费看的国产视频网站 | 最近中文字幕免费视频 | 成人av日韩 | 国产一级性生活 | av中文字幕不卡 | 精品国产美女 | 最新av观看| 麻豆国产精品永久免费视频 | 狠狠操精品 | 中文字幕在线观看国产 | 国产亚州精品视频 | 久久精品网址 | 国产一区二区三区视频在线 | 伊人伊成久久人综合网小说 | 欧美日韩一区二区久久 | 91麻豆精品一区二区三区 | 91资源在线| 日本中文字幕视频 | 国产精品视频永久免费播放 | 久久国语露脸国产精品电影 | 国产999久久久 | 在线播放第一页 | 五月天久久激情 | 精品嫩模福利一区二区蜜臀 | 中文字幕刺激在线 | 日韩精品一区二区在线 | 国产精品免费久久久 | 一区二区不卡高清 | 色香蕉在线视频 | 欧美日韩中文在线观看 | 黄色性av | 国产精品高清在线 | 黄av免费在线观看 | 成人黄色影片在线 | 亚洲禁18久人片 | 正在播放一区二区 | 毛片区 | 久草视频免费看 | 日韩精品一区二区三区电影 | 国产精品毛片网 | 五月开心婷婷网 | 天天色天天操综合 | 深爱综合网 | 国产精品久久一区二区三区不卡 | 少妇搡bbbb搡bbb搡aa | 中文字幕一区2区3区 | 成人av网址大全 | 中文字幕字幕中文 | 成年免费在线视频 | 国产一区二区久久精品 | 日韩视频图片 | 国产91九色视频 | 国产成人精品一二三区 | 精品一区二区三区四区在线 | 99精品免费在线 | 啪啪肉肉污av国网站 | 精品久久久久国产 | 一区二区三区在线免费播放 | 久久国产乱 | 99久久精 | 日韩视频在线观看视频 | 欧美精品一区二区蜜臀亚洲 | 国产成人精品亚洲 | 国产精品一区二区麻豆 | 波多野结衣在线观看一区 | 天天操比 | 99爱在线观看| 一区二区三区国 | www.久久色| 久久精品亚洲 | 在线观看国产一区二区 | 91成人精品一区在线播放69 | 天天爱天天操 | 天天操天天干天天爽 | 337p日本欧洲亚洲大胆裸体艺术 | 中文av不卡 | 国产精品va最新国产精品视频 | 狠狠色丁香婷婷综合最新地址 | 国偷自产视频一区二区久 | 久久久影片 | av免费电影在线 | 人人狠狠综合久久亚洲婷 | 美女视频黄频大全免费 | 天天干天天拍天天操天天拍 | 中文字幕日本特黄aa毛片 | 五月天久久精品 | 欧美亚洲精品一区 | 五月婷婷操 | 亚洲欧洲日韩在线观看 | 97香蕉视频 | 九九视频在线观看视频6 | 国产亚洲视频在线观看 | 久久精品亚洲精品国产欧美 | 成人在线免费av | 亚洲成人一区 | 久久久国产在线视频 | 缴情综合网五月天 | 91豆麻精品91久久久久久 | 黄色av电影在线观看 | 国产一区福利在线 | 99久久精品午夜一区二区小说 | 国产麻豆剧果冻传媒视频播放量 | 国产午夜精品一区二区三区在线观看 | 国产精品 久久 | 天天综合网天天 | 国产精品成人av在线 | 天堂中文在线视频 | 日韩欧美视频二区 | 91在线看网站 | 成人天堂网 | 国产精选在线 | 国内精品一区二区 | 天天天干天天射天天天操 | 有没有在线观看av | 亚洲国产日本 | 国产精品白浆视频 | 超碰国产在线 | 黄色三级在线 | 久99久视频 | 99精品视频在线看 | 欧美做受高潮1 | 国产在线观看地址 | 久久综合久久综合九色 | 亚一亚二国产专区 | 日本久久久精品视频 | 免费国产黄线在线观看视频 | 午夜精品久久久久久久久久久 | 成人久久18免费网站麻豆 | 在线观看资源 | 国产精品久久久久久久av电影 | 国产视频1| 亚洲蜜桃av | 97夜夜澡人人双人人人喊 | 在线免费性生活片 | 天天躁天天躁天天躁婷 | 丁香激情视频 | 99国产精品视频免费观看一公开 | 麻豆av一区二区三区在线观看 | 色射爱| 亚洲激情网站免费观看 | 91久久精品一区二区三区 | 在线观看完整版 | 精品乱码一区二区三四区 | 波多野结衣一区 | 国产精品成人免费精品自在线观看 | 玖玖视频国产 | 成人午夜久久 | 天天激情天天干 | 丁香六月婷婷开心婷婷网 | 免费亚洲黄色 | 亚洲欧洲av在线 | 欧美日韩国产在线一区 | 99999精品视频 | 日韩av影视在线观看 | 国内外激情视频 | 精品国产激情 | 中文字幕亚洲国产 | 欧美性高跟鞋xxxxhd | 日韩美视频 | 国产黄色片在线免费观看 | 91精品国产电影 | 在线观看视频免费播放 | 一区二区免费不卡在线 | 亚洲影院天堂 | 成人av电影免费 | 日韩激情综合 | 欧美一区二区三区在线 | 精品视频久久久久久 | 色悠悠久久综合 | 91在线区 | 五月婷视频 | 精品在线视频一区二区三区 | 亚洲永久精品视频 | 久久er99热精品一区二区三区 | 一区二区三区视频在线 | 久久97精品 | 精品久久片 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 狠狠天天| 在线电影 你懂得 | 国产高清精品在线 | 伊人久久av| 国产精品对白一区二区三区 | 久久精品爱视频 | 国产精品一区二区免费看 | 亚洲精品一区二区久 | 曰韩在线| 97视频在线观看成人 | 午夜国产在线观看 | 一区二区日韩av | 亚洲精品在线观看中文字幕 | 久久国产一区二区 | 精品人妖videos欧美人妖 | 国产精品乱码在线 | av在线一级 |