Reducing the Energy Dissipation of the Issue Queue by Exploiting Narrow Immediate Operands In contemporary superscalar microprocessors, issue queue is a considerable energy dissipating component due its complex scheduling logic. In addition to the energy dissipated for scheduling activities, read and write lines of the issue queue entries are also high energy consuming pieces of the issue queue. When these lines are used for reading and writing unnecessary information bits, such as the immediate operand part of an instruction that does not use the immediate¯eld or the insigni¯cant higher order bits of an immediate operand that are in fact not needed, signi¯cant amount of energy is wasted. In this paper, we propose two techniques to reduce the energy dissipation of the issue queue by exploiting the immediate operand¯les of the stored instructions:¯rstly by storing immediate operands in separate immediate operand¯les rather than storing them inside the issue queue entries and secondly by issue queue partitioning based on widths of immediate operands of instructions. We present our performance results and energy savings using a cycle accurate simulator and testing the design with SPEC2K benchmarks and 90 nm CMOS (UMC) technology. Issue queue (or dispatch bu®er) of modern superscalar microprocessors is the indispensable backbone of out of order execution, which is the method that exploits instruction level parallelism. The purpose of contemporary microprocessors is to achieve maximum execution parallelism of instructions in order to maximize the performance. In superscalar microprocessors, multiple instructions are fetched from the instruction cache and they are dispatched to the issue queue after decoding and renaming stages in program execution order. Each instruction that is dispatched to the issue queue is assigned to an entry that stores the immediate operand value and other related information of an instruction such as the functional unit code and tags for source and destination registers. Instructions wait inside the issue queue for being issued to a functional unit until their source operands are available and an execution unit becomes available for execution of the necessary function. This way, the issue queue provides mechanisms for instructions to execute simultaneously which are not dependent to any preceding instructions.. Issue queue is a component that allows out-of-order execution and improves the performance of the processor. Some studies claim that the issue queue may consume up to 25% of the total chip power. 8 Issue queue contains a wake up logic to identify ready operands of waiting instructions and selection logic to choose an appropriate instruction to be issued to a functional unit. 4 In addition to these main energy consumption factors of issue queue, writing the decoded information of each instruction into the¯elds of the issue queue entries in dispatch stage and reading the contents of these entries when instructions are issued to functional units are other sources of dynamic energy dissipation. It is not a surprising inference that, an increase in the number of issue queue entries results in an increase in the energy consumption of issue queue. Likewise, as the number of bits in an issue queue entry increases, energy dissipation originating from the activities of read and write lines and leakage energy dissipation for each bit increases accordingly.. Many techniques exist in the literature, which try to minimize energy consumption and power dissipation of issue queue logic. 1À4 However, exploiting the di®erent characteristics of the immediate operands of the instructions stored inside the issue queue has not been considered yet to reduce the energy dissipation. Immediate operands occupy a large fraction of the bits inside the issue queue entries. These bits are accessed at each cycle either for writing the information for an incoming instruction at the dispatch stage or reading the contents at the issue stage which result in signi¯cant energy dissipation. On the other hand, many instructions do not possess immediate operands and even if the instructions use the immediate¯eld only a small fraction of the bits contain necessary information. These values, that contain a large number of consecutive zeros and ones, are called narrow values as also de¯ned in Ref. 13 . Although the immediate operands that come together with the instructions are generally narrow, their upper order bits are written to, stored in and read from the issue queue entries unnecessarily and existence of these unnecessary bits contribute to static and dynamic energy ine±ciency. The importance of CMOS static energy dissipation according to the gate scaling trends brie°y explained in Ref. 19 .. In this paper, we propose two new techniques to reduce the energy dissipation of the immediate value holding part of the issue queue. The¯rst technique is based on splitting the immediate operand¯les from issue queue entries into an immediate operand¯le that is pointed by issue queue entries, in case of an immediate operand need. We aim to lower both static and dynamic energy dissipation of the issue queue, by using smaller number of entries in the separate immediate operand¯le than the number of entries in the original issue queue and taking the narrow widths of the immediate operands into account. The second technique is based on modifying the issue queue by making use of instructions which do not use their immediate operand¯les and instructions with narrow immediate operands. The technique of partitioning the issue queue based on existence of immediate operands and widths of immediate operands, where unnecessary bit writes, storage of bits and bit reads are omitted, leads to an energy-e±cient issue queue design. The rest of the paper is organized as follows: In Sec. 2, we summarize the background about code compression techniques and their usage in microprocessors. Section 3 describes the motivation for modifying the issue queue according to immediate operands. Section 4 presents the separate immediate operand¯le technique followed by the explanation of the issue queue partitioning technique in Sec. 5. The simulation methodology is explained in Sec. 6, performance and energy dissipation results are stated in Sec. 7. Finally, we o®er our concluding remarks in Sec. 8. Many instructions do not use the immediate values in contemporary microprocessors. However all of the entries of the issue queue structure, which hold the instructions before they proceed to the execution stage, are designed to hold immediate values for each instruction as all instructions can be placed in any entry. The storage space allocated for the immediate operands are written to and read from unnecessarily when an instruction without an immediate operand enters the issue queue. Moreover, many of the immediate values that are actually used by the instructions do not need the full bit width of the storage space and can be expressed with less number of bits.. In this paper we proposed a scheme to design an issue queue that can exploit the immediate value characteristics of the incoming instructions for energy e±ciency. The¯rst proposed technique is to create an immediate¯le separate from the issue queue, that stores immediate operands of issue queue entries if they exist. In the second proposed technique, we show that signi¯cant energy savings are achieved by partitioning the issue queue into three parts, where there is a part for instructions without any immediate operands, narrow immediate operands and regular immediate operands. Our simulation results show that on the average across all Spec CPU2K benchmarks, it is possible to achieve up to nearly 61% power and 30% area reduction for the immediate operand¯elds of the issue queue with a very small amount of performance degradation with the separate immediate¯le technique. With the issue queue partitioning technique, 74% power reduction and 45% area reduction is achieved, for immediate operands stored in issue queue, with no performance loss. A large number of instruction and operand compression techniques are proposed in order to save area and power in instruction storage devices. In Ref. 5, Lin and Chung introduced a technique called operand¯les remapping in which frequently used operand codes and operands are stored in a dictionary matched with code words and their occurrences in a program are replaced with smaller size code words to reduce the instruction bu®er area. Okuma et al. proposed several techniques for encoding immediate¯elds of instruction to reduce the size of instruction memory in embedded systems in Ref. 6 , observing that the immediate¯eld is the longest¯eld of instructions in many processors. This approach considers the area consumption of large immediate values but prefers a challenging way of compression which includes time and energy consuming encoding and decoding processes.. A less challenging way of compression is using signi¯cance of operand values. Narrowness or zero bytes of values are exploited to reduce the power consumption when the values are transferred, written, read, stored and executed. Villa et al. proposed to compress all zero bytes in the data cache into a single bit by adding some additional hardware into RAM to detect and compress zero bytes in memory in Although all of these techniques consider the narrowness of instructions, operands and operation codes in order to reduce the power consumption of a processor in di®erent components of a processor, they pay little or no attention to the storage of large width immediate values in issue queue and their static and dynamic power consumptions when they are being transferred and executed. Fig. 2 and explained in Sec. 3.2. In 64 bit processors, immediate operand values are¯rstly sign extended to 32 bits before being dispatched to an issue queue entry, if they have a smaller width. Immediate operands occupy a storage space of 32 bits in their issue queue entries. These immediate operands are sign extended to 64 bits prior to their usage, 11 during the issue phase. Most of the dispatched instructions do not contain immediate operand values or contain immediate operands possessing narrow signi¯cant bit widths. When these instructions are written to their reserved issue queue entries at dispatch phase and read at issue phase, the whole area reserved for these immediate operands is processed and also the corresponding bitcells cause static energy dissipation, even if they do not contain any valid data or if they contain insigni¯cant bits only because of their physical existence in issue queue entries. Each of these operations results in energy dissipation. As observed in Ref. 8 , in a dispatch bound issue queue where the contents of source registers are stored in issue queue entries, 65% of energy dissipation of issue queue is caused by the operations at dispatch and issuing phases. Immediate operand values contribute to an important proportion of energy dissipation in issue queue, because of their large bit widths: 32 bits in a 64 bit microprocessor.

O O O O O O B I O O O B I O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O B I O O O O O O O O O O B I O O O O B I O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O B I O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O B I O B I O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O B I O O O O O O O O O B I O O O O O O B I O O O O O O O O O O B I O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O B I O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O B I O O O O O O O B I O O O O O O O O O O B I O O O O O O O O O O O O O O O O B I O O O O O B I O O O O B I O O O B I O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O B I O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O B I O O B I O B I O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O B I O B I O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O B I O O O O O O O O O O O O B I O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O B I O O O O O O O O O B I O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O B I O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O


Over-Approximated Control Flow Graph Construction on Pure Esterel Esterel is an imperative synchronous language for controldominant reactive systems. Regardless of imperative features of Esterel, combination of parallel execution and preemption makes it difficult to build control flow graphs (CFGs) of Esterel programs. Simple and convenient CFGs can help to analyze Esterel programs. However, previous researches are not suitable for flow analyses of imperative languages. In this work, we present a method to construct over-approximated CFGs for Pure Esterel. Generated CFGs expose invisible interferences among threads and show program structures explicitly so that they are useful for program analyses based on graph theory or control-/data-flows. Most embedded systems belong to reactive systems; they check and react to environmental changes as time flows. It is very difficult to synchronize an embedded system and environment. Furthermore, as system requirements become more complicated, an embedded system consists of more sub-components. General programming languages are not proper to express the synchronization among subcomponents explicitly.. Synchronous languages [1] , [2] with the perfect synchrony hypothesis [3] help to specify synchronization by abstracting time flow into a sequence of discrete time unit. Esterel [4] - [7] is an imperative synchronous language. Unlike dataflow synchronous languages [1] , [2] , [8] , [9] , Esterel supports various imperative features. These include sequence, loop, suspension, preemption [10] , exception, and declaration of signals and variables, and they are useful to design control-dominant systems. Control-/data-flow analysis [11] has been a static analysis tool in compilers of general imperative languages for decades. Because an Esterel program is written with imperative constructs, control flows exist within the program, and a control flow graph (CFG) can be built for the program. Using the CFG, the program can be diagnosed by various analysis techniques such as graph reachability or flow analyses.. However, a CFG of an Esterel program cannot be easily constructed due to synchronous parallel execution and preemption. When two threads of a program are executed in parallel, one thread can be interfered by the other, and vice versa. Unfortunately, such interferences are not explicitly described in the source code. Esterel has various imperative features, and behaviors of an Esterel program can be described with a CFG. Because previous works [12] - [14] focus on correct and complete representations, they are not proper for practical analyzers based on flow analyses of existing imperative languages.. We present over-approximated CFG construction rules that are sound and practical. Our CFGs show program structures well. Though some CFGs contain infeasible paths that may be unreachable during execution time, the experimental results show that the fraction of such paths is neglectable. Moreover, the results also show that the CFG construction algorithm uses reasonably small amount of time and memory.. Our key contribution is to expose invisible interferences among threads without any accompanying data structures or handlers. So, flow analyses of existing imperative languages can be applied to Esterel programs on our CFGs. As a matter of fact, we used the proposed CFGs to detect a well-known problem in Esterel [19] , and achieved precise results. This work can be a useful basis of graph-based analysis on Esterel programs. Flow information is a basis of most program analyses, and some analyzers [12] - [14] have their own structures for flow information.. An Esterel slicing tool [12] generates CFGs to construct program dependency graphs, and Fig. 1.(b) is a CFG for a program depicted in Fig. 1.(a) . It deals with control flows of parallel execution and preemption with pause handlers and arbiters. Pause handlers gather state information within an instant, and arbiters decide control flows of the next instant using the information. Though they exactly represent actual execution process, all following nodes of a pause node in this CFG are dependent to arbiters, and an- [13] , [15] .. alyzers can hardly distinguish the gathered information at pause handlers. For instance, in Fig. 1.(a) , pause in line 4 is sequentially following pause in line 2, but in Fig. 1.(b) , the upper pause node is connected to the pause handler and the lower pause node succeeds the arbiter. Therefore, analyzers must exactly simulate pause handlers and arbiters to get precise control flows and analysis results.. Columbia Esterel compiler [13] , [15] translates Esterel programs to GRC models [16] . Figure 2 shows a GRC model of the program in Fig. 1.(a) . A GRC model consists of a concurrent CFG and a hierarchical state representation which are optimized for simulation and compilation. A hierarchical state indicates a structured data memory that preserves state information across instants, and a concurrent CFG represents the computation of an instant. Therefore, analyzers must examine source program and the model simultaneously and interpret the control flows on the model. Quartz [14] , a dialect of Esterel, is transformed to not CFGs but equation systems [17] . Compiled equations consist of control and data flows. Because the equations are designed for theorem provers, they need additional transformations for flow analyses [11] .

O B I I O O O B B O O O B I O O O O O O O O O B O O O O O O O O O O O O O O O O B O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O B I O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Recursion based parallelization of exact dense linear algebra routines for Gaussian elimination We present block algorithms and their implementation for the parallelization of sub-cubic Gaussian elimination on shared memory architectures. Contrarily to the classical cubic algorithms in parallel numerical linear algebra, we focus here on recursive algorithms and coarse grain parallelization. Indeed, sub-cubic matrix arithmetic can only be achieved through recursive algorithms making coarse grain block algorithms perform more efficiently than fine grain ones. This work is motivated by the design and implementation of dense linear algebra over a finite field, where fast matrix multiplication is used extensively and where costly modular reductions also advocate for coarse grain block decomposition. We incrementally build efficient kernels, for matrix multiplication first, then triangular system solving, on top of which a recursive PLUQ decomposition algorithm is built. We study the parallelization of these kernels using several algorithmic variants: either iterative or recursive and using different splitting strategies. Experiments show that recursive adaptive methods for matrix multiplication, hybrid recursive-iterative methods for triangular system solve and tile recursive versions of the PLUQ decomposition, together with various data mapping policies, provide the best performance on a 32 cores NUMA architecture. Overall, we show that the overhead of modular reductions is more than compensated by the fast linear algebra algorithms and that exact dense linear algebra matches the performance of full rank reference numerical software even in the presence of rank deficiencies. Dense Gaussian elimination over a finite field is a main building block in computational linear algebra. Driven by a large range of applications in computational sciences, parallel numerical dense LU factorization has been intensively studied for several decades which results in software of great maturity (e.g., LINPACK is used for benchmarking the efficiency of the top 500 supercomputers). As in numerical linear algebra, exact dense Gaussian elimination is a key building block for problems that are dense by nature but also for large sparse problems, where some intermediate computations also involve dense linear algebra:. -sparse direct methods, may switch to dense Gaussian elimination when the fill-in becomes too large [30, §10.3] ;. -block iterative methods (like the block-Wiedemann or block-Lanczos algorithms) also require dense linear algebra to handle the block projections.. Recently, efficient sequential exact linear algebra routines have been developed [12] . The kernel routines run over small finite fields and are usually lifted over Z, Q or Z[X]. They are used in algebraic cryptanalysis [15, 3] , computational number theory [27] , or integer linear programming [18] and they benefit from the experience in numerical linear algebra. In particular, a key point there is to embed the finite field elements in integers stored as floating point numbers, and then rely on the efficiency of the floating point matrix multiplication dgemm of the BLAS. The conversion back to the finite field, done by costly modular reductions, is delayed as much as possible.. Hence a natural ingredient in the design of efficient dense linear algebra routines is the use of block algorithms that results in gathering arithmetic operations in matrix-matrix multiplications [7] . Those can take full advantage of vectorized SIMD instructions and have a high computation per memory access rate, allowing to almost fully overlap the data accesses by computations and hence deliver close to peak performance efficiency. A key feature of exact dense linear algebra, is that fast matrix multiplication algorithms, like Strassen [28] and Strassen-Winograd algorithms [16, 12] can be used with no concern of numerical instability. The complexity improvement of these algorithms also gives a significant speed-up in practice [12] . In order to benefit from these sub-cubic time matrix multiplication algorithms, all other linear algebra computations, including Gaussian elimination need to reduce to it by block recursive algorithms. Hence, among the many variants of block algorithms, we only focus on the recursive ones.. In a previous work [11] , we presented our first investigations on the parallelization of exact dense Gaussian elimination for multicore computers. The focus there was on exploring the variants of parallel exact Gaussian elimination algorithms (block iterative or recursive, using slabs or tiles, etc) and showed how and why the tile recursive variant outperforms the others.. We now focus in this manuscript on the building blocks on which these elimination algorithms rely. Our approach is to also apply recursive algorithms with a task based parallelization, for these building blocks. We explore six variants for the parallelization of the matrix multiplication (five recursive variants compared to the block iterative algorithm of [11] ) and introduce a new hybrid parallel algorithm for the triangular system solve with matrix right hand side. We then recall the slab and tile recursive Gaussian elimination algorithms and present their performance using these new building blocks.. The scope of this study extends more generally to the problem of parallelizing any set linear algebra routines based on sub-cubic time matrix arithmetic, such as Strassen's O(n 2.81 ) algorithm. In particular, numerical linear algebra based on Strassen's algorithm (if numerical stability issues have been considered acceptable) should clearly benefit from most of its results. Related work on the parallelization of the sub-cubic numerical linear algebra include [1, 24, 6, 25, 2] .. Our focus is on parallel implementations using various pivoting strategies that will reveal the echelon form, or the rank profile of the matrix [21, 13] . The latter is a key invariant used in many applications such as Gröbner basis computations [15] and computational number theory [27] .. As the PLUQ decomposition reduces to matrix-matrix multiplication and triangular matrix solve, we thus study several variants of the latter sub-routines as single computations or composed in the higher level decomposition.. The sub-routines used for the computation of parallel PLUQ decomposition are mainly:. • the fgemm routine that stands for Finite field General Matrix Multiplication and computes: C ← βC + αA × B where A, B, C are dense matrices.. • the ftrsm routine that stands for Finite field Triangular Solving Matrix and computes: A ← BU −1 where U is an upper triangular matrix, and B a dense matrix (or A ← L −1 B where L is a lower triangular matrix, and B a dense matrix).. • the PLUQ routine that computes the triangular factorization P, L, U, Q = A, where P and Q are permutation matrices, U is upper triangular and L is unit invertible lower triangular.. Several schemes are used to design block linear algebra algorithms: the splitting in blocks can occur on one dimension only, producing row or column slabs [23] , or both dimensions, producing tiles [5] .. Algorithms processing blocks can also be either iterative or recursive. Figure 1 summarizes some of the various existing block splitting obtained by combining these two aspects.. Finally, we study the impact of these cutting strategies with the implementation of parallel versions of the fgemm, ftrsm and PLUQ sub-routines. We use the OpenMP library with task parallelization using two runtime implementations: libgomp [22] , the GNU implementation of the OpenMP Application Programming Interface and libkomp an implementation of the OpenMP standard based on the XKaapi library [17] . Expressing parallelism using tasks allows the programmer to choose a finer grain parallelization. But the success of such an approach depends greatly on the runtime system used. Indeed, the XKaapi library handles We studied in this work several implementations of the subroutines used by a parallel recursive PLUQ decomposition algorithm. We identified that the best recursive variant for matrix multiplication is the 2D adaptive variant, combined with a sequential Strassen-Winograd algorithm. While the impact of modular reductions seem to be limited, the use of sub-cubic matrix multiplication requires to use a coarse grain parallelization scheme. Hence the data placement strategy need to be adapted consequently and the granularity has to be tuned as close as possible to the available resources. We also proposed a hybrid iterative and recursive parallelization for the triangular system solve with matrix right-hand side, performing efficiently even with unbalanced dimensions.. These two building blocks, combined in our recent tile recursive algorithm deliver a high computing efficiency. Comparing to our previous results in [11] experiments show a 18% gain for matrix multiplication and 23% gain for PLUQ decomposition. The best performance is obtained with the parallel recursive PLUQ variant using the 2D recursive adaptive variant for matrix multiplication algorithm and the hybrid parallel pftrsm variant. As expected, the use of recursion challenges the runtime, and light-weight task implementations, such as the one in XKaapi happen to be crucial there. Dataflow task dependencies also help slightly improve performances. However, it seems to work best with numerous tasks, which in the other hand, implies a finer grain, and therefore a lesser improvement of the sub-cubic matrix multiplication algorithms.. Perspective. Our future work focuses on two main directions. First, improving the parallelization of the recursive steps of Strassen-Winograd algorithm directly. The focus will be on the scheduling heuristics that will reduce as much as possible task dependencies, while keeping the memory footprint contained. Second, the distant data accesses has an impact on the overall performance. Adapting the communication avoiding techniques of [19] in the framework of our recursive algorithm is highly relevant. Over a finite field, tournament pivoting seem to reduce to computing the union of the non-zero pivots found in concurrent eliminations. It is still unclear whether the rank profile information can still be revealed with such an algorithm.

O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


CURRENCY CRISIS FORECASTING WITH GENERAL REGRESSION NEURAL NETWORKS The main purpose of this study is to devise a general regression neural network (GRNN)-based currency crisis forecasting model for Southeast Asian economies based upon the disastrous 1997-1998 currency crisis experience. For this some typical indicators of currency exchange rates volatility are first chosen, then these indicators are input into GRNN for training, and finally the trained GRNN is used for future crisis prediction. To verify the effectiveness of the proposed currency crisis forecasting approach, four typical Southeast Asian currencies, Indonesian rupiah, Philippine peso, Singapore dollar and Thai baht, are selected. Meantime we compare its performance with those of other forecasting methods to evaluate the forecasting ability of the proposed approach. Empirical results obtained reveal that the proposed currency crisis forecasting model has a surprisingly high degree of accuracy in judging the currency crisis level of each country in specified time period, implying that our proposed approach can be used as a feasible * Corresponding author. During the 1990s, many emerging markets, such as Southeast Asian economies, have experienced several episodes of currency crises. These unprecedented and peculiar crises brought large change not only to their economy but also to their society, and since then much attention has been focused on study of the currency crisis from the theoretical and empirical prospects.. 1-8 A substantial theoretical literature has now accumulated on the study of Flood and Marion, 1 while a comprehensive survey of the empirical modeling of the currency crises is provided by Kaminsky et al. 2 The main reason of this research stream is that practitioners in financial market have different purposes about currency crises analysis. For example, macro policymakers are interested in leading indicators of pressure on exchange rate parties; market participants are increasingly concerned to measure and limit their risk to large currency exchange rate fluctuation; and financial regulators are keen to understand the currency exchange rate exposures of the institutions they supervise. Therefore many researchers pay much attention to this area.. In order to predict currency crisis level, it is important to be clear exactly how a currency crisis is defined. Much of the relevant literature looks at crisis indices (termed currency pressure indicators) defined as weighted sums of percentage change in exchange rates, interest rates and foreign currency reserves.. 3 Use of such indices is appropriate if one views crises from the standpoint of a macro policymaker and is equally interested in "successful" and "unsuccessful" speculative attacks. From the standpoint of an investor, manager of foreign reserve positions or a macro policymaker who cares primarily about "successful attack" on the currency, a simpler definition of currency crisis based on large depreciations is more appropriate. To distinguish our approach from that of studies which employ currency pressure indicators, we shall refer to crises defined using large devaluations as currency crisis.. In the process of currency crisis analysis, much effort has been made to build an appropriate model that could detect a possible crisis in advance and accordingly various currency crisis forecasting models and early warning systems have been constructed. [9] [10] [11] [12] In general, there are three types of currency crisis analysis models. First of all, there are case studies of specific devaluation episodes, often employing explicit structural models of balance of payments crises. Notable examples include Blanco and Garber, 13 Cumby and van Wijnbergen, 14 Jeanne and Masson, 15 Cole and Kehoe, 16 and Sachs et al. 8 These studies are informative about the episodes in question and revealing with regard to structural model proposed by theorists.. 3 Secondly, many studies have analyzed currency crises using signal approaches. Typical examples include Kaminsky et al., 2 Berg and Pattillo, 7 Kaminsky and Reinhart, and Goldstein et al. 11 In such models, individual variables such as real effective exchange rate or debt to GDP levels are deemed to "signal" that a country is potentially in a crisis state when they exceed some threshold. While intuitively appealing, signal models are essentially univariate in character. Kaminsky 18 suggested a way of combining individual signals to form a composite index for prediction purposes, but this does not solve all problems. To illustrate, suppose that several of the signal variables are very closely correlated. They may each have a very high noise-tosignals ratio even though all but one of them adds almost nothing to the collective analysis. The problem here is that the noise-to-signal weights are themselves based on univariate analysis. A third type of currency crisis analysis looks at pooled panel data, employing discrete choice techniques in which macroeconomic and financial data are used to explain discrete crisis events in a range of countries. For instance, Eichengreen et al. 19 adopted probit models for industrial countries using quarterly data between 1959 and 1993. Berg and Pattillo 7 also used probit model and Kumar et al. 3 utilized logit model to predict emerging market currency crashes. However, these models are parametrically statistical models, which have several statistical assumptions and meantime weak robustness. Nevertheless currency crisis is a rare event with nonlinear characteristics, it is hard for these statistical models to capture the all possible crisis for all time.. In terms of such situations, designing a new approach or model for assessing currency vulnerability and predicting currency crises level is an important and meaningful objective. Differing from previous studies, our proposed approach to forecasting is to apply general regression neural network (GRNN) to predict currency crisis level for Southeast Asian economies based upon the disastrous 1997-1998 financial crisis data. In order to build the currency crisis forecasting model, some typical indicators of currency exchange rates volatility are first chosen, then the indicators are input into GRNN for training and finally the trained GRNN are used for prediction. Specially the level of the 1997-1998 Southeast Asian currency crises are divided into three grades, green, yellow and red, in terms of the currency exchange rates volatility level and then presented to the GRNN as training sets. To verify the effectiveness of the proposed currency crisis forecasting approach, several typical Southeast Asian countries, Indonesia, Philippine, Singapore and Thailand, are selected. In addition, testing data set covered the period form January 1999 to December 2004. It turns out that the crisis trained GRNN model has a high degree of accuracy in judging the currency crisis level of each country.. The main contributions of the article reflect the following three-fold from the different perspectives. First, from the theoretical point of view, we devise a new currency crisis forecasting model with the application of GRNN and exchange rate volatility indicator. Second, from the viewpoint of application, since our proposed approach presents high prediction accuracy, the proposed approach can meet the different users' need. Finally, the proposed approach might also be useful to other countries trying to build a currency crisis forecasting model and currency crisis early warning system from the generalization's view.. The main motivation of this paper is to explore the predictability of currency crisis with GRNN. The rest of this paper is organized as follows. Section 2 introduces the building process of the proposed currency crisis forecasting model in detail. Section 3 gives the experiment scheme. The experimental results are shown in Sec. 4 . Some conclusions are drawn in Sec. 5. In this study, a GRNN-based currency crisis forecasting model for four typical Southeast Asian currencies is proposed with the use of the 1997-1998 disastrous currency crisis data. Applications of the proposed model to testing data display surprisingly high accuracy in judging the currency crisis level of each country, revealing that the proposed approach might also be useful for other countries around the world to try to build a currency crisis forecasting model or a currency crisis early warning system. Furthermore, by comparison with the other forecasting methods, our proposed approach is superior to the other classification methods in currency crisis prediction, as demonstrated in our experimental analysis, implying that our proposed approach can be used as a promising tool for currency crisis forecasting.. However, this study only applies one intelligent method -GRNN -to predict currency crisis level of four Southeast Asian countries. With the increasingly advancement of artificial intelligence, more intelligent techniques, for example, support vector machine and artificial immune system, can be used for currency crisis forecasting in a wider scope around the world. We will look into these issues in the near future.

B I I O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I I I O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O


SUPPORTING GEOGRAPHICAL MEASURES THROUGH A NEW VISUALIZATION METAPHOR IN SPATIAL OLAP Pivot tables are the de-facto standard paradigm for the visualization of data in the context of multidimensional OLAP analysis. However it is recognized that they are not suited, in their original definition, to support spatio-temporal data analysis (and in particular geographical measures). In this paper, we propose the GeOlaPivot Table, a visual metaphor intended as an extension of the pivot tables specifically conceived to assist decision makers in analyzing geographical measures in spatial data warehouses. In order to show the analysis capabilities of our metaphor we describe it using an example concerning the supervision of infectious diseases in Italy. This approach represents a first effort in adapting advanced geovisualization techniques to SOLAP ones, in order to create a specific visual paradigm for Spatial OLAP able to effectively support and fully exploit spatial multidimensional analysis process. Moreover, we present an architecture for a web-based environment able to support geographical measures in SOLAP analyses exploiting the GeOlaPivot Table visual metaphor. Nowadays organizations are collecting in Data Warehouses even more and more heterogeneous information, often containing precious but hidden information. OLAP (OnLine Analytical Processing) systems support the Decision Makers in discovering this concealed information, by allowing him/her to interactively explore the multidimensional database through a visual interactive user interface.. Indeed, the main strength of these solutions is the possibility to gain an insight into the data, allowing the user to discover unknown phenomena, patterns and data relationships without requiring him/her to master neither the underlying multidimensional structure of the database, nor complex multidimensional query languages (Stolte et al. 2002) . For these reasons, OLAP solutions are widely and successfully adopted in many business contexts. (Franklin, 1992) has shown that about 80% of the data stored in databases integrates some kind of spatial information. It is clear that a fully exploitation of spatial data into decisional process could add a lot of significance to the analytical process. On the other hand, it is also clear that if the spatial dimension is treated as any other descriptive dimension, without consideration for the cartographical component of the data, the resulting analysis capabilities will be highly compromised. However, current OLAP tools present serious limitations when dealing with spatio-temporal analysis: they lack of visual interactive maps, that, revealing spatial trends or relationships and stimulating user's thinking process, represent the main instruments to support a real and effective spatio-temporal analysis process (MacEachren, 2001) .. To overcome these limitations, previous researches on integration of spatial information into multidimensional models leaded to the definition of the Spatial OLAP (or SOLAP) concept (Bedard, 1997) . SOLAP solutions usually lie on coupling OLAP functionalities, used to provide multidimensionality, and Geographic Information Systems (GIS) functionalities, used to store and visualize the spatial information . These solutions, thanks to a cartographic representation of the multidimensional data, permit to visualize measures on map and to discover geographical correlations between facts and members. It is worth pointing out that common GIS techniques, such as Overlay or MultiMaps, are not appropriate. This because the Overlay, even if reveals spatial relations, hides the precious information that a measure could belong to different layers (a spatial measure could be associated to different combination of level members), while MultiMaps are conceived to emphasize thematic relations rather than spatial ones.. Even if the numerous ongoing works (Malinowski, E., and Zimányi 2005) , (Bimonte et al 2006) , (Kouba et al 2000) confirm the importance and the innovating character of SOLAP, a detailed analysis of capabilities of current SOLAP tools reveals that many further enhancements are required in their user interfaces. In particular, at best of our knowledge, currently there are no SOLAP tools offering the possibility to visually compare geographical measures (for instance to compare areas of two regions affected by some kind of phenomenon). This is a crucial task in the analytical process, since it can take advantage of human abilities to perceive visual patterns and to interpret them.. To address this issue, in this paper we propose a new visualization metaphor, named GeOlaPivot Table, especially suited to deal with spatial measures in SOLAP environments. It exploits the concept of Pivot Table, adding to it a 3 rd dimension by using the Space-Time Cube (Hägerstrand, 1970) 3D representation. In this way, it is possible to overlap, into a single and coherent visual representation, different layers of information, thus permitting to evaluate the relationships among the geographical measures. To better explain the usefulness of the proposal, we provide an example of application to a real Spatial Data Warehouse concerning the supervision of infectious diseases in Italy.. Moreover, we also propose a user interface and an architecture for a web based SOLAP solution, supporting the GeOlaPivot Table metaphor, starting from existing (S)OLAP frameworks.. The remainder of the paper is structured as follows. Section 2 describes the main OLAP and SOLAP concepts and provides a panorama of existing SOLAP tools. In Section 3 we describe our GeOlaPivot The growing amount of spatial information in Data Warehouses leads to the formulation of the SOLAP concept. Indeed, it is a key technology to take full advantage of the knowledge concealed within enterprise datasets, and many efforts are being devoted in this field to provide Decision Makers with powerful analysis tools. However, when introducing geographical measures in the SOLAP domain, many problems arise, mainly because there isn't a widely accepted interaction metaphor to support comparisons of spatial measures. In this paper, starting from an analysis of existing SOLAP tools, revealing a lack in the support of geographical measures, we have firstly proposed the metaphor of GeOlaPivot Table, which coherently merges, in a single visual environment, the key concepts of Pivot Tables and Space-Time Cube. This approach represents a first effort in adapting advanced geovisualization techniques to SOLAP ones, in order to create a specific visual paradigm for Spatial OLAP able to effectively support and fully exploit spatial multidimensional analysis process.. A preliminary case study has been described, presenting a possible application of our metaphor to a spatial Data Warehouse concerning the supervision of infectious diseases in Italy.. Then, we have illustrated the main issues about the development of a web-based environment exploiting the GeOlaPivot Table visual metaphor to support geographical measures in SOLAP analyses and a three tier architecture has been described. Currently we are working on the implementation of the proposed architecture. In particular, for the development of the Graphical User Interface able to present the 3D cube of the GeOlaPivot Table, we are currently experimenting the use of AJAX technology, in order to significantly reduce the amount of network traffic, and consequently the latency of the user interface. It is worth to remark that the projection of raster maps within the cubes could require significant programming efforts. Thus, we plan to develop an API supporting this kind of task.. About future work, we would like to extend the GeOlaPivot Table with adequate graphic semiology rules to visualize thematic attributes of spatial dimensions and measures and by introducing chorems in order to visualize spatial trends.

O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Experimenting with IDA* search algorithm in heterogeneous pervasive environments Abstract Today, mobile and smart phones are often viewed as enablers of pervasive computing systems because they provide anytime and anywhere access to information services and computational resources. However, mobile devices are inherently constrained in their computational power and battery capacity making them mere "dumb terminals" connected to a resource-rich pervasive environment. If they are ever to play a more prominent role as true elements of a pervasive environment, mobile devices must be able to embed more application logic and delegate processing requests to pervasive infrastructure. In this paper we discuss distribution and offloading of computationally intensive tasks in pervasive environments populated by mobile devices. This approach is illustrated by experimenting with a distributed version of iterative deepening A* search algorithm. In our approach, the solution space of a problem being solved is partitioned and distributed among heterogeneous mobile devices, which yields a significant increase in the time of finding an optimal solution. Distributed IDA* search algorithm does not require any coordination or communication between mobile devices, but added inter-processor communication through shared memory further increases the efficiency of the algorithm. This paper presents the results of our experiments with the algorithm and discusses a number of issues related to its implementation. In this paper we presented a distributed implementation of IDA* search algorithm. This algorithm is designed specifically for distributed applications running within a pervasive computing system and is aimed to illustrate the feasibility of a mechanism for offloading computationally intensive tasks from a mobile device with limited resources and distributing these tasks within a pervasive system. Such pervasive systems consist of a large number of mobile devices with relatively low-power processors. Computational problems solved in such systems are initiated by a single computational node, which also serves a coordinator in the problem-solving process. We view the community of computational nodes as a multi-agent system, in which each node is capable of solving its own task, but it has limited resources and therefore must rely on cooperation with other nodes to solve larger tasks. Experimental results presented in this paper indicate that distributed implementation of IDA* search algorithm can be enhanced by allowing computational nodes to communicate via a shared memory. However, it is important to keep the balance between the gains in speed and the overhead of exchanging messages needed to implement the shared memory. Intelligent agents are interactive entities that exist as a part of an environment shared with other agents capable of communicating and cooperating with one another. A multi-agent system is a loosely coupled network of intelligent agents working together to solve problems that cannot be solved by any of the individual agents due to their limited individual capabilities (Durfee et al. 1989 ). The term multi-agent system can also be used to describe all types of systems composed of multiple autonomous components displaying the following characteristics (Jennings et al. 1998 ):. • None of the agents have complete capabilities to solve the entire problem, • There is no global system control, • Available data is decentralized among many agents, and • There is no centralized synchronization of computations.. In this work we use all these characteristics as the general design principles that can be applied to pervasive computing systems populated by mobile devices (computational nodes) and problem-solving algorithms that they use. Pervasive systems and applications considered here usually have the following characteristics: processing power of each mobile device within the pervasive computing system is relatively low; at least one of these devices is designated as a coordinator that distributes computational tasks to other computational nodes; there is no direct communication among the nodes of the system; and the size of the computational problem is exceedingly large. At the same time, mobile devices or computing nodes of a pervasive computing system may be viewed as individual agents within a multiagent system: they are capable of solving their own tasks, but larger computational problems require cooperation with other agents; each computational node has access to its own data; and computations of each node are largely unsynchronized with the others. Many discrete optimization problems may be viewed as the problem of finding a path in a state space graph from a given initial node to one or more goal nodes (Pearl 1984) . The quality of a solution is measured by a cost function evaluating the path corresponding to every solution. Following this approach, a discrete optimization problem may be considered as an ordered pair (S, f ), where the set of feasible solutions S is a finite or countable infinite set of all solutions that satisfy a given set of constraints. The function f : S → R is the cost function that maps each element in set S onto the set of real numbers R. The objective of a discrete optimization problem is to find a feasible solution X 0 , such that f (X 0 ) < f (X ) for all X ∈ S. In the vast majority of practical problems, the set of feasible solutions S is quite large, but applying heuristics may significantly reduce the time needed to find an optimal or a sub-optimal solution.. We focus on solving a discrete optimization problem using parallel iterative deepening A* (IDA*) search method. Originally, IDA* was proposed by Korf as a version of well-known A* search algorithm with linear memory requirements (Korf 1985) . The IDA* search method estimates the cost of the current partial solution from initial state I to the current state n using a combined heuristic function f (n) = g(n) + h(n), where g(n) is the cost of solution from the initial state I to state n, and h(n) is the estimated cost of the solution from state n to the goal state G.. The IDA* search algorithm reduces its memory requirements by performing a series of independent depth-first searches bounded by an f-cost value limiting the length of an expanded path. Therefore, each iteration of IDA* expands paths from all search space states inside the current f-cost contour, as shown in Fig. 1 .. A number of distributed and parallel implementations of IDA* search algorithm have been proposed. A distributed version of IDA* search algorithm is implemented by Parallel Window Search, in which the entire problem search space is analyzed by each processor, but with a different value of f-cost (Powley and Korf 1991) . There are a number of parallel implementations of IDA* search algorithm designed specifically for SIMD and MIMD architectures (Reinefeld and Schnecke 1994) . These implementations require a mechanism for centralized coordination of processors. Most of these algorithms are not easy to adapt to system architectures where difference between the computational power of different processors is unknown and where the capabilities for inter-processor communication are limited. Parallel implementations of IDA* search algorithm rely heavily on the ability to balance the load among different processors. In these implementations, the problem search space is partitioned into sub-problems, and each processor is assigned its own subspace to explore. For most problems, it is impossible to predict the actual size of the search space measured as the number of nodes in the search space tree that must be expanded before a solution is found. This may result in a wide disparity in the size of the problem search space assigned to different processors. To improve the speed of finding a solution, such algorithms require a complex scheme to dynamically repartition the search space to minimize processor idling without a significant increase in inter-processor communication.. We propose a distributed implementation of IDA* algorithm designed specifically for distributed computing applications running within a pervasive computing system populated with low-powered mobile devices. Our implementation of the algorithm has the following characteristics:. • A central server is required for task initiation and solution assembly; • Coordination of computing nodes is minimized; • Synchronization of computation is not required; • Communication among the computing nodes is not required; • Computing nodes are heterogeneous and their computational power may vary; and • Fault-tolerance is achieved by reallocating a task to a new computing node.. The core of our distributed implementation of IDA* search algorithm consists of three phases as follows:. Phase I. Search space partitioning As shown in Fig. 2 , a coordinator is required to expand several of the first levels of the search space using a standard non-distributed version of he IDA* algorithm. This generates a number of partial solutions leading from the initial node I to several intermediate nodes within the search space graph. Each partial solution corresponds to a subset of the solution search space, as illustrated in Fig. 2 .. Phase II. Distributed search Each partial solution generated in Phase I is assigned to a single computational node. The resulting partition of the search space corresponding to each computing node is expanded until a feasible solution is found. When the computational node finds a solution, it is optimal within the solution subspace assigned to that node. However, the node itself cannot verify the global optimality of this solution because the node cannot estimate the cost of solutions found by other nodes.. Phase III. Solution assembly After a computational node finds a feasible solution within the search subspace assigned to it, this solution is returned to the coordinator. It is the coordinator's responsibility to identify an optimal solution among many feasible solutions based on the optimality criteria (i.e. solution cost) specific to the given problem.. None of the three phases of our distributed implementation of IDA* search algorithm require any synchronization or significant communication between each of the computing nodes and the coordinator. Such communication is only required to take place when a computing node receives its partial solution and when it reports the found feasible solution back to the coordinator.

O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


A faster algorithm for the resource allocation problem with convex cost functions We revisit the classical resource allocation problem with general convex objective functions, subject to an integer knapsack constraint. This class of problems is fundamental in discrete optimization and arises in a wide variety of applications. In this paper, we propose a novel polynomial-time divide-and-conquer algorithm (called the multi-phase algorithm) and prove that it has a computational complexity of O(n log n log N ), which outperforms the best known polynomial-time algorithm with O n(log N ) 2 . Consider the classical resource allocation problem which can be written as an integer programming problem as follows,. where Z + 0 denotes the set of nonnegative integers. We assume that each f i is a convex function defined over [0, N ] and N is a positive integer. This problem is of particular interest when N n, i.e., the number of resource units far exceeds the number of players. The compact physical description of the problem is to allocate a fixed homogeneous pool of N resource units in an optimal way to n distinct players so as to minimize the total allocation cost. This problem is commonly referred to as the distribution of efforts problem.. This problem is perhaps the simplest nonlinear combinatorial optimization problem, which has been extensively studied in Computer Science and Operations Research literature. Gross [10] first developed a simple greedy algorithm with computational complexity O(N log n) to exactly solve this problem. The same type of greedy algorithm was then re-discovered by other researchers such as Fox [7] and Shih [20] . Subsequently, Katoh et al. [14] proposed an algorithm based on Lagrange multiplier methods, requiring O n 2 (log N ) 2 time. To this date, the best known polynomial-time algorithm for this problem runs in O n(log N ) 2 , which is due to the seminal work by Galil and Megiddo [8] . Many researchers have also focused on some variants of this basic problem (see, e.g., Dreyfus and Law [4] , Weinstein and Yu [23] , Dunstan [5] ).. The key theoretical contribution of our work is to propose a novel polynomial-time algorithm (called the multi-phase algorithm) that runs in O(n log n log N ), which represents a significant improvement in computational complexity over the existing literature. The key idea of the whatwe-call multi-phase algorithm is to find the optimal partition of the marginal costs into several groups in each phase of our algorithm, in order to achieve the tightest complexity bound. It turns out that the optimal number of partitions in each phase is en where e ≈ 2.71828 is the base of the natural logarithm and the ceiling function x is the smallest integer not less than x. Our algorithm is conceptually very simple and readily implementable in many practical settings.. This optimization problem finds various practical applications. In fact, our paper was primarily motivated by an important class of problems in inventory and supply chain management called the joint replenishment problem (JRP) (see, e.g., Khouja and Goyal [15] for an excellent review). More specifically, a warehouse manager wants to decide the total replenishment quantity and then allocate these ordered units to multiple (but non-identical) retailers. The problem studied in this paper serves as an important subroutine of the optimal allocation or distribution problem, given the total replenishment quantity in each replenishment cycle. Concisely speaking, the warehouse manager needs to determine how to allocate the fixed amount of goods to multiple retailers in order to minimize the sum of holding and backlogging costs (see the detailed model in Section 5).. Besides the aforementioned example, resource allocation problems are also abundant in many other application domains (see survey papers by Hochbaum [11] and by Patriksson [19] ). Calinescu et al. [2] improved the quality of survey results with taking into account optimal resource planning. Federgruen and Groenevelt [6] applied greedy algorithms to network-based models. Veinott [21, 22] provided procedures of choosing the amounts of a single product to produce in each of a finite number of time periods in order to minimize the production and inventory carrying costs over the periods. Also, Johnson [12] and Karush [13] established methods to determine the optimal production program over time of a given commodity to minimize the total costs. Zipkin [24] applied different algorithms to find the optimal allocation for portfolio selection problems. Lee and Pierskalla [16] presented a mass screening program for computing the optimal test choice and screening periods among a fixed testing budget. The optimization model is also used in the optimum allocation problem in stratified sampling (see, e.g., Neyman [17] ) and the optimal allocation problem for software-testing resources (see, e.g., Ohtera and Yamada [18] ).. The remainder of this paper is organized as follows. Section 2 recalls the simple algorithm and shows its complexity bound. In Section 3, by proving a key lemma, we present and analyze a two-phase algorithm which lays the foundation for our multi-phase algorithm. In Section 4, we propose the multi-phase algorithm, and then prove its computational complexity bound. Section 5 is devoted to the numerical studies of our proposed algorithm. Finally, we conclude our paper and point out future research directions in Section 6.. Throughout the paper, we use the notation x and x frequently, where x is defined as the largest integer value which is smaller than or equal to x; and x is defined as the smallest integer value which is greater than or equal to x. Additionally, we denote x + = max{x, 0}. In this paper, we revisited the classical resource allocation problem with general convex functions, which is fundamental in optimization theory and widely applicable in practice. We proposed a novel algorithm called multi-phase algorithm and analyzed its computational complexity. We demonstrated, once again, the power of divide-and-conquer ideas combined with exploiting the special problem structure. One promising future research direction is to consider non-separable convex objective functions in which new ideas and techniques are needed to be developed.

O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Optimality of beamforming condition for multiple antenna systems with mean feedback The necessary and sufficient condition for beamforming optimality for multiple-input multiple output (MIMO) systems with mean feedback has been derived and thoroughly investigated in this article. The condition is an inequality that contains parameters of the number of antennas, transmission power, and the singular values of channel mean matrix. When the beamforming optimality condition is satisfied, the Shannon capacity of MIMO system can be achieved by beamforming and hence scalar codes can therefore be used to achieve the maximum capacity. The channel is modeled as the sum of a scattering matrix of i.i.d zero mean, unit variance complex Gaussian random variables, and a mean matrix having its rank r ≥ 1. The beamforming condition inequality performance versus system parameters of signal-to-noise ratio and Ricean factor have thoroughly been investigated by numerical results. Computer simulations show that the beamforming strategy can be adopted on a relatively relaxed beamforming condition without the loss of capacity performance. In the long-term evolution advanced (LTE-A) [1] of the 3rd Generation Partnership Project, multiple-input multiple output (MIMO) has been considered as a key technology in the physical layer. Telatar [2] and Foschini [3] first formulated the system capacity of the MIMO systems assuming independent and identically distributed fading at different antennas. Having acquired the perfect channel state information (CSI) in the MIMO systems, the transmitter performs a linear transform by multiplying the eigenvector of channel matrix and allocating the power of each data stream by waterfilling algorithm, its system capacity can be obtained. When the transmitter has only partial CSI such as the statistical information of the channel, acquiring the optimal transmission covariance matrix and deriving the condition for beamforming optimality are two major obstacles. A few studies on this aspect have been presented [4] [5] [6] [7] [8] [9] [10] [11] . For one issue, to achieve maximum system capacity, the optimal transmission of covariance matrix is essential to the optimal transmitter. For another, by verifying whether the beamforming optimality condition is satisfied, we can determine whether the transmitter can adopt the beamforming strategy. If so, the operation at the transmitter will be simplified significantly since exhaustive searching for the optimal power allocation is no longer needed and therefore the scalar codes instead of vector codes can be adopted.. Usually, there are two kinds of feedback mechanisms, namely, the mean and the covariance feedbacks [4, [6] [7] [8] [9] [10] . Visotsky and Madhow [4] first resolved the transmitter optimization and derived the optimality condition for beamforming under two cases of mean and covariance feedbacks for the consideration of the multiple-input single-output system. Later, Jafar and Goldsmith [6] extended Visotsky and Madhow's work to MIMO systems, with the assumption that the rank of channel mean matrix is one for channel mean feedback. In [8] , the optimal transmission directions and the condition for beamforming optimality have been derived to maximize the effective capacity. The concept of effective capacity [12] was proposed to measure the quality of service. Jorswieck et al. [8] mainly focused on the case of covariance and the mean feedbacks were not considered. Li et al. [10] studied the transmitter optimization and beamforming optimality conditions for double-scattering MIMO channels. The channel model was characterized as a matrix product of transmitter, receiver, and scattering correlation matrices and the covariance feedback was used.. This paper focuses on the derivation of beamforming optimality condition under the mean feedback. In general, the rank of the covariance matrix of the transmission signal is larger than one. By limiting the covariance matrix of the transmitting signal to be one, all power at the transmitter is allocated to a single data stream and therefore the MIMO system is reduced to a single-input single-output system. Correspondingly, this kind of transmission strategy is termed as beamforming strategy. Usually, the rank of optimal transmission covariance matrix of achieving the maximum system capacity is not equal to 1, i.e., the beamforming strategy is not necessarily the optimum strategy. Only if the system settings satisfy a certain condition, then the beamforming strategy achieves the maximum system capacity and it is optimal. Corresponding condition is referred to as the beamforming optimality condition. In this study, the rank of channel mean matrix is generalized and it is not limited to be 1. Therefore, this study is an extension of [6] . The condition for the beamforming optimality is an inequality that contains parameters such as the number of antennas, transmission power, and the singular values of channel mean matrix. The inequality is derived and also thoroughly investigated by numerical method. We also compare the ergodic capacities of the beamforming strategy, optimum strategy, and the equal power allocation method. We also provide a list of conditions under which the beamforming strategy can be adopted.. The rest of the paper is organized as follows. Section 2 describes the MIMO system model. Section 3 derives the necessary and sufficient condition for beamforming optimality under mean feedback. The ergodic capacities for beamforming and optimum strategies have been presented in Section 4. Numerical results and computer simulation are discussed in Section 5, followed by conclusion in Section 6. The beamforming optimality condition for MIMO systems under channel mean feedback has been derived. The rank of channel mean matrix, r, is not limited to one and satisfies 1 ≤ r ≤ min(N T , N R ). The condition has also been examined using a few examples with different channel mean matrices and antenna pairs. Numerical results show that the beamforming optimality condition tends to hold for relatively low SNR and small number of receiver antennas. Three transmission strategies including the beamforming strategy, the optimum Table 1 The channel mean matrix, ∑ μ , in (7) for different antenna pairs strategy, and the equal power allocation method, have been evaluated by computer simulation. Simulation results imply that the proposed beamforming strategy can achieve nearly the same capacity as that of the optimum strategy on a relatively relaxed constraint of F ≤ 0.3. Figure 1 The beamforming function F versus Ricean factor K for SNR = -5 dB, 0 dB, and 5 dB, respectively. The 2 × 1 system ergodic capacity versus SNR for the beamforming strategy, the optimum strategy, and the equal power allocation, respectively.

O O B O O O O O O B I O O O O O O B O O B I I I O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O B O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O B O O O O O O O O O O O O O O O O O O O O B I I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O B I O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O B I O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O B O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O B O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O B I O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O B I O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O