two important database operations are sorting and joins .
these operations have three primary hardware - related costs : disk access , cpu operation and main memory access .
the growth of main memory in current computers implies that main memory databases become more popular . for main memory databases ,
the bottleneck moves from disk to main memory and the cost for disk access is not an issue anymore .
further , the growing cpu - memory gap implies that cpu costs represent an increasingly small portion of the total time .
this has been borne out by several studies of dbms  @xcite .
the impact of the cpu - memory gap was popularized by the paper of wulf and mckee  @xcite on the _ memory wall_.    the diminishing role of the cpu in the total running time is partially accounted for by increasing cpu speeds and greater on - chip functional parallelism . in part , it is also accounted for because most cpus today implement non - blocking caches and hardware prefetch in order to overlap cpu execution with memory access  @xcite . hence , memory access becomes the bottleneck .
therefore , we follow the example of previous researchers  @xcite in concentrating on main memory as the bottleneck .    at the heart of this memory bottleneck
lies the _ record retrieval problem _ : the problem of copying records from a source array into a destination array according to a new ordering . in a typical application ,
one will be given a source data file , a sequence of _ record ids _
( rids ) for that data file , and a destination file .
the task is to copy the source records into the destination file in the order specified by the sequence of rids .
fast record retrieval is the key to faster sorting and faster joins .    a standard approach for data retrieval accesses the records of the source data file directly according to the sequence of the rids .
this implies random access to the main memory .
this , for example , is what was done in alphasort  @xcite and superscalarsort  @xcite , the current record holders for the datamation sorting challenge  @xcite .
however , the cost of such random access has now become the dominant cost in main memory sorting , since the cpu - memory gap has widened still further since the original work on sorting .
( in fact , alphasort and superscalarsort sort data on disk , but the size of the data file , 100  mb , is small enough that the disk access consists solely of reading the source data file from disk , and writing to a destination data file .
)    random access is harmful not just in disk resident databases , but also in main memory resident databases .
current dram technologies , such as ddr ram and rambus ram ( rdram ) , extract a large latency penalty for any non - sequential access to ram .
this is because the memory chips are divided into memory pages of several kilobytes , and there is a latency penalty for switching to a new memory page  @xcite .
random access to ram also harms performance in a second manner .
random access incurs a heavy penalty when large cache blocks are used . on a cache miss , the entire cache block is loaded into memory . if the record size is small compared to the cache block size , then there is a large overhead to load the entire cache block .
for example , for a cache miss on a pentium  4 with ddr-266 ram , approximately 60  ns are spent loading the cache block , and approximately 60  ns are spent waiting on the latency of ddr ram .
the trend is toward larger cache blocks .
the 128  byte l2 cache blocks of the pentium  4 are four times larger than those of the pentium  iii .
the ibm power4 processor goes still further using 512  byte l3 cache blocks .
the solution to avoid these latency penalties in main memory is to access main memory sequentially .
this is similar in spirit to the way in which traditional databases strongly prefer to access disk sequentially . in analogy with operation on disk ,
two - pass algorithms are a key for faster main memory performance .
the dpg - based sorting algorithms immediately yield faster sorting algorithms . both alphasort and superscalarsort sort their data essentially in three phases : extraction of key - pointer pairs ; sorting of the key - pointer pairs ; and copying of the original records into the destination array according to the sorted key - pointer pairs .
the last phase is essentially record retrieval .
a re - implementation of alphasort and superscalarsort on a ibm p690 turbo shows that the record retrieval phase now dominates the running time . with the dpg record retrieval algorithm replacing the standard record retrieval algorithm
, we immediately produce a faster sorting algorithm . in the re - implementation of superscalarsort ,
the versions with dpg as an accelerator are 27% faster .
a direct consequence of faster record retrieval is faster main memory sort - merge joins .
for example , in implementing sort - merge join using superscalarsort , we find that the use of dpg sort instead of superscalarsort results in a 27% faster join algorithm .. the dpg record retrieval phase in isolation is 48% faster than traditional record retrieval algorithm .
finally , we apply dpg algorithm in the context of _ foreign key joins_. in a foreign key join the join key is the same as the foreign key .
we assume that one relation has an secondary index on the join key .
foreign key joins have the advantage that one need only rearrange the records of one of the files .
this is in distinction to sort - merge join and hash join , which both require to rearrange each of the two files into a new file with join key values in sorted order .
foreign key joins require less record retrieval because it is possible to first extract _ join triples _ , ( @xmath0 , rid@xmath1 , rid@xmath2 ) , where @xmath3 and @xmath4 are the two relations and @xmath0 is the join key value .
assume that @xmath3 references a foreign key of  @xmath4 . to construct a join triple ,
do file scan of  @xmath3 , for each record of  @xmath3 , its key  @xmath0 is extracted .
the secondary b - tree index of the join key on  @xmath4 is then used to derive the corresponding record i d , rid@xmath2 , with the key value  @xmath0 .
the standard index lookup is very expensive , we propose a cache efficient b - tree batch lookup to generate the join triples .
join triples reduce foreign key join to record pair retrieval .
the join triples specify the record pairs , ( rid@xmath1 , rid@xmath2 ) , to be retrieved .
one can re - order the records of  @xmath4 to match the ordering of rid@xmath1 in the sequence of record pairs . recall that ,
we do file scan for  @xmath3 , so rid@xmath1s in the join triples are in sorted order .
alternatively , one can sort the join triples according to rid@xmath2 , and re - order the records of  @xmath3 to match the ordering of rid@xmath2 in the sorted rid pairs . in either situation ,
there are fewer record retrievals , and so foreign key join is faster than a general join .
the ideas of faster record retrieval can also be applied to the general case of record pair retrieval .
many algorithms for spatial join  @xcite and temporal join  @xcite produce record pairs .
unlike equijoin , there is no single search key , and so record retrieval is more difficult .
the ideas of this paper are described in terms of foreign key join .
however , it is even simpler to translate the ideas into record pair retrieval , since an initial join triple extraction is not required .
the _ distribute - probe - gather algorithm _ ( dpg ) is a record retrieval algorithm . given a data file of records and a sequence of record ids ( rids ) for the file ,
the goal is to copy the records into a destination file with the property that the ordering of records in the destination file corresponds to the ordering of the rids in the given sequence .
for example , let the source file , # r # , be the array of records with a secondary b+ tree index on the attribute # a#. we want to place the records of # r # in sorted order according to the values of  # a#. the sequence of record ids , # s_rid # , at leaf nodes of the b+ tree is a list of record ids in sorted order according to the value of a. then , the destination file , # d # , below , will contain the corresponding records in sorted order according to the value of  # a#.    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ for each i , d[i ] = r[s_rid[i ] ] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _    in the case that the sequence of rids is a permutation of the rids for the data file , the sequence of rids acts as a permutation vector .
the destination file is then a permutation of the records in the input file .
note , however , that the dpg algorithm is not limited to permutations of data . in the case of join ,
one record from one relation may match more than one records from another relation .
in such cases portion of the original records must be duplicated .
the dpg algorithm also works for this case .
the input for the algorithm is : a list of rids , # rid_list # , and a data file of records , # input#. the dpg algorithm partitions the rids , # rid_list # , into separate runs .
it also partitions the data records , # input # , into separate runs .
the algorithm makes two passes over the record ids , # rid_list # , and two passes over the records of the data file , # input#.    the ideas are presented in the context of main memory databases .
we assume that neither the sequence of rids , # rid_list # , nor the data file , # input # , fit in cache .
the dpg algorithm applies equally well as an external data retrieval algorithm between disk and main memory .
the spirit of the dpg algorithm is : try to transform arbitrary memory access patterns into sequential memory access patterns ; where arbitrary memory access patterns are unavoidable , we try to divide the data into small partitions that fit into the cache .    for a sequential access pattern ,
it is easy to maintain a buffer in cache . in the dpg algorithm
we need to read many streams simultaneously , and maintain a buffer for each stream .
hence , we want to keep the buffer as small as possible while maintaining reasonable efficiency .
we define a buffer in cache to consist of two cache blocks . when a cache block is full , it is written back to main memory and a new cache block is loaded from main memory into cache .
on pentium  4 , this is done automatically by the hardware prefetch function unit if the access to main memory is sequential . on other architectures without the hardware prefetch function unit , the software instructions , @xmath5 and @xmath6 ,
are needed to maintain the buffers .
[ [ constraints ] ] * constraints : * + + + + + + + + + + + + + +    the data records and rids are split into runs of length  @xmath7 .
the run length  @xmath7 is chosen based on two constraints .
first , the cache must be able to simultaneously hold both one run of data records of length  @xmath7 and one single buffer for the corresponding run of rids .
( this constraint applies in the second phase of dpg . )
second , the cache must simultaneously be able to hold a buffer for each run .
( this constraint applies in the first phase and in the third phase of dpg . )
these constraints are typical of the constraints for two - pass algorithms , such as external sorting .    if the data file has @xmath8  records , then the data file is partitioned into @xmath9 sets of consecutive records .
assuming an rid consists of a page i d and offset on that page , the high order bits of the page number can be used to efficiently identify the particular partition to which the rid belongs .
this assumes that the number of pages in a partition is a power of two , which can be satisfied by appropriate choice of  @xmath7 . for the sake of clarity , we assume the rids values are in the rage of @xmath10 and @xmath8 .    [
[ three - phases ] ] * three phases : * + + + + + + + + + + + + + + +    there are three phases in the dpg algorithm .
the three phases are also illustrated by pseudo - code in figure  [ fig : dpgalgo ] and by the diagram of figure  [ fig : dpg ] .
1 .   * phase i. * the first phase is the _ distribute _ phase .
one _ distributes _ the rids of # rid_list # into appropriate rid runs according to the values of the rids .
the first rid run contains the rid values in the range from @xmath10 to @xmath7 , the second rid run contains the rid values in the range from @xmath7 to @xmath11 , and so on .
both the access to every rid run and the access to # rid_list # are sequential .
therefore , one only needs to maintains a buffer in cache for each rid run and a single buffer in cache for # rid_list # , at the end , we form @xmath9 rid runs and each rid run is a permutation vector .
for example , the @xmath12-th rid run is a permutation vector in the range from @xmath13 and @xmath14 .
* phase ii . *
the second phase is the _ probe _ phase . in this phase ,
we allocate a second , temporary data file , # internal # , in main memory .
the temporary data file has the same size as the original data file , # input # , and is organized into the same number of runs as the original data file .
one then proceeds through each of the runs of rids and each of the runs of # input#. the rids from the @xmath12-th rid run are used to probe the @xmath12-th # input # run and the corresponding records are copied into the @xmath12-th # internal # run .
+ at the end , the @xmath12-th # internal # run contains the same records as the @xmath12-th # input # run , but the order of records in the # internal # run is organized according to the @xmath12-th rid run .
both the @xmath12-th rid run and the @xmath12-th # internal # run are accessed sequentially .
the @xmath12th # input # run is accessed randomly , but it can fit in cache . hence , every time , one loads the @xmath12-th # input # run entirely into cache and maintains two buffers in cache : one for the @xmath12th rid run and the other for the @xmath12-th # internal # run .
* phase iii .
* the third phase is the _ gather _ phase .
this is an inverse of the _ distribute _ phase and is similar to the merge phase of external sorting . in the _ distribute _ phase , the rids are distributed into runs . as a result of the _ probe _ phase ,
the records in a given # internal # run are now in the same order as the rids in the corresponding rid run created in phase i. hence , it suffices to gather ( merge ) the records from the # internal # runs in exactly the same order as the order of the rids in # rid_list#. more precisely , if the @xmath12-th rid was distributed to the @xmath15-th rid run during the _ distribute _ phase , then at the @xmath12-th step of the _ gather _ phase , the next record from the @xmath15-th # internal # run is copied to the destination array .
one maintains several buffers in cache : one single buffer for # rid_list # , one single buffer for the destination array , and a buffer for each # internal # run .
the dpg algorithm is presented more formally in pseudo - code in figure  [ fig : dpgalgo ] .
the input of the algorithm is an array , # rid # , of _ rids _
( record ids ) and a data file , # input_rec # , of records .
it is desired to retrieve the records from # input_rec # in the order corresponding to # rid#. the retrieved records are then written to # output_rec#.    the three phases of the dpg algorithm are illustrated by an example in figure  [ fig : dpg ] .
the input in this example is the leaf nodes of a secondary b+-tree index .
the input contains a sequence of key - rid pairs sorted according to the key values .
the output is a sequence of records sorted according to the key values of the secondary index .
the output will either be stored again on disk or else pipelined to the next stage .
the ability of the dpg algorithm to take advantage of pipelining is an important feature for sorting and joins .
the letters # a # , # b # , # c # , ... are used to indicate the sorted keys on the leaf nodes of the index .
so ( # a # , 5 ) indicates that the record with the rid value of  5 has a key value of # a#. the first two rows are for phase  i , the next three rows for phase  ii , and the following three rows for phase  iii .
the horizontal rectangle of the first row represents a sequence of key - rid pairs sorted according to the key values .
the second row represents the runs of rids into which the first row is partitioned .
similarly , the third row again represents the runs of rids , but now as part of phase  ii .
the fourth row is the partitioned runs of input records , and so on .
there are  12 elements and  3 runs in the example and each run contains  4 elements .    during * phase i * ,
one has a sequence of key - rid pairs sorted according to the key values and will distribute them into appropriate rid runs .
the first rid run will contain rid values from  0 to  3 , the second rid run will contain rid values from  4 to  7 , and the third rid run will contain rid values from  8 to  11 . upon reading the sequence of pairs from the first row ,
one places the rids in their proper runs .
for example , the rid  5 goes to the second rid run , the rid  7 goes to the second rid run , the rid  3 goes to the first rid run , the rid  8 goes to the third rid run , and so on .
the third row in the figure presents the end of phase i. in this phase , we do sequential read on a single stream and sequential writes on multiple streams .    during * phase ii * ,
one copies the original data file , # input # , to a temporary data file , # internal#. the input to this phase is the third row . in the third row , each rid run has rid values that correspond to one contiguous range of the # input # file , an # input # run .
for example , for the first rid run , we will load the first # input # run into the cache .
the first # input # run consists of the first 4 contiguous records .
the first rid in the first rid run is  3 and @xmath16 $ ] is in the cache , so one finds this record , # input[3 ] # , in cache and copies it to the buffer maintained in cache for the first # internal # run , and so on . at the end of phase  ii
, the records in the first # input # run with key values in the sequence of i , l , f , c are reordered as records in the first # internal # run with key values in the sequence of c , f , i , l. the reordering is done according to a permutation specified by the first rid run , 3 , 2 , 0 , 1 .    during * phase iii * , we will use the original rid sequence in the list of key - rid pairs to _ gather _ ( merge ) records from all # internal # run .
for example , upon reading  5 , we go to the second # internal # run to _ gather _ the record ; upon reading  7 , we go to the second # internal # run to _ gather _ the record ; upon reading  3 , we go to the first # internal # run to _ gather _ the record ; upon reading  8 we go to the third # internal # run to _ gather _ the record , and so on . for this phase
, we maintain a buffer for the key - rid list , a buffer for # output # in cache and a buffer for each # internal # run .
all buffers are in cache .
0    .... % $ ( for sake of emacs ) let $ l\gets$ ( cache_size/2 ) let $ n\gets$ num_records let num_runs $ \gets n / l$    \rm input :   integer \tt rid[num_rids ] ,      \rm record \tt input_rec[num_records ] ; \rm output : record \tt output_rec[num_rids ] ; \rm parameters : \rm integer \tt rid_run[num_runs][]\tt ,          \rm record \tt record_run[num_runs ] [ ] ;    //phase i :   { \it distribute } rid array into runs //           with each run of length $ l$ % for $ i$ = 1 , ... ,
num_runs do %    initialize write buffer of rid_run[$i$ ] for each rid , $ r$ , in rid do \ {   set { \it run\_num } = $ \lceil{}r / l\rceil$ ;   append $ r$ to rid_run[{\it run\_num } ] \ }
//phase ii :   { \it probe } partitions of input_rec % ( conceptually partition input_rec into partitions of length $ l$ and %   for each partition , $ i$ , of input_rec , probe for each rid in rid_run[$i$ ] ) for $ i$ = 1 , ...
, num_runs do \
{ %    initialize read buffer for rid_run[$i$ ]    read into memory all records from     input_rec[$(i-1)\!*\!\!l\ ! + \ !
1 $ ] to input_rec[$i\!*\!\!l$ ]    allocate memory for $ l$ records      to be stored in record_run[i ]    for each rid , $ r$ , in rid_run[$i$ ]      append input_rec[$r$ ] to record_run[$i$ ]    write out record_run[$i$ ] to disk \ }
//phase iii : { \it gather } records from record_run [ ] //   into output_rec in same order as rid [ ] % for $ i$ = 1 , ... , num_runs do %    initialize read buffer of record_run[$i$ ] for each rid , $ r$ , in rid do \
{    set { \it run\_num } = $ \lceil{}r / l\rceil$ ;    read next record from record_run[{\it run\_num } ]    append record to output_rec \ } ....      implicit in the description of the dpg algorithm is that the input sequence of rids is distributed uniformly among the set of all rids of the input data file .
this is always the case when dpg is applied to retrieve records after sorting key - pointer pairs .
in that situation , the key - pointer pairs act as a permutation vector to permute the records in the input data file .
if the input sequence of rids is not uniformly distributed , then some rid runs will be larger than other runs . as a consequence , in phase  ii , when the partition of the temporary data file ( the partition of # record_run # in figure  [ fig : dpgalgo ] )
may be larger than the size of the cache . if only a few of the partitions of the temporary data file are larger than cache then the overall running time is not greatly affected .
if there is a great deal of data skew and many of the temporary partitions # record_run # are larger than cache , then the @xmath9 partitions of the input sequence of rids must be chosen on some other basis than the high order bits of the page number . in such cases , one can invoke the data skew handling techniques of dewitt et  al .  @xcite .
their solution , reformulated in our context , is to sample the rids from the rid sequence .
the sampled set of rids is then sorted , and partitions of the rids are chosen so as to evenly partition the sampled set .
as discussed in the introduction , dpg acts as an accelerator for many main memory sorting algorithms .
recall that main memory sorts typically proceed in three phases :    1 .
extraction of key - pointer ; 2 .
sorting of the key - pointer pairs ; and 3 .
copying of the original records into the destination array according to the sorted key - pointer pairs .
alphasort  @xcite and superscalarsort  @xcite are examples of this three - phase sorting paradigm .
both sorting algorithms can be considered as main memory sorting algorithms .    in principle , the sorting algorithms are single - pass disk - based sorting algorithms .
both sorting algorithms were introduced as an answer to the datamation sorting challenge  @xcite .
the datamation challenge dictates that one is given one million records of 100  bytes .
each record has a 10  byte key .
the keys are uniformly distributed . at the time of the datamation challenge ,
external sorting algorithms were required . on today s computers , the data file of 100  mb easily fits in main memory .
hence , the only disk - related portion of the datamation challenge is to overlap disk  i / o with cpu operation .
disk striping has the potential to provide very fast disk  i / o .
this occurs because the disks are accessed in parallel .
in this situation , main memory data retrieval becomes the bottleneck .
the dpg algorithm pushes back this main memory bottleneck . by using dpg for data movement
, the largest cost of main memory sorting is reduced .
we have reimplemented the main memory portion of superscalarsort , both with and without dpg .
we use the ideas of dpg to present three new join algorithms : 1.c , 2 and  3 .
algorithms 1.a , 1.b and  4 , will be included in the experimental section  [ sec : joinexperiments ] for completeness .    1 .
sort - merge join 1 .
sort - merge join with alphasort ( sort based on  @xcite ) 2 .
sort - merge join with superscalarsort ( sort based on  @xcite ) 3 .
sort - merge join with dpg sort ( sort based on dpg ; see  [ sec : sortmergejoin ] ) 2 .
dpg - sort join ( see section  [ sec : foreignkeyjoin ] ) 3 .
dpg - move join ( see section  [ sec : foreignkeyjoin ] ) 4 .
radix join ( from  @xcite )      the well - known sort - merge join was introduced by blasgen and eswaran  @xcite .
there are two steps in sort - merge joins : sort two relations on the join key and scan the sorted relations to do a merge on the join key .
applying dpg sort at the first step provides a new faster sort - merge join method , sort - merge join with dpg sort . in sections  [ sec : sortmergejoinexperiments ] and
[ sec : joinexperiments ] , we experimentally compare different versions of sort - merge join , according to the sorting methods used .
specifically , we consider using dpg sort , alphasort and superscalarsort for the sorting step .
we next consider joins in which the join key is a foreign key , and it has an index .
we denote by  @xmath3 a non - indexed relation .
we denote by  @xmath4 an indexed relation .
the notation is motivated by the example of a foreign key join . in a foreign key join , the join key is the same as the foreign key .
so , the join key is a set of attributes in the relation  @xmath3 that refers to a foreign key from relation  @xmath4 .
a _ join triple _ is a triple ( @xmath0 , rid@xmath1 , rid@xmath2 ) , such that @xmath0 is a key value , rid@xmath1 is the rid of a record from  @xmath3 with key  @xmath0 , and rid@xmath2 the rid of a record from  @xmath4 with key  @xmath0 .
there are three steps in a foreign key join algorithm with dpg .
the first step is to construct join triples .
the second step is to use the join triples to copy one of the two relations into a temporary file according to an order derived from the join triples .
the third step is to join the temporary file with the remaining relation .
we describe the second and third steps initially in section  [ sec : foreignkeyjoin ] .
we then return to the more technical problem of efficiently constructing join triples in sections  [ sec : jointriples ] and  [ sec : indexlookup ] .
this section describes two dpg join algorithms .
it assumes that one has already constructed the join triples . some algorithms for constructing the join triples
are described later in sections  [ sec : jointriples ] and  [ sec : indexlookup ] .
assume that one has generated the join triples ( @xmath0 , rid@xmath1 , rid@xmath2 ) .
it is now possible to ignore the key  @xmath0 , and deal directly with the rid pairs ( rid@xmath1 , rid@xmath2 ) .
we wish to satisfy one of two goals :    1 .
[ item : movef ] * dpg - move join : * move the records of  @xmath4 into a temporary file according to the ordering of the records of  @xmath3 .
[ item : mover ] * dpg - sort join : * move the records of  @xmath3 into a temporary file according to the ordering of the records of  @xmath4 .
so , the rid pairs ( rid@xmath1 , rid@xmath2 ) will be sorted according to rid@xmath2 .
first consider dpg - move join .
we will see how to generate the join triples in the order of rid@xmath1 .
this is done by scanning the records of the relation  @xmath3 in file order ( in order of increasing rid@xmath1 ) .
therefore the rid pairs can be used directly as part of a dpg algorithm .
the second component of the pair , rid@xmath2 , is the sequence of rids according to which we want to move the records of  @xmath4 .
this algorithm does not require any sorting or hashing .
hence , we call it dpg - move join .
next consider dpg - sort join . in this version ,
we first sort the rid pairs ( rid@xmath1 , rid@xmath2 ) according to the order of rid@xmath2 .
this is done , for example , with superscalarsort and dpg .
the algorithm then reduces to record movement in which we wish to move the records of  @xmath3 according to the ordering of  rid@xmath2 in the sorted sequence ( rid@xmath1 , rid@xmath2 ) .
note that dpg - move join is preferred when the relation  @xmath4 is smaller .
dpg - sort join is preferred when the relation  @xmath3 is smaller .
the simplest solution for a foreign key join is to do a file scan of  @xmath3 , and for each record of  @xmath3 to extract the join key and do an index lookup in the index of  @xmath4 .
one can then join the record of  @xmath3 with the corresponding record of  @xmath4 .
this involves random access , and is economical only if the join produces very few records . in particular
, this will be the case only if the number of records of  @xmath3 is small .
a better solution is to do a file scan of  @xmath3 , and to use the index on  @xmath4 to create join triples . to construct the join triples ,
one scans the relation  @xmath3 . for each record of  @xmath3
, one extracts the corresponding rid and associated join key  @xmath0 .
one then looks up the key  @xmath0 in the index of  @xmath4 .
the index lookup yields the final element of the triple , rid@xmath2 .
note that the join triple is constructed at the cost of a file scan of  @xmath3 and an index lookup in the index of  @xmath4 for each record of  @xmath3 .
usually an index on a data file is much smaller than the full data file .
if the index fits entirely in cache , then the index lookup will be significantly cheaper than the file scan .
unfortunately , the indexes in many main memory databases generally do not fit in cache . in such cases ,
the index lookup in the index of  @xmath4 will dominate the costs .
for example , in a b+  tree indexing @xmath8  records , if an internal node has @xmath17  children , then @xmath18 nodes of the b+  tree must be accessed .
each such access will be a random access in main memory .
most of the random accesses imply a cache miss .
the cost of so many random accesses makes a naive index lookup uneconomical .
even if the index is a hash index , at least one random access in memory will be required .
luckily , it is possible to execute the index lookup faster than the above analysis would indicate .
this is because the construction of the join triples requires many index lookups , with no intervening record accesses . for purposes of join triple construction , _ batch lookup _ of keys in an index suffices . by batch lookup
, we assume that an array of join keys is first extracted by scanning the data file of  @xmath3 .
the batch lookup then produces an array of rids for  @xmath4 through the use of the index on  @xmath4 .
we show that the index lookups can be reorganized into a two - pass algorithm .
two such two - pass algorithms are demonstrated : one for b+ tree indexes , and one for hash indexes .
note that batch lookup of rids in an index can be substantially faster than individual lookup .
rao and ross had previously discussed cache conscious indexes for main memory  @xcite . there
they present css - trees , which have better cache behavior than either b+  trees or hash indexes .
however , they only consider individual lookup of keys in an index , one at a time . in their scenario , a second key
is not looked up until the index lookup of the first key has been resolved .
[ [ batch - lookup - in - b - tree - indexes ] ] * batch lookup in b+ tree indexes * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +    for simplicity , we describe the two - pass lookup for an enhanced b+  tree .
the notion of _ enhanced b+  tree _ was introduced by rao and ross  @xcite .
the idea is that all slots of a b+  tree node are used .
this is similar to compact b - trees  @xcite or to the isam method introduced by ibm  @xcite . in the context of a general b+  tree
this can be accomplished by maintaining updates to the b+  tree in a separate index , and then doing a batch update by reorganizing the b+  tree . for brevity
, we will sometimes refer to b+  tree , although in all cases , an enhanced b+  tree is intended .
assume that we are executing a file scan of  @xmath3 with the purpose of constructing the join triples .
we collect a sequence of keys from the relation  @xmath3 , and we wish to carry out a batch lookup of rids in the enhanced b+-tree .
the rids will be used to retrieve records from the foreign relation  @xmath4 .
we assume that the b+  tree does not fit in cache .
our goal is a two - pass algorithm which will efficiently accomplish batch lookup .
assume that the b+  tree has @xmath17  entries per node .
assume that the b+  tree indexes @xmath8  records .
then there are @xmath18 levels .
assume further that the first @xmath19 levels ( the top half of the b+  tree ) fit in cache .
for @xmath20 , the top half of the tree has approximately @xmath21 slots .
for example , if there are @xmath22 records , then there are 32,000 slots , which clearly fit inside cache .
the strategy is a two - pass strategy . in the first pass ,
one performs a lookup of each key , but only using the top half of the b+  tree .
as shown in figure  [ fig : btree ] , each leaf of the subtree comprising this upper half can be considered as the root of a second subtree comprising nodes in the lower half of the b+  tree .
thus , at the end of this first pass , a key can be associated with a leaf of the upper subtree , which is also a root of one of the lower subtrees .
after the first pass , one can associate each key with a subtree within the lower half of the b+  tree .
so , in the second pass , one loads a subtree from the lower half .
one then continues the lookup for all keys associated with the root of the subtree in the lower half . at the end ,
one then has a sequence of keys and rids .
if one wishes to have the keys in the same order as the order of the original rids , then this can also be arranged . in this case , one extends the previous scenario to use the dpg algorithm .
the first phase of the dpg algorithm is to _ distribute _ the keys into runs . in the initial lookup of a key in the first half
, it was associated with a root of a subtree in the first half .
the particular root of a subtree identifies the run into which the key is copied .
the second phase of the dpg algorithm is to use the key to _ probe _ the index , in order to find the rid .
one completes the lookup of all keys in a run associated with a particular subtree of the b+  tree , before proceeding to the next subtree in the lower half .
the resulting rids are stored in a temporary partition or run .
this is exactly what was described earlier .
finally , the third phase of the dpg algorithm _ gathers _ the rids into a destination array in the same order as that of the original keys .
hence , we have completed a batch lookup of the keys , and returned an array of rids in the same order as that of the original keys .
[ [ batch - lookup - in - hash - indexes ] ] * batch lookup in hash indexes * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +    batch lookup of hash indexes also proceeds in two passes .
we assume that the hash array of the hash index stores at each hash entry one key - rid pair . a second hash array associated with the index stores pointers to overflow key - rid pairs that would have collided with an occupied slot in the first hash array .
the two - pass lookup for hash indexes proceeds in a very simple manner .
we extract the sequence of keys from  @xmath3 .
as the keys are extracted , the hash values are computed .
those key - hash value pairs are saved in an array in an order corresponding to the rid order of  @xmath3 .
it now suffices to apply the dpg algorithm .
the hash array is partitioned into sets of @xmath7  hash slots . in the distribute phase ,
the hash value acts as an index into the hash array .
hence , this becomes the permutation vector of the dpg algorithm .
the key and hash value are then written into separate runs according to the partition of the hash array .
there is one run of key - hash values for each partition of the hash array .    in the probe phase , a run of hash values
is loaded into cache along with the corresponding partition of the hash array . as part of the probe phase ,
the key and hash values from the run are used to look up the the corresponding rid in the partition of the hash array .
the rids are then saved in a temporary partition , in the same order as the order in which the key - hash values of the original partition are stored .
finally , in the gather phase , the ordering of the key - hash value pairs are used to gather the rids from the temporary partition . as in section
[ sec : dpg ] , the rids are gathered into a destination array in an order corresponding the ordering of the original key - hash value pairs .
figure  [ fig : sorting ] demonstrates the acceleration achieved by superscalarsort when dpg is used .
the results are demonstrated on the ibm pseries 690 turbo .
the ibm  p690 has an l3  cache of size 128  mb .
hence , in order to realistically demonstrate dpg , we were forced to increase the size of the database .
we chose to implement superscalarsort for a data file of size 512  mb .
the record size was treated as a variable , to illustrate the influence of record size . as in the original datamation challenge ,
the key is 10  bytes .
note that the additional speed of superscalarsort with dpg is most pronounced for smaller record sizes . for record sizes of 256  bytes and higher
, dpg provides only a small advantage .
this is because the ibm p690 has an l3  cache block of size 512  bytes .
so , for record sizes below 256  bytes , a cache miss incurs significant overhead in loading a 512  byte cache block .
there was some variability in the results because the data was taken on a time - shared , shared memory machine . on the ibm  p690 ,
the l2  cache is shared among two cpus , and the l3  cache is shared among eight cpus .
our experiments were run on a single cpu .
hence another process on a neighboring cpu could consume some of our cache , thereby affecting the timings .
the reported experimental results are the averages of three runs each .
we implement two sort - merge join methods : sort - merge join with dpg sort and sort - merge join with superscalarsort .
as defined in section  [ sec : sortmergejoin ] , sort - merge join with dpg sort applies the dpg sort for the sorting phase and sort - merge join with superscalarsort applies superscalarsort for the sorting phase .
as expected , the acceleration in the speed of sort - merge join in figure  [ fig : sortmerge ] follows the same pattern as that of figure  [ fig : sorting ] for sorting . in this case , we illustrate our results on a database of size 128  mb on the ibm p690 .
the ibm p690 has an l2  cache of size 1.4  mb .
so , in this case , the l3  cache is acting as the main memory , while l2  cache is acting as the `` cache '' .      in figures  [ fig : join_nonuniform_1 ] through  [ fig : join_dup_3 ] , we now experimentally compare the six join methods originally presented at the begining of section  [ sec : joinalgodpg ] .
the three join algorithms labelled sort - merge join with dpg sort , dpg - sort join , and dpg - move join are all new .
the remaining algorithms , sort - merge join with alphasort , sort - merge join with superscalarsort , and radix join , are all based on sorting or join algorithms from the literature .
as explained earlier , we denote by  @xmath4 an indexed relation and  @xmath3 a relation that has foreign key on the indexed attribute of  @xmath4 .
we consider both uniform and non - uniform distribution of foreign key values .
[ [ the - non - uniform - distribution - of - join - key - values . ] ] * the non - uniform distribution of join key values . * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +    sort - merge join with alphasort and dpg - sort are the only two of the previously discussed join methods that operate correctly for a non - uniform distribution of join key values .    in the following we use count bucket sort for bucket sort .
the count bucket sort is as follows :    1 .
count the number of elements destined for each bucket .
2 .   set bucket boundaries according to the statics computed and distribute elements to buckets .
alphasort works for non - uniformly distributed data , because it uses quicksort to sort each run and uses replacement - selection to merge the runs .
dpg - sort join works for non - uniformly distributed data too , because we use count bucket sort to sort rids .
dpg - sort join sorts the rids according to the lowest   @xmath23 bits is enough , @xmath8 is the number of records . in the simulation
, we assign the rid values in the range @xmath24 $ ] , the lowest @xmath23 bits is sufficient for sorting . for example , for @xmath25 sorting rids according to the lowest 20 bits
is enough .
this could be done in two steps with count bucket sort : first do count bucket sort according to the lower 10 bits , then do count bucket sort according to the higher 10 bits .    using the unix @xmath26 and @xmath27 functions we generate an exponential distribution of the data as @xmath28 ( @xmath29 is a constant and in our experiments we assign c with @xmath30 ) .
a comparison of sort - merge join with alphasort and dpg - sort join on three different computer architectures is provided in the figures  [ fig : join_nonuniform_1 ] ,  [ fig : join_nonuniform_2 ] , and  [ fig : join_nonuniform_3 ] .
the three different architectures are the ibm power4 pseries 690 turbo , the 3.06 ghz pentium 4 with rambus pc-1200 ram , and the 2.6 ghz pentium 4 with ddr-266 ram , from the comparison , we can see that dpg - sort join is much faster than sort - merge join with alphasort .
[ [ the - uniform - distribution - of - join - key - values . ] ] * the uniform distribution of join key values . * + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +    first we will show how all algorithms work for uniformly distributed join key values .
superscalarsort is a key - prefix - sort explained further in section  [ sec : intro ] .
it assumes that data is uniformly distributed according to the highest  7 bits of the key .
this kind of distribution can be applied to all dpg algorithms , because a unform distribution of the join key values is the only constraint of sort - merge join with dpg and dpg - move join .
we also implement the radix join of manegold et al .
they describe a variation of hash join for main memory .
radix join also requires a uniform distribution of the join key values .
otherwise , some of their partitions will be too large to fit into the l2 cache and how to set the boundaries is unknown .
we produce uniformly distributed foreign key values using the unix @xmath26 function . a comparison of the different join methods on three different computer architectures as before is provided in the figures .
figure  [ fig : join_no_dup ] reflects data with no duplicate join key values in the relation  @xmath3 .
figures  [ fig : join_dup_1 ] ,  [ fig : join_dup_2 ] , and  [ fig : join_dup_3 ] , show the same information in which duplicate join key values are allowed . from the comparison , we can see that dpg - move join and radix join are the fastest .
dpg - move is better for large records and radix join is better for small records .
the use of dpg in the sorting provides an accelerator for existing sorting algorithms . especially for the smaller record sizes , such as 32  bytes and 64  bytes , the performance improvements are really impressive .    for the more common case of non - uniform distribution of join key values , dpg - sort join works better than sort - merge join with alphasort across all the tested platforms . for smaller records sizes , such as , 32 , 64
, dpg - sort join is much better than sort - merge join with alphasort . more impressively , on the newer platform
, rambus pc-1200 ram , dpg - sort works better than on pc with ddr-266 ram and even works better for larger record sizes , for example 512  bytes .    for special case of uniform distribution of
join key values , dpg - move join and radix join are the best .
the remaining dpg algorithms are also competitive with older algorithms although with a smaller improvement .
the dpg algorithm can be easily generalized to multiple passes
. this can be useful when there is a very small cache in relation to the size of main memory .
however , we do not encounter this scenario in our current experiments .
we would like to thank betty salzberg and donghui zhang for extensive conversations and insights into additional situations where distribute - probe - gather can be beneficial .
we also gratefully acknowledge the use of the support for the computations on the ibm p690 by the scientific computing and visualization ( scv ) group at boston university .
a. ailamaki , d.j .
dewitt , m.d .
hill , d.a .
wood , `` dbmss on a modern processor : where does time go ? '' , _
vldb99 , proceedings of 25th international conference on very large data bases _ , 1999 , pp .  266 - 277 .
l.  arge , o.  procopiuc , s.  ramaswamy , t.  suel and j.s .
vitter , `` scalable sweeping - based spatial join '' , _
vldb 1998 , proceedings of 24th international conference on very large databases _ , 1998 , pp .
570581 .
dittrich , b.  seeger , d.s .
taylor and p.  widmayer , `` progressive merge join : a generic and non - blocking sort - based join algorithm '' , _
vldb 2002 , proceedings of 28th international conference on very _ , 2002
.        web site : `` latency vs. bandwidth , a performance analysis '' , http://www.lostcircuits.com/memory/latency/2.shtml ; `` inside the eddr chip : combining dram storage and sram speed '' , http://www.lostcircuits.com/memory/eddr/ , nov .
27 , 2000 ; and `` high performance ddr dimms '' , http://www.lostcircuits.com/memory/ddr2/ , july  17 , 2001 .
k.  keeton , d.a .
patterson , y.q .
raphael and w.e .
baker `` performance characterization of a quad pentium pro smp using oltp workloads '' _ porc . of the int .
syp . on computer architecture _
, p0p .  1526 , barcelona , spain , 1998 .
s.  manegold , p.a .
boncz and m.l .
kersten , `` what happens during a join ? dissecting cpu and memory optimization effects '' , _ vldb 2000 , proceedings of 26th international conference on very large data bases , september 10 - 14 , 2000 , cairo , egypt _ , 2000 , pp .
339350 .
p. trancoso j.l .
larriba - pey , z.  zhang and j.  torellas , `` the memory performance of dss commercial workloads in shared - memory multiprocessors '' , _ int . symp . on high performance computer architecture _ , san antonio , tx , usa 1997 .


bell measurement is a crucial element of quantum communication and quantum computation protocols .
it discriminates between four entangled states known as bell states , @xmath0 where @xmath1 and @xmath2 are the logical qubit bases . in optical implementations ,
single photons with their polarization degree of freedom are typically employed to construct logical qubits @xcite . for a single photon qubit
, the bell measurement can be implemented using linear optics and photodetectors @xcite , which we shall refer to as the standard bell - measurement scheme .
this scheme , in effect , projects two photons onto a complete measurement basis of two bell states and two product states so that only two of the bell states can be unambiguously identified . due to this reason ,
the success probability of the standard bell measurement is limited to 50% @xcite , and it has been a fundamental hindrance to the implementation of a deterministic quantum teleportation and scalable quantum computation with linear optics @xcite .    in order to enhance the success probability of the bell measurement , several schemes have been proposed based on single - photon qubits using either ancillary entangled states @xcite or additional squeezing operations @xcite . instead of using single photons , different types of physical degrees of freedom of light
can also be employed to construct logical qubits , for example , using superpositions of coherent states @xcite or hybrid entanglement of single photons and coherent states @xcite .
although each of these schemes has its own merit , there exist several features to overcome in the implementation of those schemes , such as the requirement of ancillary resource entanglement @xcite or the limited success probabilities @xcite .
moreover , all aforementioned schemes suffer from the requirement of photon number resolving detection @xcite .    in this paper
, we discuss a scheme for implementing a nearly deterministic bell measurement with linear optics and photon on - off measurements @xcite .
the logical qubit is defined as a greenberger - horne - zeilinger ( ghz ) type multiphoton entangled state .
it is shown that the logical bell states can be efficiently discriminated by performing @xmath3 times of standard bell measurements , where @xmath3 is the number of photons in a logical qubit .
the limited success probability of the standard bell measurement 1/2 is overcome by the fact that each of the four logical bell states is characterized by the number of contributions from two bell states of single photon qubits , that can be identified by the standard bell measurement performed on photon pairs . as a result
, the logical bell measurement fails only when none of the @xmath3 pairs is a detectable bell state , resulting in a success probability of @xmath4 that rapidly approaches unity as @xmath3 increases .
a detailed review of our scheme will be presented in sec .
[ sec : bm ] .    in sec .
[ sec : compare ] , we compare our scheme with other well known bell measurement schemes proposed based on linear optics ; our scheme outperforms the previous proposals employing single photon qubits @xcite in its efficiency against the number of photons used in the measurement process .
the other schemes employing coherent state @xcite or optical hybrid qubits @xcite enable us to achieve even higher success probability than ours with the same average photon number usage .
however , all the other schemes except ours require photon number resolving detection , while our scheme can be performed with linear optics and photon on - off measurements only .    in sec .
[ sec : app ] , we discuss the applications of our scheme to quantum communication and computations
. we will show that a qubit in an @xmath3 photon ghz - type entanglement can be teleported with an arbitrarily high success probability with a @xmath5 photon ghz - type entangled channel as @xmath3 becomes large .
it will be shown that in our approach a complete set of universal gate operations can be constructed using only linear optics , on - off measurements and multiphoton entanglement .
we investigate the effect of photon losses , a major factor of errors , and demonstrate a fault - tolerant quantum computation in our approach .
we expect our scheme to be a competitive approach to photonic quantum information processing .
we first consider the standard bell - measurement technique for single photon qubits .
the logical basis of single photon qubits are typically defined with the photon polarization degree of freedom , in terms of either the horizontal and vertical polarization states , i.e. @xmath6 , or the diagonal states @xmath7 . here
we assume the bell states of single photon qubits in the diagonal basis , @xmath8    the standard bell - measurement scheme for single photon qubits employs linear optic elements such as polarizing beam splitter ( pbs ) , wave plates and photon detection @xcite .
it projects two photons onto a complete measurement basis of two bell states and two product states so that only two of the bell states can be identified .
for example , one can identify @xmath9 and @xmath10 using three pbs and four on - off photodetectors as illustrated in fig.[fig : scheme](a ) . for @xmath11 or @xmath12 states ,
two photons are separated into different modes at the first pbs , resulting in one click from the upper two and another from lower two detectors .
if the separated clicks have the different polarization output , i.e. , @xmath13 or @xmath14 , the result is @xmath9 , while for the same polarization output , i.e. , @xmath15 or @xmath16 , the result is @xmath10 . on the other hand , two photons of the state @xmath17 or @xmath18
proceed together via the first pbs either way to the upper or lower two detectors .
all possible clicks at the detectors from @xmath17 can equally be yielded from @xmath18 so that it is impossible to discriminate them .
therefore , the success probability of the standard bell measurement scheme is limited to 1/2 @xcite .
which two bell states are successfully identified can be selected by putting appropriate wave plates at the input modes of the first pbs
. we will refer to the standard bell measurement in fig.[fig : scheme](a ) as @xmath19 hereafter .
here we introduce a novel scheme for discriminating four bell states by using linear optics and qubits with multiphoton encoding @xcite .
we define the logical basis of qubits with @xmath3 photons as @xmath20 thus , a logical qubit is generally written in the form of a ghz - type state as @xmath21 .
the encoding of a logical qubit into @xmath3 photons can be realized , for example , by the teleportation scheme between an encoded single photon and @xmath3 photons . for this purpose
, the ghz state of @xmath22 photons is used as the teleportation channel and the encoded single photon as the input state .
let us first explain our proposal with the simplest case , i.e. , two - photon encoding ( @xmath23 ) , where the logical qubit basis are @xmath24 and @xmath25 .
the logical bell states in this encoding are written by @xmath26 where the first logical qubit is of photonic modes @xmath27 and @xmath28 while the second is of @xmath29 and @xmath30 .
if we simply rearrange the order of photon modes @xmath29 and @xmath28 , and by using the fact that @xmath31 and @xmath32 , these bell states can be represented in terms of the bell states in eq .
( [ eq : bellstatess ] ) as @xmath33 interestingly , these four bell states can be thus identified by means of two independent standard bell measurements for single photon qubits ( @xmath19 ) performed on two photons , one is from the first and the other from the second qubit as illustrated in fig.[fig : scheme](b ) . note that the photons in each qubit are indistinguishable so that any single photon can be selected arbitrarily to perform each independent @xmath19 measurement .
, for single photon qubits using linear optical elements and photon on - off detectors .
( b ) logical bell measurement for the qubits encoded with two photons .
( c ) logical bell measurement for @xmath3-photon qubits through @xmath3 times of @xmath19 measurements.,width=326 ]    let us now explain how one can discriminate the four logical bell states , keeping in mind that the @xmath19 measurement defined in the previous section can unambiguously identify @xmath9 and @xmath10 out of the four bell states of single photons . from the results of two @xmath19 measurements ,
one can identify the bell states encoded with two photons as follows : @xmath34 as the failure occurs only when both @xmath19 measurements fail ( i.e. , neither @xmath9 nor @xmath10 is obtained ) , the four bell states @xmath35 and @xmath36 can be discriminated with 75% success probability , i.e. , @xmath37 .
note that our scheme employs only linear optics and on - off photodetectors as it can be implemented by means of two separate @xmath19 measurements .
our scheme can be generalized for the case of arbitrary @xmath3 photon encoding . from eq .
( [ eq : nencoding ] ) , the logical bell states @xmath38 and @xmath39 encoded with @xmath3 photons can be written by @xmath40 by using @xmath31 and @xmath32 .
after some calculations , we can rewrite these in the form of @xmath41}_{j=0}{\cal p}[\ket{\phi^+}^{\otimes n-2j}\ket{\phi^-}^{\otimes 2j}],\\ & \ket{\phi^{-}_{(n)}}=\frac{1}{\sqrt{2^{n-1}}}\sum^{[(n-1)/2]}_{j=0}{\cal p}[\ket{\phi^+}^{\otimes n-2j-1}\ket{\phi^-}^{\otimes 2j+1}],\\ & \ket{\psi^{+}_{(n)}}=\frac{1}{\sqrt{2^{n-1}}}\sum^{[n/2]}_{j=0}{\cal p}[\ket{\psi^+}^{\otimes n-2j}\ket{\psi^-}^{\otimes 2j}],\\ & \ket{\psi^{-}_{(n)}}=\frac{1}{\sqrt{2^{n-1}}}\sum^{[(n-1)/2]}_{j=0}{\cal p}[\ket{\psi^+}^{\otimes n-2j-1}\ket{\psi^-}^{\otimes 2j+1 } ] , \end{aligned}\ ] ] where @xmath42 $ ] denotes the largest integer less than or equal to @xmath43 ( i.e. , @xmath44 ) , and @xmath45 $ ] is the permutation function for @xmath3 elements of photon pairs .
for example , we can rewrite the logical bell state for @xmath46 as @xmath47\big ) , \end{aligned}\ ] ] where @xmath48 = \ket{\phi^{+}}\ket{\phi^{-}}^{\otimes2}+\ket{\phi^{-}}\ket{\phi^{+}}\ket{\phi^{-}}+\ket{\phi^{-}}^{\otimes2}\ket{\phi^{+}}$ ] .
likewise , all other bell states for @xmath46 can be represented in this way .
therefore , the four logical bell states with arbitrary @xmath3 photon encoding can be discriminated via @xmath3 times of separated @xmath19 measurements as illustrated in fig.[fig : scheme](c ) . here
, each @xmath19 is performed on two photons ; one is arbitrarily selected from the first and the other is from the second qubit .
one can identify the logical bell states from the results of @xmath3 independent @xmath19 measurements as follows : @xmath49 as the failure occurs only when none of the @xmath3 times @xmath19 measurements succeeds , the four logical bell states @xmath50 and @xmath51 can be discriminated with a success probability @xmath52 .
it is remarkable that the success probability rapidly approaches unity as @xmath3 increases .
for example , the success rate up to 99.6 % can be achieved with @xmath53 encoding .
we note that our scheme for @xmath3 photon encoding can be performed effectively via either spatially or temporally distributed @xmath3 times of @xmath19 measurements , irrespectively of the order of measurements .
we will compare the efficiency of our scheme with other proposals in the following section .
besides our proposal , many efforts have been devoted so far to improve the success probability of bell measurement based on linear optics .
we here consider several recent proposals employing single photon qubits @xcite , and calculate its success probability in terms of the total number of photons ( @xmath54 ) used in the process for the comparison with our scheme .
we will take into account the photons contained in the constructed logical qubits to be measured and in the ancillary states used in the measurement process as well as the increase of the average photon number by squeezing operation used in the process .    _
scheme_ a scheme proposed by grice @xcite enhances the success probability of bell - state discrimination employing ancillary entangled states of photons and photon number resolving detection in the bell measurement process ( see ref .
@xcite for details ) .
it increases the success probability up to @xmath55 by using @xmath56 additional photons . here
@xmath57 is the number of ancillary entangled states @xmath58 with @xmath59 , each of which contains @xmath60 photons .
the total number of photon used in the bell measurement process can be thus obtained by counting all photons in two logical qubits and the ancillary states . as we here consider single photon encoding ,
two photons are used in two logical qubits .
thus , the total number of photons counted is @xmath61 , by which we can rewrite the success probability as @xmath62 .
_ zaidi and van loock s scheme _
 zaidi and van loock proposed a scheme to improve the success probability of bell measurement for single photons in terms of inline squeezing operations accompanied by photon number resolving detections @xcite . with this approach , the success probability up to 64.3 %
is achieved for dual - rail encoding ( photon polarization encoding ) and to 62.5 % for single rail encoding ( vacuum and single photon state encoding ) .
let us here consider this scheme with dual - rail encoding in order to compare it with other schemes using single photon polarization . in this scheme ,
each mode of bell states is squeezed by a squeezing operator @xmath63 $ ] to improve the success probability of bell discrimination . here , @xmath64 is the squeezing parameter and @xmath65 is the creation ( annihilation ) operator .
suppose that bell states , here assumed to be as @xmath66 , pass through a beam splitter as @xmath67 and then are squeezed .
they can be written in the dual - rail representation as @xmath68 where @xmath69 .
the average photon number @xmath54 in all four modes can be calculated by @xmath70 where @xmath71 is the photon number operator in the @xmath72-th mode and @xmath73 .
if we use the relation @xmath74 the total average photon number in all four modes can be obtained as @xmath75 the best value of @xmath64 to achieve the highest success probability is investigated in ref .
@xcite and given as @xmath76 . with this value , the average photon number in the bell state after the squeezing is obtained as @xmath77 , which yields the success probability of the bell measurement as @xmath78 .
_ ewert and van loock s scheme 1_ ewert and van loock proposed a scheme to discriminate the bell states of single photon qubits by using ancillary multi - photon entanglement @xcite .
this employs a similar method used in grice s scheme  @xcite and photon number resolving detection to increase the success probability . in the proposed bell measurement setup ,
the total number of photons used in a single process can be counted as @xmath79 where @xmath80 is the number of ancillary states .
the success probability achieved using @xmath80 ancillary entangled states is given by @xmath81 .
thus , we can rewrite the success probability by the average total photon number used in the process @xmath54 as @xmath82 .
_ ewert and van loock s scheme 2_ recently , another scheme of linear optical bell measurement was proposed @xcite by employing parity state encoding with multiphotons @xcite . the logical qubit is constructed with @xmath83 blocks each containing @xmath84 photons .
it was shown that the success probability reaches up to @xmath85 similarly with our scheme . as the number of photons contained in each logical bell state is @xmath86 ,
we can write the success probability of bell measurement by using the average photon number used in the process @xmath87 as @xmath88
.      instead of single photons , other optical degrees of freedom can be used to construct the logical qubit in linear optical quantum information processing .
we will here consider two previous proposals employing other optical qubits to compare with our scheme .
_ coherent state qubits_ one of the well known approaches employs two coherent states @xmath89 and @xmath90 with amplitudes @xmath91 , or alternatively their superposed states @xmath92 , as a qubit basis .
it was shown that nearly deterministic bell - state measurement is possible in this approach @xcite .
quantum teleportation @xcite and quantum computation schemes @xcite based on the coherent state encoding have been proposed and investigated .
a drawback of this approach is that one can not easily perform the local unitary transforms such as @xmath93 operation due to non - orthogonality of two coherent states .    in this approach
, the bell measurement can be implemented as follows .
if the four bell states @xmath94 where @xmath95 , pass through a 50:50 beam splitter ( bs ) , the resulting states are @xmath96 as @xmath97 and @xmath98 contain respectively an even and odd number of photons , two parity measurements acting on two output modes discriminate between the four bell states . here
, the even number state @xmath97 yields the case when no photon is detected in both detectors , due to the nonzero overlap of @xmath99 , which is counted as a failure . assuming equal input probabilities of four bell states
, we can then calculate the average success probability of the bell measurement as @xmath100 .
we can also obtain the average photon number included in the bell states , by averaging @xmath101 for all four bell states , resulting in @xmath102 which we will use later to compare our scheme with respect to the success probability for the average photon number used in the process .
_ optical hybrid qubits_ recently , a hybrid approach was proposed by combining both approaches for single photons and coherent state qubits @xcite .
the logical qubit is constructed based on the orthonormal basis , @xmath103 where @xmath7 .
it was shown that this approach enables a near - deterministic quantum teleportation as well as deterministic @xmath104 and @xmath93 operations using linear optics . in this scheme
, the logical bell - state measurement can be performed using two independent bell - state measurements , the standard bell measurement ( @xmath19 ) for the single photon part and the coherent state bell measurement described above for the coherent - state part .
the logical bell measurement can be successfully performed unless both bell measurements on each parts fail so that its success probability is given as @xmath105 . as the average number of photons contained in any single bell state
is obtained as @xmath106 , we can rewrite the success probability by @xmath54 as @xmath107 .      ) used in the process .
the black thick dotted curve is for the coherent state qubits , the brown thick dashed curve for optical hybrid qubits , the blue thick curve for our scheme .
the blue dashed curve is for zaidi and van loock s scheme2 when @xmath108 ( it is the same with ours when @xmath109 ) .
the red dot - dashed curve is for grice s scheme , the orange dotted curve is for ewert and van loock s scheme , and the green circle at @xmath78 and @xmath77 for zaidi and van loock s scheme1 .
, width=288 ]    in our scheme , the single bell measurement process consumes a total of @xmath5 photons as each logical bell state contains @xmath5 photons and no additional photons are used in the process .
thus , the success probability of bell measurement can be written as @xmath110 with the average photon number @xmath111 used in the process .
we plot @xmath112 against @xmath54 for our scheme and all other above - mentioned schemes in fig.[fig : tele ] .
we will present some observations about the results and comparisons of our scheme with others as below :    \(i ) our scheme shows the best performance among the schemes employing single photon qubits , with respect to the attained success probability against the average photon number ( @xmath54 ) used in the process .
for example , our scheme can reaches @xmath113 by using total @xmath114 photons for the bell measurement . on the other hand , the attained success probabilities by other bell measurement schemes suggested by grice @xcite , zaidi and van loock @xcite , and ewert and van loock @xcite are much lower than ours with the same number of photon usage .
moreover , our scheme does not require photon number resolving detectors in contrast to these schemes @xcite .
\(ii ) the scheme recently proposed by ewert _
@xcite , similarly with ours , employs multiphoton entanglement encoding .
the logical qubit is constructed in the form of the parity state encoding @xcite , devised to tolerate photon losses by containing @xmath83 blocks of @xmath84 photons , i.e. , total @xmath115 photons .
it also enables one to perform near - deterministic bell measurement with the success probability , @xmath116 , similarly with ours .
however , in order to achieve @xmath85 , it uses total @xmath117 photons . the attained success probability against the average photon number usage is the same as ours when @xmath109 .
it was pointed out in @xcite that , under the effects of photon losses , increasing @xmath83 yields higher success probability than increasing @xmath84 .
\(iii ) the schemes with coherent state encoding @xcite or optical hybrid encoding @xcite yields higher success probabilities than ours for the same average photon number usage as we can see in fig.[fig : tele ] .
this is due to the fact that the success probability of coherent state bell measurement , employed in both ( coherent state encoding and hybrid encoding ) schemes , dramatically increases as the amplitude of the coherent states gets higher .
however , it requires the exact discrimination of even and odd number of photons , which becomes more difficult to realize for higher amplitudes .
we stress again that , in contrast , our scheme only requires photon on - off detectors , which is a considerable advantage to realize .
in this section , we will consider the application of our scheme to quantum communication and all - optical quantum computation .
we will also investigate the effects of photon loss , which is the major detrimental factor of errors for the optical implementation of quantum information processing @xcite .    in our analysis
, we have made some assumptions as follows .
the resource states required for logical qubits or entangled channels for gate teleportation , e.g. , ghz entanglement of multiphotons , are assumed to be prepared by off - line processes .
the evolution of optical quantum states in a lossy environment is obtained by solving the master equation @xcite , @xmath118 where @xmath119 , @xmath120 , and @xmath121 is the annihilation ( creation ) operator for the @xmath72-th mode . here
, @xmath122 is the decay constant , and the loss rate is defined as @xmath123 . it is assumed that all optical systems , from the logical qubits to teleportation channels , experience the same loss effects with rate @xmath124 . during the generation process of entangled quantum channel , loss also occurs with rate @xmath124 so that some imperfect resource states in which photons may be lost at one or more modes are possibly supplied into in - line communication or computation .
the logical qubits are assumed to be prepared in ideal pure states when they are first supplied into the in - line process . during the in - line process
, the same loss rate @xmath124 is applied to each photonic mode of the qubits for each gate operation and corresponding time in quantum memory .
details of our analysis will be presented in the following subsections .
our bell measurement scheme is useful for the implementation of quantum communications . at first
, it immediately enhances the success probability of the standard quantum teleportation @xcite . in our approach ,
an unknown qubit is prepared with @xmath3 photon encoding as @xmath125 at site @xmath126 .
the channel state @xmath127 is distributed between site @xmath126 and @xmath128 . here
, both the qubit and channel states are in the form of ghz entanglement .
first , the sender located at site a carries out our bell measurement scheme , _
i.e. _ @xmath3-times of @xmath19 measurements , where each @xmath19 is acting on two photons , one from @xmath129 and the other from the site @xmath126 of the channel state .
the receiver at site @xmath128 can then retrieve the input state @xmath130 by performing appropriate unitary transforms , either pauli x ( bit flip ) or z ( phase flip ) or both operations , which can be implemented deterministically as we will explain in the following sec .
[ sec : ugo ] .
the success probability of quantum teleportation with @xmath3 photon encoding is just given as @xmath52 , equal to that of the logical bell measurement .
therefore , a near - deterministic quantum teleportation can be achieved by employing only linear optics and photon on - off detectors .
for example , if four - photon entangled logical qubit and eight - photon entangled channel states are used , the success probability of quantum teleportation becomes higher than 90% .    in the realization of quantum communications ,
photon loss is unavoidable .
an arbitrarily encoded qubit @xmath131 evolves under a lossy environment into a mixed state in the form of @xmath132 where @xmath133 denotes the binomial coefficient and @xmath124 is the loss rate on each photonic mode .
as one can see here , the total loss probability of each logical qubit is given by @xmath134 .
the probability that @xmath135 photons are lost out of @xmath3 is @xmath136 and its possible resulting state is either @xmath137 , or @xmath138 .
note that there is no logical error in the former state , while the latter contains a pauli-@xmath139 error . therefore
, if a photon is lost from any single mode of a logical qubit , it experiences a pauli-@xmath139 error with probability @xmath140 .
the logical bell measurement is also affected by photon losses . during the quantum teleportation process , losses occur possibly at both the input qubit and the channel states .
we thus here consider the bell measurements performed on two qubits in the assumption that they both experience photon losses with the same rate @xmath124 . in our bell measurement scheme ( see fig .
[ fig : scheme](c ) ) , @xmath3-times of @xmath19 measurements are performed independently on two photons ; one is from the qubit and the other from the channel .
if either of the two photons are lost , the @xmath19 fails .
the probability that losses occur at @xmath135-times of @xmath19 can be written by @xmath141 therefore , we can obtain the total success probability of bell measurements under losses as @xmath142 which becomes @xmath143 when there is no loss @xmath144 and @xmath145 for @xmath146 . assuming that no additional operational errors occur during the bell measurement and feedforward operations , the success probability of teleportation under a lossy environment
is obtained as @xmath147 .
we plot @xmath147 against the loss rate @xmath124 for different encoding numbers @xmath3 in fig.[fig : succploss ] .
it shows us that in principle quantum teleportation can be implemented with arbitrary high success probability under a lossy environment by increasing the encoding number @xmath3 in our scheme .
note that here we do not consider the pauli - z error caused by losses , which can be propagated to the teleported qubit with probability 1/2 .
such a pauli logical error should be corrected by employing error correction codes , details of which will be considered in the following subsections .    ) based on our bell measurement scheme with @xmath3-photon encoding ; the black dotted curve for single photon ( @xmath148 ) , the green dotdashed curve for @xmath149 , the red dashed curve for @xmath150 , and the blue curve for @xmath151 photon encoding .
, width=288 ]    for a long distance quantum communication , the distance between the sender and receiver is limited by the effects of photon losses and quantum repeaters are necessary at intermediated locations @xcite . as quantum repeaters typically require bell measurements to complete the protocol @xcite , our scheme can be possibly emloyed to enhance the performance of such a protocol , which will be a possible future work .      in order to realize universal quantum computation , a set of logical quantum gates
are necessary , by which any logical operation is in principle possible to construct .
for example , pauli x , arbitrary z ( phase ) rotation , hadamard , and a controlled - z ( cz ) operations constitute such a universal set . in our framework , pauli x and arbitrary z ( phase )
operations are straightforward to implement using linear optical elements .
the pauli x ( bit flip ) operation can be performed by flipping @xmath152 implemented by a polarization rotator at all photon modes .
an arbitrary z ( phase ) operation can be performed by applying the phase shift operation only a single photonic mode : @xmath153 , and no operation is required for the other modes .
thus , both the pauli x and arbitrary z ( phase ) operations are deterministic in our approach .    in order to realize the hadamard and cz gates
, we here employ the gate teleportation protocol with specific types of entangled states @xcite . for the hadamard operation , entangled state @xmath154 should be used as the quantum channel for teleportation .
if one perform a standard teleportation of unknown qubit @xmath155 with the channel @xmath156 , the output state is given as the @xmath157 where @xmath158 indicates the hadamard gate .
likewise , one can realize the cz gate operation by performing two - qubit teleportation with @xmath159 where @xmath160 and so on , as the quantum channel for teleportation . in this case ,
the cost is preparation of mutiphoton entanglement as resource states . as the success probability of the hadamard or cz gates is the same as the success probability of the logical bell measurements , it is possible to implement these operations nearly deterministically by increasing the number of photons @xmath3 in a logical qubit .    alternatively , other approaches for the realization of the hadamard and cz gates , such as the knill - laflamme - milburn ( klm ) scheme @xcite or the parity encoded scheme used in ref .
@xcite , may be considered : such approaches may possibly reduce the resource requirements in gate operations in comparison to gate teleportation in which many resources are consumed to prepare the channel states @xmath156 and @xmath161 ( details will be discussed in sec .  [
sec : ftqc ] ) , however it may require more feedforward operations than gate teleportation .
the effects of photon losses should be also considered for the implementations of quantum computing .
a logically encoded qubit with @xmath3 photons may be affected by losses during the in - line process , resulting in the same form as eq .
( [ eq : evolved ] ) , which contains some logical errors . when performing gate teleportation for the hadamard and cz gate operations , the success probability of bell measurement is also deteriorated by photon losses .
here we assume that the resource channels @xmath156 and @xmath161 are prepared at off - line and immediately used such that only the input qubits are subjected to losses .
in this case , the bell measurement fails with rate @xmath162 when @xmath135 photons are lost in the qubit .
thus , we can calculate the success probability of the gate teleportation with loss rate @xmath124 as @xmath163 where @xmath133 represents the binomial coefficient .
it becomes @xmath164 when there is no loss @xmath144 , and @xmath165 for @xmath146 .
it is higher than the one obtained in eq .
( [ eq : ktimesfail ] ) as we assumed here that loss occurs only at the input qubit modes ( no loss at the channel states ) .    during the computation process
, several errors are caused by photon losses .
some of the errors are detectable by measurements during the gate operations , which are called `` locatable '' @xcite , while other errors propagates and can only be corrected by an error correction code .
this latter kind are called `` unlocatable '' . as we can see in eq .
( [ eq : evolved ] ) , losses occur with the rate @xmath166 in quantum memory or gate operations . if any single photon is lost , the logical qubit experiences a pauli @xmath139 error with probability @xmath140 . the loss errors in quantum memory as well as deterministic operations such as
the pauli @xmath167 or arbitrary @xmath139 rotation , are unlocatable . on the other hand ,
the errors in hadamard or cz gates caused by losses are in fact immediately detectable by missing photons at the detectors during the logical bell measurement . moreover , as the gate teleportation scheme is used here , missing photons in the input qubit are compensated at the output qubit as far as the teleportation succeeds .
.[tab : table1]fault - tolerant noise thresholds ( @xmath124 ) for different numbers of photons in a logical qubit ( @xmath3 ) using the seven - qubit steane code and the telecorrection protocol @xcite .
the highest threshold is obtained when @xmath149 . [ cols="^,^,^,^",options="header " , ]     in order to build arbitrary large - scale quantum computers , it should be justified that they can be implemented with tolerance to small errors , so - called fault - tolerance @xcite . for this
, the amount of noise per operation with appropriate error corrections should be below a fault - tolerant threshold .
we thus carried out numerical simulations to obtain the threshold for our scheme with a given loss rate @xmath124 .
we here employ the seven qubit steane code @xcite with several levels of concatenation based on the circuit - based telecorrection @xcite , in order to directly compare its performance with previous other schemes employing the same correction code and circuit @xcite .
note that the steane code can correct arbitrary logical or unlocatable errors , but for the purpose of this calculation we assume that the other errors are negligible compared to the loss errors .
we will employ the modified telecorrection circuit composed of cz , hadamard , @xmath168 state , and @xmath167-basis measurement @xcite .
let us define the error model for our approach as follows : when hadamard or cz gates fail , the output qubit is assumed to experience depolarization , which can be modeled by a random pauli operation , _
i.e. _ pauli @xmath139 and @xmath167 operation independently act on the logical qubit with the equal probability @xmath140 .
for the other loss errors in quantum memory or gate operations , pauli @xmath139 operation is applied to the qubit with probability @xmath140 .
we use this error model for the lowest level of concatenation , while the same error models described in ref .
@xcite is used for higher levels of concatenation .
based on this approach , we performed a series of monte carlo simulation ( using c++ ) to obtain the corrected error rates for a range of @xmath124 with different @xmath3 .
the resulting corrected error rates in a lower level are used for the error rates for the elements used in next level of error correction .
if the error rates tend to zero in the limit of many levels of concatenation , it is guaranteed that in principle the fault - tolerant quantum computation is possible with those certain @xmath124 and @xmath3 .    in this way
, the noise thresholds of our scheme with different @xmath3 are obtained as shown in table  [ tab : table1 ] .
interestingly , the largest threshold is obtained when the logical qubit is encoded with four photons ( @xmath149 ) .
note that a further increase of @xmath3 lowers the threshold , which may be due to unlocatable errors becoming dominant for larger @xmath3 encoding .
let us then compare the result with those obtained by other schemes .
the threshold obtained by our scheme ( @xmath169 ) is much higher than those for coherent - state qubits ( @xmath170 ) @xcite and optical hybrid qubits ( @xmath171 ) @xcite . on the other hand , it is almost equivalent to the one using parity states encoding with entangled photons @xcite .
even much higher thresholds may be attainable by employing recently proposed topological error codes @xcite , which will be a possible future work .
the number of resources required for one round of error correction is another important factor to analyze the scalability of quantum computation .
one can estimate the resource requirements of the telecorrection scheme by the following estimation .
the total number of operations in one round of telecorrection is about 1,000 @xcite and the element operations are used with the following fractions @xcite : memory 0.284 , hadamard 0.098 , cz 0.343 , diagonal state 0.164 , and x - basis measurement 0.111 .
if we assume that the number @xmath172 , @xmath173 , and @xmath174 of resources are consumed to prepare the hadamard , cz gate , and the diagonal state , respectively , and none for the others . then , the total resource requirements for one round of error corrections is obtained by @xmath175 in fact , it depends on the form of the required entangled states and the efficiency of their generation methods . in our scheme , as explained in sec .
[ sec : ugo ] , the entangled states @xmath156 and @xmath161 are used as the channel for gate teleportation to realize hadamard and cz gate , respectively . if we assume conditional generation of @xmath156 and @xmath161 from entangled photon pairs _
e.g. _ using the fusion gate operation @xcite , the resource cost increases exponentially with increasing @xmath3 the number of photon in a logical qubit . on the other hand ,
any on - demand or efficient generation scheme for such multiphoton entanglement will be able to reduce dramatically the resource requirements .
recently , such multiphoton entanglement has been experimentally produced @xcite .
for example , ghz entanglement up to eight photons @xcite and cluster states up to eight photons @xcite have been successfully generated .
several on - demand generation schemes were proposed theoretically @xcite and are expected to be realized , e.g. , based on semiconductor quantum dots @xcite .
we have presented a detailed scheme for nearly deterministic bell measurement using multiphoton entanglement and linear optics proposed in ref .
the limitation that only two of four bell states can be identified by the standard bell measurement , @xmath19 , is overcome by the ghz type of multiphoton entanglement and @xmath3 times of @xmath19 measurements , where @xmath3 is the number of photons in a logical qubit .
the logical bell measurement is performed through @xmath3 times of @xmath19 measurements , and it fails only when none of those @xmath3 times of @xmath19 measurements succeeds .
therefore , the success probability of the logical bell measurement is given as @xmath4 , which rapidly approaches to unity as @xmath3 increases .
we have compared the efficiency of our scheme with those of other previous schemes proposed to improve the success probabilities of bell measurement based on linear optics ; several schemes were proposed based on single photon qubits @xcite or other optical qubits such as coherent state @xcite and optical hybrid qubits @xcite .
we showed that our scheme outperforms other schemes employing single photon qubits , with respect to the attained success probability in terms of the average number of photons used in the process .
although the scheme using coherent state or optical hybrid qubits achieves higher success probability than ours by consuming the same number of photons on average , a considerable advantage of our scheme over all the other schemes is that it does not require photon number resolving detections but only photon on - off detection suffices .
we have demonstrated that our scheme can be effectively used for the implementation of quantum teleportation and all - optical quantum computation .
the success probability of quantum teleportation increases rapidly to unity as increasing @xmath3 the number of photons in the qubit and channel states .
we showed that in our approach fault - tolerant quantum computation is possible under photon losses .
it is remarkable that the highest noise - threshold is obtained with four - photon encoded qubits and eight - photon entangled channels that are accessible within current technologies @xcite .
for example , 8 photon ghz entangled states have been recently generated successfully in optics laboratories @xcite .
interestingly , our bell measurement scheme can be implemented via either spatially or temporally distributed and independent @xmath3 times @xmath19 measurements .
such an experiment may be considered not only with spatially separated @xmath3-mode entangled states but also with temporal mode entanglement as done in refs .
@xcite . for a temporally
distributed implementation , only one standard bell - measurement device illustrated in fig.[fig : scheme](a ) @xcite will be sufficient to perform independent @xmath3 times of @xmath19 measurements for a logical bell measurement .
we finally note that our idea for a distributed bell measurement scheme , in principle , is not limited to photonic qubits but can be applied to any multipartite systems with other physical degrees of freedom .
our works reveals the possibility of using multipartite entanglement for efficient quantum communication and computation .
we would like to note that the comparison in our paper with other schemes @xcite does not rule out their own advantages for the implementation of bell measurement with linear optics .
we thank f. ewert and p. van loock for valuable comments and discussions . this work was supported by the national research foundation of korea ( nrf )
grant funded by the korea government ( msip ) ( grant no .
2010 - 0018295 ) .
k.p . acknowledges financial support from grant no .
ga14 - 36681 g of the czech science foundation .
t.c.r . was supported by the australian research council centre of excellence for quantum computation and communication technology ( project no .
ce110001027 ) .
99 p. kok , w. j. munro , k. nemoto , t. c. ralph , j. p. dowling , and g. j. milburn , rev .
phys . * 79 * , 135 ( 2007 ) .
t. c. ralph and g. j. pryde , t. c. ralph and g. j. pryde , prog . opt . * 54 * , 209 ( 2010 ) .
e. knill , r. laflamme , and g. j. milburn , nature ( london ) * 409 * , 46 ( 2001 ) .
n. ltkenhaus , j. calsamiglia , and k .- a .
suominen , phys .
a * 59 * , 3295 ( 1999 ) .
j. calsamiglia and n. ltkenhaus , app .
b * 72 * , 67 ( 2001 ) .      h. jeong , m. s. kim , and j. lee , phys .
a * 64 * , 052308 ( 2001 ) .
h. jeong and m. s. kim , , 042305 ( 2002 ) ; h. jeong and m. s. kim , quantum information and computation * 2 * , 208 ( 2002 ) . s .- w .
lee and h. jeong , phys .
a * 87 * , 022326 ( 2013 ) .
lee and h. jeong , _ in proceedings of the first international workshop on entangled coherent states and its application to quantum information science _
( tamagawa university , tokyo , 2012 ) , pp . 41?46 .
s. j. van enk and o. hirota , phys .
a * 64 * , 022313 ( 2001 ) .
t. c. ralph , a. gilchrist , g. j. milburn , w. j. munro , and s. glancy , , 042319 ( 2003 ) .
a. p. lund , t. c. ralph , and h. l. haselgrove , , 030503 ( 2008 ) .
pan , z .- b .
chen , c .- y .
lu , h. weinfurter , a. zeilinger , and m. zukowski , rev .
phys . * 84 * , 777 ( 2012 ) .
c . yao , t .- x .
wang , p. xu , h. lu , g .- s .
pan , x .- h .
bao , c .- z .
peng , c .- y .
lu , y .- a .
chen and j .- w .
pan , nature photonics * 6 * , 225 ( 2012 ) .
f . huang , b .- h .
liu , l. peng , y .- h .
li , l. li , c .- f .
li , and g .- c .
guo , nature communications * 2 * , 546 ( 2011 ) .
c . yao , t .- x .
wang , h .- z .
chen , w .- b .
gao , a. g. fowler , r. raussendorf , z .- b .
chen , n .- l .
liu , c .- y .
deng , y .- a .
chen , and j .- w .
pan , nature ( london ) * 482 * , 489 ( 2012 ) .
d. e. browne and t. rudolph , phys .
* 95 * , 010501 ( 2005 ) . c. schn , e. solano , f. verstraete , j. i. cirac , and m. m. wolf , phys .
95 * , 110503 ( 2005 ) .
n. h. lindner and t. rudolph , phys .
lett . * 103 * , 113602 ( 2009 ) .
r. j. young , r. m. stevenson , p. atkinson , k. cooper , d. a. ritchie , a. j. shields , new j. phys . * 8 * , 29 ( 2006 ) .
a. zavatta , m. dangelo , v. parigi , and m. bellini , phys .
* 96 * , 020502 ( 2006 ) .
m. dangelo , a. zavatta , v. parigi , and m. bellini , j. mod . opt . *
53 * , 2259 ( 2006 ) .
h. jeong , a. zavatta , m. kang , s .- w .
lee , l. s. costanzo , s. grandi , t. c. ralph , and m. bellini , nature photonics * 8 * , 564 ( 2014 ) .