当前位置:文档之家› Abstract Parallel skeletons for manipulating general trees

Abstract Parallel skeletons for manipulating general trees

Abstract Parallel skeletons for manipulating general trees
Abstract Parallel skeletons for manipulating general trees

Parallel skeletons for manipulating general trees

Kiminori Matsuzaki *,Zhenjiang Hu,Masato Takeichi

Graduate School of Information Science and Technology,The University of Tokyo,Tokyo 113-8656,Japan

Received 31December 2005;received in revised form 20May 2006;accepted 6June 2006

Available online 4August 2006

Abstract

Trees are important datatypes that are often used in representing structured data such as XML.Though trees are widely used in sequential programming,it is hard to write e?cient parallel programs manipulating trees,because of their irregular and ill-balanced structures.In this paper,we propose a solution based on the skeletal approach.We formalize a set of skel-etons (abstracted computational patterns)for rose trees (general trees of arbitrary shapes)based on the theory of Con-structive Algorithmics.Our skeletons for rose trees are extensions of those proposed for lists and binary trees.We show that we can implement the skeletons e?ciently in parallel,by combining the parallel binary-tree skeletons for which e?cient parallel implementations are already known.As far as we are aware,we are the ?rst who have formalized and implemented a set of simple but expressive parallel skeletons for rose trees.

ó2006Elsevier B.V.All rights reserved.

Keywords:Skeletal parallelism;Tree skeletons;Rose trees;Constructive algorithmics

1.Introduction

Trees are important datatypes that are often used in representing structured data such as XML.In recent years,the growth of computational power enables us to store huge data in the form of trees.This calls for methods and systems of manipulating huge trees e?ciently,where parallel computing may potentially be a solution.Though hardware environments for parallel computing are getting widely available (e.g.,PC clus-ters),parallel programming is still considered to be a hard task,especially for trees because of their ill-bal-anced and irregular structures.

To resolve this problem,we adopt a novel paradigm of parallel programming called skeletal parallel-ism ,1which was ?rst proposed by Cole [1]and well discussed in [2].In the skeletal parallelism,users build parallel programs by combining ready-made components called parallel skeletons .These parallel skeletons 0167-8191/$-see front matter ó2006Elsevier B.V.All rights reserved.doi:10.1016/j.parco.2006.06.002*

Corresponding author.Tel.:+81358417412;fax:+81358418607.

E-mail addresses:kmatsu@ipl.t.u-tokyo.ac.jp (K.Matsuzaki),hu@mist.i.u-tokyo.ac.jp (Z.Hu),takeichi@mist.i.u-tokyo.ac.jp (M.Takeichi).

1See https://www.doczj.com/doc/8519011495.html,/mic/Skeletons/

.

Parallel Computing 32(2006)

590–603

K.Matsuzaki et al./Parallel Computing32(2006)590–603591 provide parallelizable computational patterns in a concise way and conceal the complicated parallel imple-mentations from users.The skeletal parallelism has several advantages:the two most important ones are that users can build parallel programs as if they wrote sequential programs,and that the skeletal parallel programs are not only e?cient but also architecture independent.There have been many studies on par-allel skeletons for lists or arrays[3–9]and for binary trees[9–15],but there were few studies for general trees of arbitrary shapes.

This paper addresses parallel programming on rose trees[16],trees of arbitrary shapes.Many tree struc-tures are straightforwardly formalized as rose trees,and many tree algorithms can be speci?ed on these rose trees.We start by formalizing seven basic computational patterns over rose trees(rose-tree skeletons)based on the theory of Constructive Algorithmics[17–19].Constructive Algorithmics was originally proposed for sys-tematic development of sequential algorithms,and has also been applied to the speci?cation of parallel skel-etons for lists[5–9],matrices[20],and binary trees[9–11].Our rose-tree skeletons are straightforward extensions of binary-tree skeletons where two new skeletons are added to describe computational patterns among siblings.We then show rose-tree skeletons can be implemented e?ciently in parallel.We represent rose trees in the form of binary trees,and provide a mapping from the computation on rose-tree skeletons to that on binary trees speci?ed with parallel binary-tree skeletons.Since the binary-tree skeletons can be imple-mented e?ciently in parallel[11–14],our rose-tree skeletons can also be implemented in parallel,and thus we call them parallel rose-tree skeletons.We have implemented the rose-tree skeletons in C++and MPI as wrapper functions of the binary-tree skeletons on our parallel skeleton library,and have obtained nice exper-imental results.

The rest of the paper is organized as follows.In Section2,we brie?y introduce the notations and review the parallel binary-tree skeletons.In Section3,we formalize seven rose-tree skeletons with discussions about their expressiveness,and show their e?cient parallel implementation in Section4.We report experimental results in Section5.Finally we discuss related work in Section6,and make conclusion remarks in Section7.

2.Preliminaries

In this section,after introducing important notational conventions used in this paper,we review parallel binary-tree skeletons[10,11].

2.1.Notations

In this paper,we borrow the notation of Haskell[21,22].In the following,we brie?y review important nota-tions and de?ne data structures.Roughly speaking,the de?nitions in Haskell in this paper can be read as mathematical function de?nition except for the function applications denoted by spaces.

2.1.1.Functions and operators

Function application is denoted by a space and the argument may be written without brackets.Thus f a means f(a).Functions are curried,and the function application associates to the left.Thus f a b means (f a)b.The function application binds stronger than any other operator,so f aèb means(f a)èb,but does not f(aèb).Function composition is denoted by an in?x operator .By de?nition,we have(f g)a=f(g a). Function composition is associative and its unit is the identity function denoted by id.

In?x binary operators will be denoted byè, ,etc.,and their units are written as iè,i ,respectively.These operators can be sectioned and be treated as functions,i.e.aèb=(aè)b=(èb)a=(è)a b holds.

In deriving parallel programs,algebraic rules on operators such as associativity or distributivity play important roles.We introduce the following generalized rule of distributivity de?ned as a closure property. De?nition1(Extended distributivity[23]).Let be an associative operator.The operator is said to be extended-distributive over operatorè,if there existfunctions p1,p2,and p3such that for any a,b,c,a0,b0,and c0,the following equation holds:

ek x:aèeb x cTT ek x:a0èeb0 x c0TT?k x:AèeB x CT

where

A ?p 1ea ;b ;c ;a 0;b 0;c 0T;

B ?p 2ea ;b ;c ;a 0;b 0;c 0T;and

C ?p 3ea ;b ;c ;a 0;b 0;c 0T:

We call functions p 1,p 2,and p 3characteristic functions.

In fact,many pairs of operators satisfy this extended distributivity.For example,let èbe an associative operator,then it is also extended-distributive over èitself.If operators èand are associative operators and the operator distributes over operator è,then of course the operator is extended-distributive over è.Several other pairs of operators satisfy this property even if distributivity does not hold on them [23].

2.1.2.Lists and list comprehension

Cons lists (or simply lists)are ?nite sequences of elements of the same type.A list is constructed either by an empty list (Nil )or by adding an element to a list (Cons ).The datatype of a list whose elements are of type a is de?ned as follows:

data List a ?Nil j Cons a eList a T:

We use abbreviations:[a ]for List a ,[]for Nil ,and (a :as )for (Cons a as ).

List comprehension is a syntax sugar for generation of lists.Expression [1..#ts ]generates a list of increasing integers from one to the number of elements in ts ,and list comprehension [f t i j i 2[1..#ts ]]generates a list by applying function f to each element in ts .In this paper,we denote t i for the i -th element of list ts ,and we use similar notations for other lists too.We introduce a notation for consumption of lists.Let èbe an associative operator with its unit i è,then P èdenotes the reduction of a list with the operator è.Informally,the P èis de?ned as follows:X è

? ?i è

X è?a 1;a 2;...;a n ?a 1èa 2èáááèa n

We introduce two functions called scans or pre?x-sums .The scan operation on lists,scan ,takes an associative operator and a list,and accumulates values with the operator from left to right.Function scan 0is a reversed scan https://www.doczj.com/doc/8519011495.html,rmally,these two functions are de?ned as follows:

scan eèT?a 1;a 2;...;a n ??i è;a 1;...;a 1èáááèa n à1

scan 0eèT?a 1;a 2;...;a n ??a 2èáááèa n ;a 3èáááèa n ;...;a n ;i è

2.1.

3.Binary trees

Binary trees are trees whose internal nodes have exactly two children.The datatype of binary trees whose internal nodes have values of type a and leaves have values of type b is de?ned as follows:

data BTree a b ?Leaf a j Node b eBTree a b TeBTree a b T:

We introduce two functions for manipulating binary trees.Function root b returns the value of the root node,and function setroot b takes a binary tree and a value,and replaces the value of the root node with the input value.Note that we use _to denote a do not care value.

root b eLeaf n T

?n setroot b eLeaf n Ta ?Leaf a

root b eNode n T?n setroot b eNode n l r Ta ?Node a l r

2.1.4.Rose trees

Rose trees (a term coined by Meertens [16])are trees whose internal nodes have an arbitrary number of children.In this paper we assume all the nodes in a rose tree have values of the same type.The datatype of rose trees whose nodes have the values of type a is de?ned as follows using lists:

data RTree a ?RNode a ?RTree a :

592K.Matsuzaki et al./Parallel Computing 32(2006)590–603

K.Matsuzaki et al./Parallel Computing32(2006)590–603593 Similar to binary trees,we introduce two functions for manipulating rose trees.Function root r returns the va-lue of the root node,and function setroot r replaces the value of the root node with the input value.

root reRNode a tsT?a setroot reRNode a tsTb?RNode b ts

2.2.Basic binary-tree skeletons

The basic parallel binary-tree skeletons[10,11]are the following?ve higher-order functions,which are cat-egorized as follows:

?Nodewise computations:map and zipwith

?Bottom–up computations:reduce and upwards accumulate

?Top–down computation:downwards accumulate

The de?nition of the parallel binary-tree skeletons is given in Fig.1.In this paper,we denote the parallel skeletons for binary trees in the sans-serif font with a su?x b.

Fig.1.De?nition of binary-tree skeletons.

594K.Matsuzaki et al./Parallel Computing32(2006)590–603

E?cient implementations of these parallel skeletons have been studied[12–14]based on the tree contraction algorithms[24,25].The tree contraction algorithms are important parallel algorithms for manipulating binary trees of arbitrary shapes e?ciently.

The parallel skeleton map b takes two functions k L and k N and a binary tree,and applies k L to each leaf and k N to each internal node.The parallel skeleton zipwith b takes two functions k L and k N and two binary trees of the same shape,and zips the trees up by applying k L to each pair of leaves and k N to each pair of internal nodes.

The parallel skeleton reduce b takes a function k and a binary tree,and collapses the tree into a value by applying the function k in a bottom–up manner.The parallel skeleton uAcc b takes a function k and a binary tree,and computes reduce b k for each subtree.In other words,this skeleton applies the function k in a bottom–up manner,and returns a tree whose values are the results of bottom–up reduction.To guarantee existence of an e?cient parallel implementation of the reduce b and uAcc b skeletons,we require the existence of functions/, w L,w R,and G,satisfying the following equations:

k n x y?Ge/nTx y

n l n0Tx y

G n leG n0x yT?Gew

L

n r n0Tx y

G neG n0x yTr?Gew

R

We denote the function k satisfying the condition above as k=h/,w L,w R,G i.When these functions exist we can implement the reduce b and uAcc b skeletons based on the tree contraction algorithms[10,14].

The parallel skeleton dAcc b takes an associative operatorè,two functions g l and g r,and a binary tree.This skeleton computes in a top–own manner by updating accumulative parameter c,whose initial value is the unit of the operator,iè.The accumulative parameter is updated withèand g l for the left child,and withèand g r for the right child.The condition for e?cient parallel computation is the associativity of the operatorè.

We brie?y remark on the parallel computation cost of the skeletons.In the discussion of parallel compu-tation cost,N indicates the number of nodes in a tree,and P the number of processors.The parallel compu-tation cost of map b k L k N and zipwith b k L k N is O(N/P)if the functions k L and k N are computed in constant time.When there exist constant-cost functions satisfying the condition of reduce b k and uAcc b k,then these skeletons can be computed in O(N/P+log P)parallel time using the tree contraction techniques.The parallel computation cost of dAcc b(è)g l g r is also O(N/P+log P),if the operatorèand the functions g l and g r are computed in constant time.

2.3.Specialized binary-tree skeletons

We de?ne two communication skeletons for reasons of readability and e?ciency.The parallel skeleton getchl b takes a value and a binary tree,and puts the left child’s value for each internal node and the input value for each leaf.In other words,this skeleton shifts each left child’s value to its parent.The parallel skeleton getchr b is symmetric to the getchl b skeleton:this skeleton takes a value and a binary tree,and put the right child’s value for each internal node and the input value for each leaf.

In fact we can express them with the map b and uAcc b skeletons.We can furthermore implement the getchl b and getchr b skeletons to run in O(N/P)parallel time,since the dependency in these skeletons is local.

3.Rose-tree skeletons

In this section,we formalize computational patterns on rose trees based on the theory of Constructive Algorithmics[17–19],and illustrate how we can develop programs with these skeletons.

3.1.Speci?cation of rose-tree skeletons

The key idea of Constructive Algorithmics is that the computation structure of algorithms should be deriv-able from the data structures the algorithms manipulate.We have de?ned rose trees as trees whose internal node has a list of children,and thus,we specify computational patterns on rose trees by extending those

K.Matsuzaki et al./Parallel Computing32(2006)590–603595 on binary trees with computations on lists.We formalize seven skeletons on rose trees,which are categorized into the following four groups:

?Nodewise computations:map and zipwith,

?Bottom–up computations:reduce and upwards accumulate,

?Top–down computation:downwards accumulate,and

?Intra-siblings computations:rightwards accumulate and leftwards accumulate.

We shall denote the rose-tree skeletons in the sans-serif font with a su?x r.In this paper,we give an intu-itive speci?cation of them using list comprehensions(Fig.2).Their formal de?nition speci?ed as mutual recur-sive functions is summarized in the technical report[26].

We de?ne nodewise computations similar to those on binary trees.Rose-tree skeleton map r takes a func-tion k and a rose tree,and applies the function to each node.Rose-tree skeleton zipwith r takes a function k

Fig.2.De?nition of rose-tree skeleton.

and two rose trees of the same shape,and zips them up by applying the function to each pair of correspond-ing nodes.

Since rose trees are de?ned with lists,we specify rose-tree skeleton reduce r with two operators:one for fold-ing the list of children,and the other for merging the result of children with their parent.Thus,rose-tree skel-eton reduce r takes two operators and a rose tree,and collapses the tree into a value in a bottom–up manner.By de?nition,the operator should be associative.For e?cient parallel implementations,we furthermore require some conditions on the two operators.We provide the following two su?cient conditions.

?The operators èand form an algebraic semi-ring,that is,both èand are associative with their units,and èis distributive over .

?The operator is extended-distributive over è.

This computational pattern is also called homomorphism on rose trees,and was discussed in our previous paper [23]under the second condition.

We then de?ne another bottom–up computational pattern.Rose-tree skeleton uAcc r (upwards accumulate)takes two operators and a rose tree,and applies the reduce r skeleton for each subtree.Thus,this skeleton returns a rose-tree of the same shape as the input tree.For e?cient implementations of the uAcc r skeleton,we require the same conditions as the reduce r skeleton.

Rose-tree skeleton dAcc r (downwards accumulate)is a top–down computational pattern.By Constructive Algorithmics,we consider that the dAcc r skeleton applies list-consuming operation P èto each path from the root.Similar to the dAcc b skeleton on binary trees,we de?ne the dAcc r skeleton with an accumulative param-eter c as follows.Note that we omit the function applied to each node,since we can use the map r skeleton instead.

The ?ve rose-tree skeletons above are extensions of those on binary trees.We add two skeletons that are speci?c to rose trees by formalizing computations among siblings.Rose-tree skeleton rAcc r (rightwards accu-mulate)takes an associative operator èand a rose tree,and applies the list-consuming operation to the list of the left-siblings for each node.We specify this skeleton to apply the scan operation to each list of siblings.Rose-tree skeleton lAcc r (leftwards accumulate)is symmetric to the rAcc r skeleton.This skeleton applies the reversed scan operation to each list of siblings.Note that r i indicates the i -th element of the rs in the de?nition in Fig.2.

3.2.Example:preorder numbering problem

To see how we can use these rose-tree skeletons for manipulating general trees,we develop a skeletal pro-gram for the preorder numbering problem on rose trees.For a given rose tree,we want to assign a number for each node in the order of the preorder traversal.In the preorder numbering,the number of a leftmost child is larger than that of its parent by one,and the number of another child is larger than its left sibling by the num-ber of nodes in the left-sibling’s subtree.We can give a recursive algorithm for the preorder numbering prob-lem as follows with auxiliary function size that counts the number of nodes in a tree.

pre t ?pre 00t

pre 0c eRNode a ts T?RNode c ?pre 0ec t1tl i Tt i j i 2?1::#ts where l i ?

X t

?size t j j j 2?1::i à1 size eRNode a ts T?1t

X t?size t i j i 2?1::#ts We can compute the results of size by a bottom–up computation using the uAcc r and map r skeletons.We then apply the rAcc r skeleton to accumulate the results from left to right.Finally,we compute the results of pre-order numbering by a top–down computation with the map r ,dAcc r ,and zipwith r skeletons.Therefore,we can give a skeletal program for the preorder numbering problem as follows.For the detailed derivation of the skeletal program,see our technical report [26].

596K.Matsuzaki et al./Parallel Computing 32(2006)590–603

K.Matsuzaki et al./Parallel Computing32(2006)590–603597

pre t?let lt?rAcc retTeuAcc retTetTemap rek x:1TtTT

gt?setroot r0emap rek l:1tlTltT

dt?dAcc retTgt

in zipwith retTdt gt

4.Parallelizing rose-tree skeletons with binary-tree skeletons

In this section,we show a parallel implementation for the rose-tree skeletons.The main idea is to represent rose trees by binary trees and to implement the rose-tree skeletons by the binary-tree skeletons.Since we can implement the binary-tree skeletons e?ciently in parallel[12–14],we can implement the rose-tree skeletons e?ciently as well.

4.1.Binary-tree representation of rose trees

Many researchers have studied the parallel manipulations of binary trees based on the parallel tree contrac-tion algorithms[24,25,27,28],and we can implement the binary-tree skeletons based on the tree contraction algorithms[12,13].To utilize these parallel implementations,we represent the rose trees in the forms of binary trees as shown in Fig.3.This binary-tree representation is one of the widely-used representations[29],but for parallel programming this representation was rarely used.In this representation,every internal node comes from a node in the original rose tree,and all leaves are dummy nodes.The left child of a node in the binary tree is its leftmost child in the original rose tree,and the right child of a node in the binary tree is its next sib-ling in the rose tree.Let n be the number of nodes of the original rose tree,then the number of nodes of the binary tree turns out to be2n+1.This guarantees the asymptotic cost when we utilize the parallel binary-tree skeletons on this binary-tree representation.

To formalize the binary-tree representation,we de?ne functions r2b that transforms a rose tree into its bin-ary-tree representation,and b2r that restores a rose tree from its binary-tree representation.The de?nition of these two functions is shown in Fig.4.Note that b2r r2b=id

holds.

598K.Matsuzaki et al./Parallel Computing32(2006)590–603

4.2.Parallelization of rose-tree skeletons with binary-tree skeletons

We implement the rose-tree skeletons on the binary-tree representation using the parallel binary-tree skeletons.Generally speaking,our implementation of a rose-tree skeleton consists of three steps:(1)apply-ing the function r2b to transform a rose tree to a binary tree;(2)applying binary-tree skeletons to per-form the computation of the skeleton;and(3)applying the function b2r to restore the rose-tree structure if necessary.

Since every node in a rose tree is an internal node in the binary-tree representation,and there are no depen-dencies in the computation of the map r skeleton,we can implement the map r skeleton by simply using the map b skeleton to apply the function to each internal node.Here,we do not care the function for leaves.Similarly,we can also implement the zipwith r skeleton.

map r k?b2r emap b kT r2b

zipwith r k t t0?b2rezipwith b ker2b tTer2b t0TT

The computation of the reduce r skeleton is also a bottom–up one on the binary-tree representation,and thus we can implement it with the map b and reduce b skeletons as follows.Note that we need not to apply the b2r function since the reduce r skeleton returns a value not a tree.

reduce reèT?ereduce b kT emap bek x:i TidT r2b

where k n l r?enèlT r

For the parallel implementation,the function k above should satisfy the condition of the reduce b skeleton. Though it is hard to give a general derivation method,we show that we can derive functions under the two su?cient conditions.We follow the derivation method in[10],where the main idea is to introduce a param-etrized function closed under nested calls.Let G[a]be a parametrized binary-function with parameter a,and we call it closed under nested calls if the following two equations hold.

G?n leG?rn rl rrT?G?w

n l rn rl rr

L

n r ln ll lr

G?n eG?ln ll lrTr?G?w

R

In the following,we show the parametrized functions and the results of the parallel implementation of the reduce r skeleton.

Firstly,letèand form an algebraic semi-ring.In this case,we choose the parametrized function with three parameters a,b,and c as

G?ea;b;cT ?k lr:eaèlT ebèrT c:

From this parametrized function we derive the functions/,w L,and w R for the reduce b skeleton,and we suc-cessfully obtain an equivalent de?nition of the reduce r skeleton on the binary-tree representation as follows: reduce reèTe T?ereduce b h/;w L;w R;G iT emap bek x:i TidT r2b

where/n?en;iè;i T

ea;b;cTl0ea0;b0;c0T?ebèa0;bèb0;eaèl0T ebèc0T cT

w

L

w

ea;b;cTr0ea0;b0;c0T?eaèa0;aèb0;eaèc0T ebèr0T cT

R

Gea;b;cTl r?eaèlT ebèrT c

Secondly,let the operator be extended-distributive overèwith characteristic functions p1,p2,and p3.Here, we choose the parametrized function with four parameters a,b,c,and d as

G?ea;b;c;dT ?k l r:aèeb ecèlT r dT:

From this parametrized function we derive the functions/,w L,and w R for the reduce b skeleton,and we obtain the following parallel implementation of the reduce r skeleton as follows:

reduce reèTe T?ereduce b?/;w L;w R;G T emap bek x:i TidT r2b

where/n?eiè;i ;n;i T

w

L

ea;b;c;dTl0ea0;b0;c0;d0T

?let tup?ea;b ecèl0T;d;a0;b0;d0T

inep

1tup;p

2

tup;c0;p

3

tupT

w

R

ea;b;c;dTr0ea0;b0;c0;d0T

?let tup0?ec;i ;i ;a0;b0;d0T

tup?ea;b;r0 d;p1tup0;p2tup0;p3tup0T

inep

1tup;p

2

tup;c0;p

3

tupT

Gea;b;c;dTl r?aèeb ecèlT r dT

Since the uAcc r skeleton is similar to the reduce r skeleton,?rst let us consider applying the map b and uAcc b skeletons with the same functions used in parallelizing the reduce r skeleton.

b2r euAcc b kT emap bek x:i TidT r2b

where k n l r?enèlT r

Unfortunately,the results are not what we want for the uAcc r skeleton.Since an internal node in the binary-tree representation has a right-child that was a sibling in the original rose tree,the result of the program above includes the siblings’values.To obtain the desired result,we need to compute(nèl0)again for each internal node where n is the original node’s value and l0is the left-child’s value in the result of the uAcc b skeleton above. We realize this computation by the getchl b and zipwith b skeletons.

Therefore,the equivalent de?nition of the uAcc r skeleton under the binary-tree representation is given as follows.Note that the four functions for the parallel implementation of the uAcc b skeleton,/,w L,w R,and G,are the same as those derived for implementing the reduce r skeleton.

uAcc reèTe Tt?let bt?r2b t

bt0?uAcc b h/;w L;w R;G iemap bek x:i Tid btT

in b2rezipwith bek n l0:nèl0Tbtegetchl b bt0TT

The dAcc r skeleton is a top–down computational pattern on the binary-tree representation.By introducing a recursive function with an accumulative parameter,we can specify the dAcc r skeleton.

dAcc reèT?b2r ef ièT r2b

where f ceLeafT?Leaf

f ceNode n l rT?Node cefecènTlTef c rT

Noting that we can compute the accumulative parameter for the right child as c=cèiè=cè(k x?iè)n,we can implement the function f with the dAcc b skeleton.Therefore,a parallel implementation of the dAcc r skel-eton is as follows:

dAcc reèT?b2r edAcc beèTidek x:ièTT r2b

The skeleton rAcc r traverses the siblings from left to right on rose trees,which corresponds to a top–down traversal on binary trees.Thus,we implement the rAcc r skeleton on the binary-tree representation with the following recursive function f:

rAcc reèT?b2r ef ièT r2b

where f ceLeafT?Leaf

f ceNode n l rT?Node cef ièlTefecènTrT

Though this function f is a top–down computation on the binary-tree representation,in fact we cannot simply describe it with the dAcc b skeleton.This is because we cannot?nd a function for the left-child,g l,such that for any n,iè=cèg l n holds.Therefore,we need to derive another suitable function with an associative operator.

K.Matsuzaki et al./Parallel Computing32(2006)590–603599

600K.Matsuzaki et al./Parallel Computing32(2006)590–603

To derive such an associative operator,we utilize the context preservation technique[4],which derives an associative operator from a parametrized function closed under function composition.Here,we choose a parametrized function de?ned with three parameters p,a,and b,as follows:

k x:if p then xèa else b:

Based on this parametrized function,we derive an associative operator de?ned as follows.

eTrue;p;a;bT eTrue;p0;a0;b0T?eTrue;p0^p;aèa0;if p0then bèa0else b0T

eTrue;p;a;bT eFalse;;;T?eTrue;p;a;bT

eFalse;;;T eflag;p;a;bT?eflag;p;a;bT

Here,the unit of is i =(False,True,iè,_).We introduce the?rst value of the tuple to represent the left-unit of .Using this operator,we successfully derive a parallel implementation of the rAcc r skeleton.

rAcc reèT?b2r emap b kT edAcc re Tg l g rT r2b

where g l x?eTrue;False;;ièT

g r x?eTrue;True;x;T

ke;p;a;bT?if p then a else b

The skeleton lAcc r traverses the siblings from right to left,which corresponds to a bottom–up traversal on the binary-tree representation.Therefore,an implementation of the lAcc r skeleton on the binary-tree representa-tion may have a call of the uAcc b skeleton.We?rst consider the following composition of the uAcc b and map b skeletons.

b2r euAcc b kT emap bek x:ièTidT r2b

where k n l r?nèr

The results of this computation are slightly di?erent from what we want for the lAcc r skeleton:the results should be shifted to the left by one on the rose tree.We resolve this problem by applying the getchr b skeleton before restoring the rose-tree structure with the b2r function.

For the parallel implementation,we next show the function k satis?es the condition of the uAcc b skeleton. For the function k above,we introduce a parametrized function with three parameters p,a,and b as G?ep;a;bT ?k l r:if p then aèr else b

Based on this function,we successfully obtain an parallel implementation of the lAcc r skeleton as follows.

lAcc reèT?b2r egetchr bT euAcc b h/;w L;w R;G iT emap bek x:ièTidT r2b

where/n?eTrue;n;T

w

ep;a;bTl0ep0;a0;b0T?ep^p0;aèa0;if p then aèb0else bT

L

ep;a;bTr0ep0;a0;b0T?eFalse;;if p then aèr0else bT

w

R

Gep;a;bTl r?if p then aèr else b

Now we brie?y discuss the e?ciency of our parallel implementation of the skeletons.We used two functions r2b and b2r for specifying the computation on the binary-tree representation.However,we can remove these two functions away if two rose-tree skeletons are successively called.Thus we give the parallel cost of the rose-tree skeletons without these two functions.The parallel cost of the map r and zipwith r skeletons are O(N/P), and the parallel cost of the other?ve skeletons are O(N/P+log P),where N denotes the number of nodes of the rose trees,and P the number of processors.Note that the implementation of the rose-tree skeletons is cost optimal.

We may develop more involved implementations of the rose-tree skeletons by removing unnecessary inter-mediate structures and optimizing sequential parts.To develop such an implementation is our future work.

We summarize this section with the following theorem.

Theorem 1.The seven parallel skeletons for rose trees de?ned in Fig.2can be implemented in parallel based on the binary-tree representation with the parallel binary-tree skeletons.

Proof.The correctness of the implementation of the rose-tree skeletons is almost self-evident from the deri-vation so far.For more detailed derivation,see our technical report [26].h

5.Experiments

We have implemented the rose-tree skeletons as wrapper functions of the binary-tree skeletons in our skel-eton library,SkeTo [30,31].2To see the e?ciency of the skeletons,we have made experiments with the preor-der numbering problem in Section 3.

The environment is our PC cluster that consists of sixteen uniform PCs connected with Gigabit Ethernet.Each PC has a CPU of Pentium43.0GHz (Hyper Threading ON)and 1GB memory.The OS,the C++com-piler,and the MPI library are Linux 2.6.8,gcc 2.95,and mpich 1.2.6,respectively.We executed the skeletal program with varying number of CPUs used for two trees of 222à1nodes (almost four million).The ?rst tree is a perfect binary tree,and the second tree is a randomly generated tree whose height is seven (this height comes from the average height of XML trees [32]).

The experimental results are shown in Fig.5.The execution times do not include initial transformation/dis-tribution and ?nal gathering.The execution times for the binary tree are 13.0s with one processor and 0.87s with sixteen processors,and the execution times for the random tree are 12.5s with one processor and 1.41s with sixteen processors.For both data,the skeletal program scaled well,in particular,the speedup is 14.9with sixteen processors for the binary tree.In some points the execution times are a little worse (e.g.,with seven processors for the binary tree),but this is due to the ill-balanced partitioning of trees (in terms of the size of partitioned segments)on our implementation of the binary-tree skeletons.

You can see the experimental results for another problem called party planning problem in [31].

6.Related work

6.1.Parallel tree skeletons

Though trees are important data structures,writing general and e?cient parallel programs manipulating trees is made hard by their irregular structures.This calls for helpful methods for parallel programming on trees and here the skeletal approach is a promising paradigm.As domain-speci?c skeletons,Deldari et al.[15]designed and implemented parallel skeletons for Constructive Solid Geometry (CSG).For 2You can download the source code of the binary-tree skeletons and the rose-tree skeletons from our project’s

website.

K.Matsuzaki et al./Parallel Computing 32(2006)590–603601

602K.Matsuzaki et al./Parallel Computing32(2006)590–603

general-purpose tree skeletons,Skillicorn[11]?rst formalized a set of binary-tree skeletons based on Con-structive Algorithmics[17–19].The implementations of these binary-tree skeletons have been developed [12–14]based on the tree contraction algorithms[24,25].

For general trees or general recursive types,Skillicorn[11]and Ahn et al.[33]have given speci?cations of skeletons.However,the former lacks expressiveness whereas the latter did not give parallel implementations. We have tackled these problems and proposed a new set of rose-tree skeletons with e?cient implementation. We believe our rose-tree skeletons are not only theoretically simple but also practically expressive.

6.2.Parallel computation on rose trees and nested lists

Parallel tree contraction algorithms are now the bases for e?cient parallel computations on trees.Though the original idea proposed by Miller and Reif[25]did not limit the shapes of trees as binary trees,many researchers have developed more e?cient tree contraction algorithms based on the assumption of binary trees [24,27,28,34].Thus,according to the e?cient tree contraction algorithms on binary trees,several studies devel-oped parallel algorithms after representing the rose trees as binary trees.Cole and Vishkin[34],Diks and Hag-erup[35],Skillicorn[11]and our previous paper[23]represented rose trees as binary trees by inserting dummy nodes to expand internal nodes.Though these representations suit specifying bottom–up and top–down com-putations,they are poor at specifying intra-siblings computations.In this paper,we adopt another binary-tree representation[29],and this enables us to formalize and implement intra-siblings computations as well.As we see in the example of the preorder numbering problem,these intra-siblings computations play important roles in the manipulation of rose trees.

Several researchers have studied hard the parallel manipulations of nested lists.NESL[36]provides com-putational patterns for nested computations,and Palmer et al.discussed how nested computations can be compiled on this paradigm[37].We can consider nested lists as a subset of rose trees,and the idea of intra-siblings computations comes from these nested lists.

7.Conclusion

In this paper,we have proposed a set of parallel rose-tree skeletons.We designed these skeletons as simple as possible based on Constructive Algorithmics,and showed a parallel implementation based on the binary-tree representation.Our rose-tree skeletons are natural extensions of the binary-tree skeletons proposed so far, and we have added two computational patterns to denote computations among siblings.We have made a pro-totype implementation of our parallel rose-tree skeletons on our binary-tree skeleton library.Despite the rapid development,the skeletons have shown good scalability.

We hope that our rose-tree skeletons provide a basis for not only designing but also implementing parallel tree programs.Our future work is to extend our skeletons with more involved computational patterns on rose trees.One of them is a tree manipulation with the sorting of siblings discussed by Diks and Hagerup[35]. References

[1]M.Cole,Algorithmic skeletons:a structured approach to the management of parallel computation,Research Monographs in Parallel

and Distributed Computing,Pitman,London,1989.

[2]F.Rabhi,S.Gorlatch,Patterns and Skeletons for Parallel and Distributed Computing,Springer-Verlag Inc.,New York,2002.

[3]G.E.Blelloch,Scans as primitive operations,IEEE Transactions on Computers38(11)(1989)1526–1538.

[4]W.Chin,A.Takano,Z.Hu,Parallelization via context preservation,IEEE Computer Society International Conference on Computer

Languages(ICCL’98)(1998)153–162.

[5]M.Cole,Parallel programming with list homomorphisms,Parallel Processing Letters5(2)(1995)191–203.

[6]S.Gorlatch,Systematic e?cient parallelization of scan and other list homomorphisms,in:EuroPar’96Parallel Processing,Second

International Euro-Par Conference,Lecture Notes in Computer Science1124,Springer-Verlag,LIP,ENS Lyon,France,1996,pp.

401–408.

[7]H.Iwasaki,Z.Hu,A new parallel skeleton for general accumulative computations,International Journal of Parallel Programming32

(5)(2004)389–414.

[8]D.B.Skillicorn,The Bird–Meertens formalism as a parallel model,in:J.S.Kowalik,L.Grandinetti(Eds.),NATO ASI Workshop on

Software for Parallel Computation,NATO ARW‘‘Software for Parallel Computation’’,106of F,Springer-Verlag NATO ASI, Cetraro,Italy,1992.

K.Matsuzaki et al./Parallel Computing32(2006)590–603603

[9]D.B.Skillicorn,Foundations of Parallel Programming,Cambridge University Press,1994.

[10]K.Matsuzaki,Z.Hu,M.Takeichi,Parallelization with tree skeletons,in:Proceedings of the Ninth EuroPar Conference(EuroPar

2003),Lecture Notes in Computer Science2790,Springer-Verlag,Klagenfurt,Austria,2003,pp.789–798.

[11]D.B.Skillicorn,Parallel implementation of tree skeletons,Journal of Parallel and Distributed Computing39(2)(1996)115–125.

[12]J.Gibbons,Computing downwards accumulations on trees quickly,in:G.Gupta,G.Mohay,R.Topor(Eds.),Proceedings of16th

Australian Computer Science Conference,vol.15(1),Australian Computer Science Communications,1993,pp.685–691.

[13]J.Gibbons,W.Cai,D.B.Skillicorn,E?cient parallel algorithms for tree accumulations,Science of Computer Programming23(1)

(1994)1–18.

[14]K.Matsuzaki,Z.Hu,M.Takeichi,Implementation of parallel tree skeletons on distributed systems,in:Proceedings of the Third

Asian Workshop on Programming Languages and Systems,Shanghai,China,2002,pp.258–271.

[15]H.Deldari,J.R.Davy,P.M.Dew,A skeleton for parallel CSG with a performance model,Tech.Rep.,School of Computer Studies

Research Report Series,University of Leeds,1997.

[16]L.Meertens,First steps towards the theory of rose trees,CWI,Amsterdam,IFIP Working Group2.1Working paper592ROM-25,

1988.

[17]R.S.Bird,An introduction to the theory of lists,in:M.Broy(Ed.),Logic of Programming and Calculi of Discrete Design,NATO

ASI Series F,36,Springer-Verlag,1987,pp.5–42.

[18]R.S.Bird,O.de Moor,Algebras of Programming,Prentice Hall,1996.

[19]J.Jeuring,Theories for algorithm calculation,Ph.D thesis,Faculty of Science,Utrecht University,parts of the thesis appeared in the

Lecture Notes of the STOP1992Summer school on Constructive Algorithmics(1993).

[20]K.Emoto,Z.Hu,K.Kakehi,M.Takeichi,A compositional framework for developing parallel programs on two dimensional arrays,

Tech.Rep.METR2005-09,Department of Mathematical Informatics,University of Tokyo,2005.

[21]R.Bird,Introduction to Functional Programming using Haskell,Prentice Hall,1998.

[22]S.Peyton Jones,J.Hughes,Report on the programming language Haskell98:a non-strict,purely functional language.Available

from:(1999).

[23]K.Matsuzaki,Z.Hu,K.Kakehi,M.Takeichi,Systematic derivation of tree contraction algorithms,Parallel Processing Letters15(3)

(2005)321–336.

[24]K.Abrahamson,N.Dadoun,D.G.Kirkpatrik,T.Przytycka,A simple parallel tree contraction algorithm,Journal of Algorithms10

(2)(1989)287–302.

[25]https://www.doczj.com/doc/8519011495.html,ler,J.H.Reif,Parallel tree contraction and its application,in:26th Annual Symposium on Foundations of Computer

Science,IEEE Computer Society Press,Portland,OR,1985,pp.478–489.

[26]K.Matsuzaki,Z.Hu,M.Takeichi,Design and implementation of general tree skeletons,Tech.Rep.METR2005-30,Department of

Mathematical Engineering and Information Physics,University of Tokyo,2005.

[27]D.A.Bader,S.Sreshta,N.R.Weisse-Bernstein,Evaluating arithmetic expressions using tree contraction:a fast and scalable parallel

implementation for symmetric multiprocessors(SMPs),in:Ninth International Conference on High Performance Computing(HiPC 2002),Lecture Notes in Computer Science2552,Bangalore,India,2002,pp.63–75.

[28]E.W.Mayr,R.Werchner,Optimal tree contraction and term matching on the hypercube and related networks,Algorithmica18(3)

(1997)445–460.

[29]T.H.Cormen,C.E.Leiserson,R.L.Rivest,C.Stein,Introduction to Algorithms,second ed.,MIT Press,2001.

[30]SkeTo project homepage.Available from:,2005.

[31]K.Matsuzaki,K.Emoto,H.Iwasaki,Z.Hu,A library of constructive skeletons for sequential style of parallel programming,in:First

International Conference on Scalable Information Systems(INFOSCALE2006),Hong Kong,May29–June1,2006.

[32]G.Kazai,https://www.doczj.com/doc/8519011495.html,lmas,N.Fuhr,N.Go¨vert,A report on the?rst year of the INitiative for the Evaluation of XML retrieval(INEX’02),

Journal of the American Society for Information Science and Technology55(6)(2002).

[33]J.Ahn,T.Han,An analytical method for parallelization of recursive functions,Parallel Processing Letters10(1)(2000)87–98.

[34]R.Cole,U.Vishkin,The accelerated centroid decomposition technique for optimal parallel tree evaluation in logarithmic time,

Algorithmica3(1988)329–346.

[35]K.Diks,T.Hagerup,More general parallel tree contraction:register allocation and broadcasting in a tree,Theoretical Computer

Science203(1)(1998)3–29.

[36]G.E.Blelloch,J.C.Hardwick,J.Sipelstein,M.Zagha,S.Chatterjee,Implementation of a portable nested data-parallel language,

Journal of Parallel and Distributed Computing21(1)(1994)4–14.

[37]D.Palmer,J.Prins,S.Chatterjee,R.Faith,Piecewise execution of nested data-parallel programs,in:Languages and Compilers for

Parallel Computing:Eighth International Workshop,Columbus,OH,USA,August10–12,1995Proceedings,Lecture Notes in Computer Science1033,Springer-Verlag,1996,pp.346–361.

男士好用的祛痘洗面奶推荐,不买会后悔哦

随着面子工程的形象化后,很多男士朋友也热衷喜欢选择洗面奶来打造自己的个人形象。但是有的朋友就喜欢混淆洗面奶的功效,总是觉得只要是洗面奶就能护肤了。甚至有部分男性朋友还是要香皂及其它产品洁面。这些可是错误的洗脸护肤方式哦,那有哪些好用的男士祛痘洗面奶呢? 首先我们来了解下男士为什么要使用洗面奶 每天空气中灰尘和脏东西很多,另外其阳光中的紫外线中也会携带大量的污染源,若是不及时清理面部卫生的话,会导致面部油光满面,灰尘再混合了油脂堆积在脸上,洗脸不到位的话会造成毛孔堵塞,严重的话痘痘和黑头也就出来了。所以大部分肌肤不好的人群其实在日常生活中还是脸部卫生没有清理好。

一般选择洗面奶的时候一定要排除碱性强的洗面奶,这款洗面奶会打破肌肤的平衡,出现肌肤清洗后干燥和水油不平衡的情况。另外就是含有皂基的洗面奶一般不适合痘性肌肤和敏感性肌肤使用。所以若是要改善肌肤问题,使用温和型的洗面奶的话,可以考虑使用爱赛亚洗面奶。为何说这款洗面奶适合肌肤清洁呢? 首先,这是一款不含刺激性物质的洗面奶,温和不刺激皮肤,就算小孩子使用后对皮肤也是没有危害的。另外这款洗面奶中含有清洁肌肤的产品,除了有清洁肌肤的效果外,还可以起到养护肌肤的功效。 其次,洗面奶的控油效果和保湿效果显著。和普通的洗面奶相比,这款洗面奶除了可以清洁痘印和毛孔,对平衡水油和补水也有显著的效果。产品中的植物萃取成分除了调节肌肤缺失的水分外,还能起到平衡油脂的效果。 如何正确的使用爱赛亚洗面奶呢?

通常来说男士每天用洗面奶洗脸两次为佳,早上一次,睡前一次。睡前用洗面奶洗脸可以清除污垢和多余的油脂,后续再用爽肤水和乳霜才能更好吸收。而当你睡觉时,皮肤也会分泌油脂,因此早晨也建议再用洗面奶洗脸一次。 在清洁面部的时候,将脸用干净水打湿后,取适量爱赛亚洗面奶涂抹在面部,绵密的泡沫清洗后肌肤不仅不干燥,就算是刮胡子的时候也能轻松的将胡须刮下,一点都不伤害肌肤。 另外,爱赛亚洗面奶中含有丰富的氨基酸成分,使用后可以保湿肌肤,调理肌肤毛孔粗大及水印等问题,对男士朋友而言,这款洗面奶的性价比还是非常不错的。

男士好用洗面奶排行榜

面部清洁是为了更好的促进护肤品的吸收,所以洗面奶选对了,护肤就对了一半。可是,洗面奶产品琳琅满目,不要平常不太注重的男生了,就算是妹子们都不一定能选对合适自己的产品,很多人认为护肤品要买贵的,但是好的并不是贵的,甚至也不适合我们日常使用。而实际上,受欢迎的洗面奶也并不是最贵的洗面奶。今天就从全球受欢迎的5款男士洗面奶开始向大家做一个详细的推荐吧。 推荐1:爱赛亚LOVELSAIAH洗面奶 上榜理由:被消费者誉为良心皂基+氨基酸洗面奶,成分氨基酸杠杠的,无酒精,以独特配方添加滋养肌肤的甘油,令这款平衡油脂的洗面奶产品达到了前所未有的温和。泡沫丰富细腻,另外还有丰富的海藻和番石榴,保湿也相当好,洗后一点都不紧绷,痘痘肌肤,敏感肌肤都可用,男女都可用的控油洗面奶,非常亲民考虑的氨基酸洁面品牌,值得推荐。 适合肤质:混油、油皮、中性肌肤 用户评价:确实很温和,我痘痘之前用的一些洗面奶都特别不适合,用爱赛亚LOVELSAIAH 洗面奶一点都不刺激,推荐! 推荐2:拉薇天然基础二合一洗面奶 上榜理由:lavera是全世界第一个百分之百的有机化妆品厂商,这款二合一的洗面奶把洁面和卸妆功效结合,可以很好的清除日常的底妆和防晒,是同类型产品中销量很高的一款,同时成分天然不会给皮肤造成额外负担。 适合肤质:任何肤质 用户评价:平时涂防晒又不喜欢用卸妆产品,买了具有卸妆效果的洗面奶,洗完挺干净的也不紧绷。 推荐3:旁氏POND'S米粹润泽氨基酸洗面奶 上榜理由:旁氏洗面奶是最平价好用的洗面奶,旁氏这款洗面奶含有护肤精油,洗完脸之后软嫩不紧绷,很温和,泡沫比较丰富,能有效细致毛孔,清洁能力比较不错。是一款十分适合女士使用的洗面奶。 适合肤质:混油、中性 用户评价:单是一个洗面奶的包装就非常精致,皮肤比较干用起来不刺激润润的,洗的很干净而且不会紧绷。

软件测试工具大全

软件测试工具汇总 一、工具汇总 1.免费工具 下表中针对WEB页面或B/S结构进行功能和性能测试的工具有: 开源功能自动化测试工具:PureTest,OpenSTA,Watir、Selenium、MaxQ、WebInject、Fitnesse 开源性能自动化测试工具:Jmeter、OpenSTA、DBMonster PureTest Minq公司功能测试商业 免费 本是业内商业自动化测试工具之一,如今PureTest已经免费。它专注于对WEB应用程序进行功能自动化测试,并即时对WEB页面元素进行检 测,对HTTP请求、响应进行诊断分析。 PureTest is an application which is primarily used to setup scenarios of tasks, execute and debug them. Even though it supports testing a variety of applications it is especially useful for debugging and snooping of web applications. PureTest includes a HTTP Recorder and Web Crawler which makes it useful for generic verification of HTTP requests and web content checking. The normal way to access web sites is via a browser; however, there are times when it is desirable to bypass the browser and access a site from a program, including: Debugging of HTTP requests and responses Automated web site testing The HTTP Recorder simplifies the process of capturing all requests that are exchanged between a browser and the web server. Then use PureTest to replay each request in order to carefully watch the HTTP data that is transferred on the wire (HTTP headers, request parameters, response headers and response content). The Web Crawler is useful to pro-actively verify the consistence of a static web structure. It reports various metrics, broken links and the structure of the crawled web. Test scenarios that be saved to file and later be repeated, to verify that you server applictaion works as expected. This can be done using the PureTest debugger in the grapical user interface, but also using a command line interface. PureLoad Minq公司负载压力测 试 商业 免费 PureLoad正是一款基于Java开发的网络负压测试工具,它的Script代码 完全使用XML,所以,这些代码的编写很简单,可以测试各种C/S程序, 如SMTP Server等。它的测试报表包含文字和图形并可以输出为HTML 文件。由于是基于Java的软件,所以,可以通过Java Beans API来增强 软件功能。

安安洗面奶好用吗 公认经典洗面奶挑选方法大全

安安洗面奶好用吗公认经典洗面奶挑选方法大全安安洗面奶好用吗?非常大众化的安安洗面奶可以说是很多女性的挚爱,到底安安洗面奶好用吗?其实这个问题你不必纠结,让小编来教大家几招,你就会知道安安洗面奶好不好用啦! 安安洗面奶好用吗1、性价比高的最适合 其实洗面奶最大的功效就是清洁,所以我们不需要为此付出太多的钱。小编认为只需要买一些性价比高的产品就可以了,贵的产品不一定就是最好,选择性价比高的产品效果更好。【安安洗面奶好用吗】关于超高性价比洗面奶,小编为大家推荐:DreamtimesM2梦幻洁面乳 鼎鼎大名的Dreamtimes M2梦幻洁面,作为最经典的洗面奶,不仅仅是因为其超强的清洁力,长达12H以上的持久控油力,最主要的原因还是它所带来的无敌滋润,嫩滑的肤感,每次洗脸以后,那一丝柔滑无比,又带着一丝丝紧致感的无形水膜,让我们永远陶醉其中。 安安洗面奶好用吗2、油性皮肤如何挑选 油性皮肤因为皮肤分泌油脂比一般人多,所以需要选择一些清洁能力比较强的产品。通常需要选择一些皂剂产品。因为皂剂产品去脂力强,又容易冲洗,洗后肤感非常清爽。【安安洗面奶好用吗】 安安洗面奶好用吗3、混合型皮肤如何挑选 这类皮肤主要t字位比较油,而脸颊部位一般是中性,有点可能是干性。所以这种皮肤要在t字位和脸颊部位取个平衡,不能只考虑t字位清洁干净而选一些去脂力非常强的产品,尤其是在秋冬季节。【安安洗面奶好用吗】 安安洗面奶好用吗4、中性皮肤如何挑选

这类皮肤是最容易护理的。一般选一些泡沫型洗面奶就可以了。当然如果在秋冬时候,感觉皮肤比较干的时候也可以改用一些无泡洗面奶。【安安洗面奶好用吗】 安安洗面奶好用吗5、干性皮肤如何挑选 这类皮肤最好不使用泡沫型洗面奶。可以用一些清洁油,清洁霜或者是无泡型洗面奶。目前清洁油类产品在一些中高档产品中有,因为相对清洁霜而言,这类产品肤感比较清爽。【安安洗面奶好用吗】 安安洗面奶好用吗6、痘痘肌肤如何挑选 很多长痘的妹子在长痘后就用强效去油的产品,这样是不正确的,很容易加重痘痘。痘痘肌应该选择痘痘专用的清洁产品,因为这些产品再清洁的同时又不会刺激到痘痘。乱用产品只会引发更多痘痘,所以一定要注意。【安安洗面奶好用吗】 安安洗面奶好用吗7、洗面奶功效 因为洗面奶产品在脸上停留时间很短,一般就几分钟而已,而且最后还会冲洗干净,所以事实上一些有效成分很难在脸上残留下来。所以说要靠洗面奶达到所谓的美白之类功效是很难的。【安安洗面奶好用吗】 安安洗面奶好用吗8、别指望洗面奶也能美白 因为洗面奶在面部的停留时间并不长,因此,虽然可以添加保湿、营养、美白等成分,但无法长久停留皮肤,很难完全发挥其诉求的功能。譬如强烈的保湿诉求,就需要在后续步骤中配合使用保湿类面霜或精华更好的发挥保湿功效。【安安洗面奶好用吗】安安洗面奶好用吗9、慎用美白、去角质洗面奶 美白、去角质这些功效的洗面奶,产品中大都添加了一定浓度的果酸或BHA,软化角质,帮助老废角质剥脱。具有一定的刺激性,敏感性皮肤需要慎重使用。相比,保湿洗面奶中添加了更多的保湿成分,如丁二醇、玻尿酸等,还可以加入一定量脂质成分,维持皮肤表

控油效果好的男士洗面奶介绍

男士的肌肤比女性的皮肤特殊,而很多男性朋友在生活中常出现肌肤长痘、长细纹、皮肤暗黄、爆油及爆痘的情况,针对这些肌肤问题,还是因为控油和清洁工作没有做到位。对男士朋友来说,肌肤想要水润有光泽,较好的方式就是控油和清洁要做到位。 在日常生活中我们都知道很多男士洗面奶里面有80%的氨基酸和20%的天然皂。但是皂基成分多的话男士朋友的肤质还是会出现毛孔粗大等问题,为了摆脱毛孔粗大及爆油的问题,可以使用清洁力度大的氨基酸洗面奶即洗面奶来清理肌肤。因为氨基酸洗面奶成分中的肉豆蔻酸、棕榈酸具有清洁力强、去脂作用,这属于皂基,但是皂基真的不能用吗?由于皂基打出的泡泡丰富而绵密,洗感清爽又易冲洗,良好的配方可以很大程度的降低皂基的刺激性,又保持着优秀的清洁力,对于健康油性肌肤(男性肌肤基本属于这类)是可以安全使用的。 另外洗面奶适合敏感性肌肤、中性肌肤、油性肌肤等不同肤质的人群使用。在使用的过程中,洗面奶的去油污能力超强,除了可以调节水油平衡外,还能起到润和和肌肤保湿的效

果。那么,这款洗面奶如何使用呢? 先用清水将脸打湿,然后在手掌上挤出黄豆大小于手心,加一点水揉搓起泡,将泡沫均匀涂抹在脸上,轻轻打圈按摩一分钟,再用清水洗干净即可。洗面奶的味道非常好闻,使用的过程中很好推开弄点水就能揉搓出细腻泡沫,洁面时,温和一点都不刺激,洗完后皮肤光滑水嫩。 另外,洗面奶的价格非常便宜,加上他的性价比高,所以对于大部分男士朋友来说,选择这款氨基酸洗面奶除了可以调理肌肤肤质,还能起到控油及预防皮肤长痘的情况。素日里肌肤爆痘、出油等都是水油不平衡导致的,只有使用温和、保湿和补水的洗面奶才能让本质的肌肤问题迎刃而解了。 若是你是大油脸及肌肤爱爆痘的话,建议大家这款洗面奶一定要用哦。爱赛亚LOVELSAIAH洗面奶是一款专业为男人而设计的洗面奶。内含皂基、氨基酸等成分。皂基打出丰富而绵密的泡泡,洗感清爽又易冲洗,良好的配方可以很大程度的降低皂基的刺激性,又保持着优秀的清洁力,对于健康油性肌肤(男性肌肤基本属于这类)是可以安全使用的。更多问题欢迎咨询购买。

常用办公软件测试题汇编

常用办公软件测试题 一、综合部分 1.对于Office XP应用程序中的“保存”和“另存为”命令,正确的是___。 A.文档首次存盘时,只能使用“保存”命令 B.文档首次存档时,只能使用“另存为”命令 C.首次存盘时,无论使用“保存”或“另存为”命令,都出现“另存为”对话框 D.再次存盘时,无论使用“保存”或“另存为”命令,会出现“另存为”对话框 2.对于Office XP应用程序中的“常用”工具栏上的“新建”命令按钮和“文件”菜单下的“新建”命令项,不正确的是___。 A.都可以建立新文档 B.作用完全相同 C.“新建”命令按钮操作没有“模板”对话框,使用空白模板 D.“文件”后“新建”命令可打开“模板”对话框,可以选择不同的模板 3.不能在“另存为”对话框中修改文档的___。 A.位置B。名称 C.内容D。类型 4.Office XP应用程序中的“文件”菜单底端列出的几个文件名表示___。 A.用于切换的文件B。已打开的文件 C.正在打印的文件D。最近被该Office XP应用程序处理过的文件 5.在文本编辑状态,执行“编辑”到“复制”命令后,___。

A.被选定的内容复制到插入点 B.被选定的内容复制到剪贴板 C.被选定内容的格式复制到剪贴板 D.剪贴板的内容复制到插入点 6.当“编辑”菜单中的“剪切”和“复制”命令呈浅灰色而不能被选择时,表示___。A.选定的内容太长,剪贴板放不了 B.剪贴板里已经有信息了 C.在文档中没有选定任何信息 D.选定的内容三图形对象 7.Office XP应用程序中的工具栏可以___。 A.放在程序窗口的上边或下边 B.放在程序窗口的左边或右边 C.作为一个窗口放在文本编辑区 D.以上都可以 8.可以从___中选择Office XP应用程序中的命令。 A.菜单B。工具栏 C.快捷菜单D。以上都可以 9.Office XP应用程序中使用鼠标进行复制操作应___。 A.直接拖动B。按住键拖动 10.使用“剪贴板”进行移动操作应选择___命令。 A.“剪切” B。“复制”

软件测试工具

摘要 随着信息科技的发展。数字科技的进步。人们对所使用的软件要求越来越严格,许多大型的软件公司对自己严发出来的软件要求也越来越严格,为了解决其中的BUG,软件测试行业开始在国内崛起。新兴的科技技术,带领着软件业开始飞速发展,产品趋于完美化,智能化,易用程度也大大的提高。 但是软件测试行业的形成是因为什么呢?许多人只知道软件测试,但是不知道其根本,它的源头是什么,它是怎么发展衍变的? 本文在探讨软件测试技术的基础上,详细介绍了软件测试的发展,它的衍变过程。同时为大家介绍了多种系列的软件测试工具及它们各自的特点。为软件测试人员理清了测试思路,详细的划分了软件测试的种类。在阅读众多参考文献的情况下对于软件的安全的问题也进行了详细的阐述。最后详细介绍了一款基于主机的入侵检测的工具—PortSentry的安装,配置及使用方法。 关键词软件测试;发展;种类;工具

Abstract Along with information science and technology development.Digital science and technology progress.The people for the software request which uses are more and more strict, many large-scale software companies the software request which sends strictly to oneself more and more are also strict, in order to solve BUG, the software test profession starts in to rise domestically.The emerging technical technology, leads the software industry to start to develop rapidly, the product tends to the beautification, the intellectualization, easy to use the degree also big enhancement. But is the software test profession formation because of what? Many people only know the software test, but did not know its basic, what is its source, how is it develops evolves? This article in the discussion software test technology foundation, introduced in detail the software tests the development, it evolves the process.Meanwhile introduced many kinds of series software testing tool and they respective characteristic for everybody.Tested the personnel for the software to clear off the test mentality, the detailed division software has tested type.Has also carried on the detailed elaboration in the reading multitudinous reference situation regarding the software security question.Finally introduced one section in detail based on the main engine invasion examination tool - PortSentry installment, the disposition and the application method. Keywords software test,development,kind,tool

软件测试用例实例非常详细汇总

1、兼容性测试 在大多数生产环境中,客户机工作站、网络连接和数据库服务器的具体硬件规格会有所不同。客户机工作站可能会安装不同的软件例如,应用程序、驱动程序等而且在任何时候,都可能运行许多不同的软件组合,从而占用不同的资源。测试目的 配置说明操作系统系统软件外设应用软件结果 服务器Window2000(S) WindowXp Window2000(P) Window2003 用例编号TestCase_LinkWorks_WorkEvaluate 项目名称LinkWorks 模块名称WorkEvaluate模块 项目承担部门研发中心-质量管理部 用例作者 完成日期2005-5-27 本文档使用部门质量管理部 评审负责人 审核日期 批准日期 注:本文档由测试组提交,审核由测试组负责人签字,由项目负责人批准。历史版本: 版本/状态作者参与者起止日期备注

1.1. 疲劳强度测试用例 强度测试也是性能测试是的一种,实施和执行此类测试的目的是找出因资源不足或资源争用而导致的错误。如果内存或磁盘空间不足,测试对象就可能会表现出一些在正常条件下并不明显的缺陷。而其他缺陷则可能由于争用共享资源(如数据库锁或网络带宽)而造成的。强度测试还可用于确定测试对象能够处理的最大工作量。 测试目的 测试说明 前提条件连续运行8小时,设置添加10用户并发 功能1 2小时 4小时 6小时 8小时 功能1 2小时 4小时 6小时 8小时 一、功能测试用例 此功能测试用例对测试对象的功能测试应侧重于所有可直接追踪到用例或业务功能和业务规则的测试需求。这种测试的目标是核实数据的接受、处理和检索是否正确,以及业务规则的实施是否恰当。主要测试技术方法为用户通过GUI(图形用户界面)与应用程序交互,对交互的输出或接受进行分析,以此来核实需求功能与实现功能是否一致。

软件测试常用术语表

第119贴【2004-10-12】:常见测试术语一 Acceptance Testing--可接受性测试 一般由用户/客户进行的确认是否可以接受一个产品的验证性测试。 actual outcome--实际结果 被测对象在特定的条件下实际产生的结果。 Ad Hoc Testing--随机测试 测试人员通过随机的尝试系统的功能,试图使系统中断。algorithm--算法 (1)一个定义好的有限规则集,用于在有限步骤内解决一个问题;(2)执行一个特定任务的任何操作序列。 algorithm analysis--算法分析 一个软件的验证确认任务,用于保证选择的算法是正确的、合适的和稳定的,并且满足所有精确性、规模和时间 方面的要求。 Alpha Testing--Alpha测试 由选定的用户进行的产品早期性测试。这个测试一般在可控制的环境下进行的。 analysis--分析 (1)分解到一些原子部分或基本原则,以便确定整体的特性;(2)一个推理的过程,显示一个特定的结果是假 设前提的结果;(3)一个问题的方法研究,并且问题被分解为一些小的相关单元作进一步详细研究。 anomaly--异常 在文档或软件操作中观察到的任何与期望违背的结果。

application software--应用软件 满足特定需要的软件。 architecture--构架 一个系统或组件的组织结构。 ASQ--自动化软件质量(Automated Software Quality) 使用软件工具来提高软件的质量。 assertion--断言 指定一个程序必须已经存在的状态的一个逻辑表达式,或者一组程序变量在程序执行期间的某个点上必须满足的 条件。 assertion checking--断言检查 用户在程序中嵌入的断言的检查。 audit--审计 一个或一组工作产品的独立检查以评价与规格、标准、契约或其它准则的符合程度。 audit trail--审计跟踪 系统审计活动的一个时间记录。 Automated Testing--自动化测试 使用自动化测试工具来进行测试,这类测试一般不需要人干预,通常在GUI、性能等测试中用得较多。 第120贴【2004-10-13】:常见测试术语二 Backus-Naur Form--BNF范式 一种分析语言,用于形式化描述语言的语法 baseline--基线

常用工具软件测试题及答案

一、判断题 1. Realone Player不支持多节目连续播放。(N) 2. 网际快车可以上传和下载文件。(N) 3. 天网防火墙的拦截功能是指数据包无法进入或出去。(Y) 4. SnagIt可以捕获DOS屏幕,RM电影和游戏等画面。(Y) 5. Adobe Acrobat Reader可以解压缩文件。(N) 6. 金山词霸2002支持Windows XP,但不支持office XP系统。(N) 7. 在用Ner-Burning Room刻录CD音乐时,若误将数据文件从本地资源管理器中拖入刻录机虚拟资源管理器中时,该文件将被添加到音乐CD中。(N) 8. Symantec Ghost 可以实现数据修复。(N) 9. Easy Recovery 可以恢复任何被从硬盘上删除的文件。(N) 10. Ctrem软件具有防发呆功能。(Y) 二.选择题(每小题2分,共40分) 1、下列不属于金山词霸所具有的功能的是:(C ) A、屏幕取词 B、词典查词 C、全文翻译 D、用户词典 2、东方快车提供了(C )种语言翻译。 A、1种 B、2种 C、3种 D、4种 3、:Vintual CD 中的Creat按钮的功能为(B ) A、编辑映像文件 B、创建光盘的映像文件 C、映像文件的显示方式 D、将映像文件插入虚拟光驱 4、下列哪一个软件属于光盘刻录软件(A ) A、Nero-Buring Room B:Virtual CD C: DAEMON Tools D:Iparmor 5、下列不属于媒体播放工具的是(D ) A、Winamp B、超级解霸 C、Realone Player D:WinRAR 6、下列媒体播放器可以自由截取单个画面或整段电影的是非曲直(B ) A、Winamp B、超级解霸 C、Realone Player D、音频解霸 7、下列哪一个不是网际快车为已下载的文件设置的缺省创建类别( D) A、软件 B、游戏和mp3 C、驱动程序 D、电影 8、CuteFTP具有网际快车不具备的功能是( A) A、上传文件 B、下载文件 C、断点续传 D、支持多线程下载 9、如果在天网防火墙的ICMP规则中输入( B)则表示任何类型代码都符合本规则。 A、254 B、255 C、256 D、253 10、Norton Antivirus的安全扫描功能包括(D ) ①自动防护②电子邮件扫描③禁止脚本④全面系统扫描 A、①②③ B、①②④ C、①③④ D、①②③④ 11、ACDSee不能对图片进行下列哪种操作(C ) A、浏览和编辑图像 B、图片格式转换 C、抓取图片 D、设置墙纸和幻灯片放映 12、SnagIt捕获的图片可被存为下列哪些格式(D ) ①BMP ②PCX ③TGA ④RSB A、①②③ B、①②④ C、①②③④ D、①② 13、WinRAR不可以解压下列哪些格式的文件( D)

去黑头洗面奶 真正好用的去黑头洗面奶推荐

---------------------------------------------------------------------------------------------------------------------- 去黑头洗面奶真正好用的去黑头洗面奶推荐---------------------------------------------------------------------------------------------------------------------- 去黑头洗面奶是否真的能够洗掉黑头,为了让大家都能购买到自己满意的去黑头洗面奶,我们今天特地为大家带来最新的去黑头洗面奶排行榜,想要购买去黑头洗面奶的朋友千万不要错过了: 去黑头洗面奶1. DreamtimesM2梦幻洁面 或许M2梦幻洁面不是最有效的去黑头产品,但是绝对是最有效的去黑头洗面奶,几乎所有去黑头产品景点搭配组合中,必然出现的就是M2梦幻洁面,除了具有强效的深层清洁能力,有效抑制黑头生长环境,而且还丝毫不干,不紧绷,十分清爽,小P老师也曾在节目中多次称赞其为“去黑头最佳搭档”。(去黑头洗面奶) 去黑头洗面奶2. 薇姿油脂调护洁面啫喱 法国鼎鼎大名的薇姿家的这款油脂调护洁面啫喱,是草莓鼻MM的大爱,这款啫喱质地的洁面产品适合油性肌肤使用,能洗去脸部多余的油脂,解决痘痘、毛孔等肌肤问题,长期使用,还能增强皮肤天然的防御功能,是预防黑头的绝佳洁面产品。(去黑头洗面奶) 去黑头洗面奶3. 高夫火山泥控油保湿洁面乳 男士护肤品的最为知名的品牌,推出的这款火山泥控油保湿洁面乳是专门为油性肌肤及草莓鼻的人们研制的洁面圣品,其独特的天然火山泥配方,可快速吸收多余油脂,有效缓解粉刺及黑头再生,全面清除毛孔内有害物质,同时芦荟精华又能补水保湿,是效果看得见的去黑头洁面精品。(去黑头洗面奶) 去黑头洗面奶4. 男性主义去黑头洁面膏

瑞丽最好用的化妆品排行榜

瑞丽最好用的化妆品排行榜(09—10)来源:乔小宇的日志 最满意洗面奶: 1.露得清深层净化洗面乳 2.Cetaphil 洗面奶 3.佰草集平衡洁面乳 最满意洁面皂: 1.DHC 纯榄滋养皂 2.Clinique 温和洁面皂 3.清肌精洁面皂 最满意去角质产品: 1.ZA 去角质霜 2.clarins 深层清洁去角质霜 3.ST.IVES 圣艾芙杏子磨砂膏 最满意化妆水: 1.雪肌精 2.契尔氏小黄瓜水 3.Clinique 2#水 最满意乳液: 1.Clinique 黄油 2.sisley 全能乳液 3.雪肌精乳液 最满意面霜: 1.Clinique 水磁场 2.Vichy 深度锁水保湿霜 3.Clinique 宛若新生活肤霜 最满意防晒产品: 1.cilinique city block 倩碧城市隔离 2.SOFINA very very UV cut milk 3.佰草集防晒喷乳 最满意精华素: 1.雅诗兰黛ANR系列 2.兰芝水库精华 3.BIOTHERM 水元素精华

最满意眼霜: 1.kiehl's 牛油果眼霜 2.雅诗兰黛ANR晚间特润修护眼霜 3.the body shop VE润泽眼霜 最满意清洁/去痘面膜: 1.贝佳斯绿泥/白泥/粉泥系列 2.ORIGINS Clear Improvement 泥娃娃清洁面膜 3.the body shop 蜂蜜燕麦3 in 1调理面膜 最满意美白/去斑面膜: 1.佰草集新七白美白嫩肤面膜 2.露得清细白修护面膜 3.JUJU 酒粕面膜 最满意补水/滋养面膜: 1.ORIGINS drink up 一饮而尽 2.sisley 花香面膜 3.兰芝睡眠面膜 最满意按摩膏: 1.婵真调理霜 2.KOSE 纯肌粹按摩美容液 3.雪肌精美白按摩面膜 最满意护唇用品: 1.kiehl’s 1# 2.burt’s bees 小蜜蜂 3.曼秀雷敦薄荷系列 最满意护手霜: 1.Jurlique 玫瑰手霜 2.露得清护手霜 3.屈臣氏骨胶原护手霜 最满意身体乳液: 1.the body shop 系列 2.clarins 纤体霜 3.DOVE 牛奶乳肤乳 最满意喷雾: 1.Jurlique 玫瑰喷雾 2.雅漾活泉水喷雾

常用通讯测试工具使用

常用通讯测试工具 鉴于很多MCGS用户和技术人员对通讯测试工具并不很熟悉,本文档将针对实际的测试情况,对串口、以太网通讯调试过程中所涉及到的常用的测试软件进行相关的讲解。 1. 串口测试工具: 串口调试工具:用来模拟上下位机收发数据的串口工具,占用串口资源。如:串口调试助手,串口精灵,Comm等。 串口监听工具:用来监听上下位机串口相关操作,并截获收发数据的串口工具。不占用串口资源。如:PortMon,ComSky等。 串口模拟工具:用来模拟物理串口的操作,其模拟生成的串口为成对出现,并可被大多数串口调试和监听软件正常识别,是串口测试的绝好工具。如:Visual Serial Port等。 下面将分别介绍串口调试助手、Comm、PortMon和Visual Serial Port的使用。

1.1. 串口调试助手: 为最常用的串口收发测试工具,其各区域说明及操作过程如下: 串口状态 打开/关闭串口 十六进制/ASCII 切换 串口数据 接收区 串口参数 设置区 串口数据 发送区 串口收发计数区 发送数据功能区 保存数据功能区 操作流程如下: ? 设置串口参数(之前先关闭串口)。 ? 设置接收字符类型(十六进制/ASCII 码) ? 设置保存数据的目录路径。 ? 打开串口。 ? 输入发送数据(类型应与接收相同)。 ? 手动或自动发送数据。 ? 点击“保存显示数据”保存接收数据区数据到文件RecXX.txt。 ? 关闭串口。 注:如果没有相应串口或串口被占用时,软件会弹出“没有发现此串口”的提示。

1.2. PortMon 串口监听工具: 用来监听上下位机串口相关操作,并截获收发数据的串口工具。不占用串口资源, 但在进行监听前,要保证相应串口不被占用,否则无法正常监听数据。 连接状态 菜单栏 工具栏 截获数据显示区 PortMon 设置及使用: 1). 确保要监听的串口未被占用。 如果串口被占用,请关闭相应串口的应用程序。比如:要监视MCGS 软件与串口1设备通讯,应该先关闭MCGS 软件。 说明:PortMon 虽不占用串口资源,但在使用前必须确保要监听的串口未被占用,否则无法进行监视。 2). 运行PortMon,并进行相应设置。 ? 连接设置: 在菜单栏选择“计算机(M)”->“连接本地(L)”。如果连接成功,则连接状态显示为“PortMon 于\\计算机名(本地)”。如下图:

男士洗面奶推荐 口碑最好男士洗面奶推荐

男士洗面奶推荐口碑最好男士洗面奶推荐很多人咨询小编男士洗面奶推荐,其实男士洗面奶一直以来都有很多,男士在挑选的时候也会选入纠结,这期,小编就来为大家带来男士洗面奶推荐,一起来看看,总有一款适合你! 男士洗面奶推荐NO 1、Dreamtimes K1男士梦幻洁面乳 说到专业男士美白控油洗面奶首当其冲的必然是Dreamtimes的经典K1男士梦幻洁面,其超强的清洁能力都是有目共睹的就不在复述了,其强效的美白因子能够迅速提亮肤色,最令人惊叹的是在此次评测中其控油时间长达16H,比上次我们评测的有控油之王美称的DreamtimesM1梦幻洁面还要高出2H,并且洁面后丝毫不干,不紧绷,也难怪牛尔老师会对它赞不绝口,在书籍中将其摆在亚洲年轻男性首选洁面的位置上。【男士洗面奶推荐】男士洗面奶推荐NO 2、兰芝男士清爽洁面泡沫 大名鼎鼎的韩国兰芝一点也不逊色于法国兰蔻,这款男士清爽洁面泡沫更是亚洲知名男士的必备产品,其内含的巨藻萃取物在滋润保护肌肤的同时,丰盈的泡沫还可以防止因剃须而带来的肌肤损伤,是光滑健康肌肤的最理想的缔造者。【男士洗面奶推荐】男士洗面奶推荐NO 3、欧莱雅男士劲能冰爽洁面啫喱 大牌的产品,亲民的价格,让巴黎欧莱雅这款男士劲能冰爽洁面啫喱,成为万千男士的必选产品,其内含皂剂-中性PH值配方,能深层净化,唤醒皮肤,净爽不干燥,简简单单解决男士的洁面问题,缔造的是有品质的男人。【男士洗面奶推荐】 男士洗面奶推荐NO 4、碧欧泉男士清爽洁面啫喱 曾多次登上米娜、瑞丽等各大网站榜首的这款碧欧泉男士清爽洁面啫喱,一搓即变绵密泡沫,可有效清洁及去除皮肤的杂质,为皮肤注入能量,及时赶走倦容,难怪最近网上热卖火爆呢。【男士洗面奶推荐】 男士洗面奶推荐NO 5、美体小铺秘鲁人参根洗面膏 用人参根来洁面的也就只有the body shop这么别出心裁的了,美体小铺秘鲁人参根洗面膏一经问世就引起万众瞩目,它特含玛卡根精粹、丰富脂肪酸、芝麻油及巴西核果油精华,具活化、柔润保湿功效。另外维他命A、B及E具抗氧化功效,能增强肌肤防御力,使用后肌肤倍感柔软光滑。真是一款不可多得的殿堂级产品。【男士洗面奶推荐】男士洗面奶推荐NO 6、菲诗小铺草本舒缓男士洗面奶 敏感肌肤的GG,相比对韩国菲诗小铺家的这款草本舒缓男士洁面奶早就耳熟能详了,

好用的男士洗面奶排行榜

男士在护肤路上有多么辛酸?市面上的护肤品多为女人而诞生,一旦男士想要‘染指’,油脂就开始在脸上大爆发了。毕竟荷尔蒙旺盛的男士怎么可能用滋养型的护肤品?但其实,男士的护肤品不需要太多,只要洗面奶选对了,其它都可以放弃。 面部清洁是为了更好的护肤,所以洗面奶的选择十分重要。洗面奶排行榜上适合男人的都有哪些产品呢?今天从成分、口碑入手,选择真正适合男人的专业洗面奶。 榜一:爱赛亚LOVELSAIAH洗面奶 男士肌肤皮脂分泌旺盛,如果清洁不及时,过多的皮脂就会堆积在肌肤表层,造成毛孔堵塞,继而引发毛孔粗大、黑头、痘痘等肌肤问题,这也是为什么男人的肌肤比女人粗糙的原因。

爱赛亚LOVELSAIAH洗面奶是一款专业为男人而设计的洗面奶。内含皂基、氨基酸等成分。皂基打出丰富而绵密的泡泡,洗感清爽又易冲洗,良好的配方可以很大程度的降低皂基的刺激性,又保持着优秀的清洁力,对于健康油性肌肤(男性肌肤基本属于这类)是可以安全使用的。 看看其他成分,里面的甘油能很好改善皂基带来的皮肤拔干现象,而椰油酰胺、月桂酰基氨酸钠、月桂酰谷氨酸钠、甘氨酸、丝氨酸等丰富的氨基酸成分则可以降低刺激性,同时又搭配番石榴、金缕梅、奥氏海藻提取物等草本植物,多效改善肌肤暗沉、缺水等问题,可以说这款洗面奶是‘成分之王’了。 榜二:芙丽芳丝净润洗面奶 它是氨基酸洁面产品中销量和口碑都非常好的一款,添加了柠檬酸作为酸碱调节剂,弱酸的属性更贴合人体肌肤PH值,还有甘油、忍冬花和枣果等提取精华,成分温和而且清洁力足够。适合混合性肌肤和敏感肌肤。 榜三:资生堂洗颜柔澈泡沫洁面乳 资生堂的洗颜专科系列中的产品,泡沫丰富温和具有很好的清洁效果,成分中添加了丝胶蛋白成分、美容液成分和保水氨基酸诱导体,清洁的同时锁住肌肤水分保持水润柔滑。它的清洁能力可能较弱一些,因此它适合任何肤质,所以油皮男士可短期使用,如冬季、春季可以使用它清洁肌肤。 虽然男人护肤比女人难,那是因为你没有用对洗面奶,才导致在护肤路上一错再错,用对了洗面奶才能快速开启清爽护肤路。更多资讯请点击“爱赛亚”。

碧欧泉男士洗面奶好用吗 全球公认经典男士洗面奶推荐

碧欧泉男士洗面奶好用吗全球公认经典男士洗面奶推荐说到碧欧泉男士洗面,相信各位男士都不会陌生。碧欧泉男士洗面一直以来都受到广大消费者的青睐,到底碧欧泉男士洗面好不好呢?其实每个人的肤质不同,使用碧欧泉男士洗面的效果也会不一样。市面上除了碧欧泉男士洗面之外,还有很多超经典的男士洗面奶值得一试。下面,就一起来看看吧! 碧欧泉男士洗面奶好用吗BEST 1、DreamtimesK1男士梦幻洁面乳 说到专业男士美白控油洗面奶首当其冲的必然是Dreamtimes的经典K1男士梦幻洁面,其超强的清洁能力都是有目共睹的就不在复述了,其强效的美白因子能够迅速提亮肤色,最令人惊叹的是在此次评测中其控油时间长达16H,比上次我们评测的有控油之王美称的DreamtimesM1梦幻洁面还要高出2H,并且洁面后丝毫不干,不紧绷,也难怪牛尔老师会对它赞不绝口,在书籍中将其摆在亚洲年轻男性首选洁面的位置上。(碧欧泉男士洗面奶好用吗) 碧欧泉男士洗面奶好用吗BEST 2、高夫活力紧致洁面乳 这款赫赫有名的高夫活力紧致洁面乳,拥有创新表面活性剂复配技术,不仅能有效清洁毛孔,温和洁净不紧绷,还能持续使用,令皮肤日渐恢复细密紧致,是男士们好评率很高的一款明星产品。(碧欧泉男士洗面奶好用吗) 碧欧泉男士洗面奶好用吗BEST 3、美体小铺秘鲁人参根洗面膏 用人参根来洁面的也就只有the body shop这么别出心裁的了,美体小铺秘鲁人参根洗面膏一经问世就引起万众瞩目,它特含玛卡根精粹、丰富脂肪酸、芝麻油及巴西核果油精华,具活化、柔润保湿功效。另外维他命A、B及E具抗氧化功效,能增强肌肤防御力,使用后肌肤倍感柔软光滑。真是一款不可多得的殿堂级产品。(碧欧泉男士洗面奶好用吗)碧欧泉男士洗面奶好用吗BEST 4、玫琳凯男士洁面皂 玫琳凯家的这款男士洁面皂在市场上极具人气,其不仅能有效清洁,柔软肌肤,使肌肤回复光滑健康的光泽,还能有助减少因老化而形成的细纹,另外不含油份和香料,不会堵塞毛孔,绝对是无可比拟的男士洁面用品。(碧欧泉男士洗面奶好用吗) 碧欧泉男士洗面奶好用吗BEST 5、兰芝男士控油磨砂洗面奶 男士对兰芝的喜爱一点也不亚于女性,这款兰芝男士控油磨砂洗面奶,富含薄荷醇、硅质、易溶白色磨砂颗粒能帮助深层清洁多余的油脂、黑头和污物,给肌肤提供丰富的水分,滋润肌肤,增加肌肤自身抵抗力,深得男士的欢心,成为市场上男士护肤品的佼佼者。(碧

[示例文档1]软件测试计划书

[示例文档1]软件测试计划 书 标准化文件发布号:(9312-EUATWW-MWUB-WUNN-INNUL-DQQTY-

软件测试计划

1 概述 测试目的 说明本项目测试目的、预期达到的目标。 背景 说明本项目测试的背景。 参考资料 列出编写本计划及测试整个过程中所要参考的文件、资料。 2 测试基本内容 测试要点 测试要点应对以软件测试的以下信息进行具体描述。 测试方法:本次测试采用的测试方法(黑盒或白盒测试)。 测试类型:测试类型的说明。 测试手段:如手工测试、自动测试或手工与自动测试相结合。 采用手工与自动测试相结合的方式,说明不同手段所占比例。 采用自动测试,需详细说明选用的测试工具。 测试内容:根据软件项目的实际特点确定确认测试的测试内容。对部分软件除基本的功能测试外,可能还包括: 性能测试、安全性测试、极限测试、并发操作测试等。 测试环境 说明本次测试软件的运行与测试所需的硬件环境和软件环境。测试范围 确定本次测试范围。

测试工具 说明本次测试使用的测试工具,包括自编测试程序,并进行确认。 测试开始时间 指明本项目测试工作的开始时间。 测试结束时间 确认测试工作预计的完成时间。 3 实施计划 测试设计工作任务分解和人员安排 测试设计工作应包括对系统功能及专业知识的学习, 编写测试大纲、设计测试用例等工作。 时间安排 测试设计开始时间:测试设计工作预计开始时间。 测试设计结束时间:测试设计工作预计结束时间。 人员安排 列出预计参加本次测试设计工作的全部测试人员。 输出要求 测试设计工作的输出应包括《测试用例》、《测试记录表》、《测试报告》。 对系统功能及专业知识学习如有必要也要形成书面材料。 由测试小组负责规定组织相关的测试人员进行评审计划。

爽肤水10大最经典的使用方法

爽肤水10大最经典的使用方法 洁面后,不论多滋润的洁面乳,总是有点紧绷。习惯要即使为肌肤补上爽肤水,心理上才感到肌肤得到保护。其实爽肤水除了作洁面后的缓兵之计,用途广泛的很。一支爽肤水,随时可以顶替你化妆台上十支八支护肤品,可以怎么用,一起来看看以下的介绍: 1.迅速保湿 在面上轻轻拍上爽肤水,足以立刻喂饱饥渴的皮肤。含芦荟、GLYCOLIC ACID、氨基酸、山梨糖醇等成分的爽肤水,更有效地即时保湿,令皮肤不致紧绷。 *爽肤水还是化妆水?* 关于洁面后立刻用来滋润皮肤的水状护肤品,香港 的美容品牌、美容杂志等都习惯称之为“爽肤水”;而台湾、内地则爱称之为“化妆水”、“美容液”、“美容露”,所指的其实都是同一种护肤品。>>>你会挑选适合的控油爽肤水吗? 爽肤水一般使用于洁面乳之后,不过也有个别品牌的水状护肤品有自己独特一套使用程序,记得购买前问清楚。>>>爽肤水用手拍还是用化妆棉擦

2 .为眼部及唇部保湿 眼部和唇部四周的皮肤较其他部位薄,如涂抹浓度太高的护肤品,容易出油脂粒。此时,爽肤水便可以大派用场,为皮肤提供即时保湿功效。由于质地较轻,易于渗透,不怕阻塞眼部和唇部四周肌肤的毛孔。 3.急救面膜保湿面膜 将爽肤水倒于面膜纸上,敷10至15分钟,爽肤水即时变为保湿面膜。而且由于质地轻柔,更容易让皮肤吸收,比保湿面膜效果更快捷,而且可省却以清水洗掉的程序,让爽肤水完全渗透入皮肤,够方便快捷。 *一定要涂爽肤水吗?* 根据皮肤科医生指出,假如用爽肤水的目的是收缩洁面时扩张的毛孔,那么爽肤水这步骤其实可以免除,以冷水代替,毛孔也可缩小。 但如今爽肤水功能多多,保湿、美白、紧肤、控油甚至防皱,已不限于收缩毛孔。水状的质地,能让皮肤迅速吸收,表皮得到即时保湿,是不是一定要涂,便要看自己的需要。 *用双手拍上还是用化妆棉涂上?* 双手:洗净双手轻轻拍上爽肤水,令冰冷的爽肤水温度与皮肤更接近,使皮肤更容易吸收,爽肤水也可以发挥更大效用。 化妆棉:以化妆棉涂上则可抹去残留在皮肤上的洁面品和一些洁面时还未彻底洗掉的灰尘和污垢,也可防止因双手不够洁净而将污垢沾上面部,所以用化妆棉会较卫生。 4.即时收缩毛孔

相关主题
相关文档 最新文档