1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
<!DOCTYPE html
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- saved from url=(0014)about:internet -->
<html xmlns:MSHelp="http://www.microsoft.com/MSHelp/" lang="en-us" xml:lang="en-us"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="DC.Type" content="topic">
<meta name="DC.Title" content="Using Circular Buffers">
<meta name="DC.subject" content="Using Circular Buffers">
<meta name="keywords" content="Using Circular Buffers">
<meta name="DC.Relation" scheme="URI" content="../tbb_userguide/Working_on_the_Assembly_Line_pipeline.htm">
<meta name="DC.Format" content="XHTML">
<meta name="DC.Identifier" content="tutorial_Using_Circular_Buffers">
<link rel="stylesheet" type="text/css" href="../intel_css_styles.css">
<title>Using Circular Buffers</title>
<xml>
<MSHelp:Attr Name="DocSet" Value="Intel"></MSHelp:Attr>
<MSHelp:Attr Name="Locale" Value="kbEnglish"></MSHelp:Attr>
<MSHelp:Attr Name="TopicType" Value="kbReference"></MSHelp:Attr>
</xml>
</head>
<body id="tutorial_Using_Circular_Buffers">
<!-- ==============(Start:NavScript)================= -->
<script src="..\NavScript.js" language="JavaScript1.2" type="text/javascript"></script>
<script language="JavaScript1.2" type="text/javascript">WriteNavLink(1);</script>
<!-- ==============(End:NavScript)================= -->
<a name="tutorial_Using_Circular_Buffers"><!-- --></a>
<h1 class="topictitle1">Using Circular Buffers</h1>
<div>
<p>Circular buffers can sometimes be used to minimize the overhead of
allocating and freeing the items passed between pipeline filters. If the first
filter to create an item and last filter to consume an item are both
<samp class="codeph">serial_in_order</samp>, the items can be allocated and freed
via a circular buffer of size at least
<samp class="codeph">ntoken</samp>, where
<samp class="codeph">ntoken</samp> is the first parameter to
<samp class="codeph">parallel_pipeline</samp>. Under these conditions, no checking
of whether an item is still in use is necessary.
</p>
<p>The reason this works is that at most
<samp class="codeph">ntoken</samp> items can be in flight, and items will be freed
in the order that they were allocated. Hence by the time the circular buffer
wraps around to reallocate an item, the item must have been freed from its
previous use in the pipeline. If the first and last filter are
<em>not</em>
<samp class="codeph">serial_in_order</samp>, then you have to keep track of which
buffers are currently in use, because buffers might not be retired in the same
order they were allocated.
</p>
</div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="../tbb_userguide/Working_on_the_Assembly_Line_pipeline.htm">Working on the Assembly Line: pipeline</a></div>
</div>
<div></div>
</body>
</html>
|