resolução de· sistemas lineares com alta exatidão em ... · a instalação ocorreu de forma...

4
Resolução de· Sistemas Lineares com Alta Exatidão em Ambiente de Alto Desempenho Bernardo Frederes Krãmer Alcaide ' Paulo Sérgio Morandi Júnior e Tiarajú Asmuz Diverio In stituto de b?fàrmática e PPGC- UFRGS sergio, Resumo Até os dias de hoje tem- se buscado uma combinação de software (métodos de inclusão monotônica) com o hardware (aritmética de alta exatidão. matemática intervalar. arredondamentos direcionados. produto escalar ótimo. etc.) para que a tarefa de decidir se 0 resultado é ou nào satisfatório seja para o computador. ou seja. a Computação Ver!ficada. Agora, deseja-se capacitar com esta técnica os novos ambientes. propícios ao processamento paralelo e distribuído. para que eles resolvan1 problemas com alta exatidão e alto desempenho. O trabalho abordado nesse artigo visa 0 desenvolvimento de bibliotecas para a reso lu ção de sistemas de equaçiies lineares densos e esparsos. utilizando a biblioteca C-XSC no cluster LabT ec do 1/- UFRGS. 1. Introdução Computação Verificada significa o processamento numéri co de problemas, utilizando a aritmética de alta exatidão, os métodos intervalarcs de inclusão e a convergência garantida pelo Teorema de Ponto Fixo de Brouwer ([9]). Entende-se por aritmética de alta exatidão a aritmética computacional de ponto flutuante baseada no padrão IEEE-754 ([1]), acrescida de arredondamentos direcionados, da matemática intervalar e do cálculo do produto c somatórios em registradores especiais, que perm1tem que valores parciais sejam armazenados sem arredondamentos, resultando que o valor final des sas operações difira do valor real por apenas um arredondamento, vindo daí a máxima exatidão. Os todos de inclusão trabalham com intervalos. Cada aproximação é um intervalo que contém a so lução do problema . As aproxi mações sucessivas são re sultantes da intersecção de intervalos, o que garante que tenham um diâmetro menor (ou igual) à aproximação anterior. Esses também identificam a não existência de solução, atraves de uma aproximação vazia (o resultado não é um intervalo). 168 Carlos Amaral Hõlbig PPGC - UFRGS & Universidade de Passo Fundo holbig@up/br Esse rdmo da Computação Científica ou da Matemática Computacional busca melhorar a qualidade numérica dos cálculos em ponto flutuante em computadores. Como é ilustrado na figura I, te m-se um somatório que depende da ordem da soma ou de um produto escalar (o resultado de ste somatório é igual a I) . iu6i -16;)+ iu6i -16' )+ 1 i= N i =N Figura 1. Somatório utilizado nos testes Tomando como exemplo os dados apresentados na tabela I, as apl icações foram reso lvidas em máquinas vetori ais que executavam milhares de operações em ponto flutuante por seg undo (MFiops). Entretanto, a qualidade numérica foi questionável. Tabela 1. Resultados para N = 29 Somatório Modo Escalar Modo Vetorial SO O. OOOOOOE+OO 0.2951479E+2 1 S23 O. OOOOOOE+OO 0.1152922E+ 19 S 119 O.OOOOOOE+OO O.OOOOOOOE+OO Sl22 O.OOOOOOE+OO -0.2951479E+21 S 153 O.OOOOOOE+OO 0.1 OOOOOOE +O I S 154 0.1 OOOOOE+O I 0.1 OOOOOOE+O 1 S236 O.IOOOOOE+OI 0.2951479E+21 Essa busca da qualidade numérica dos cálculos torna- se mais cr ucial em aplicações de larga escala de computação, as quais necessitam da realização de uma grande quantidade de operações em ponto flutuante. Com as novas tecnologias de intercomunicação de redes, foi poss ível a construção de máquinas baratas com grande poder computacional, os agregados de computadores, também conhecidos como clusters. Qual a qualidade numérica dos cálculos executados nessas máquinas? Será isso importante para a área de Processamento de Alto Desempenho? Essas são questões que esta pe squisa procurará responder no transcorrer de seu desenvolvimento.

Upload: lecong

Post on 23-Dec-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Resolução de· Sistemas Lineares com Alta Exatidão em ... · A instalação ocorreu de forma normal, bastando baixar a biblioteca C-XSC do site e instalar o ... vetores e matrizes

Resolução de· Sistemas Lineares com Alta Exatidão em Ambiente de Alto Desempenho

Bernardo Frederes Krãmer Alcaide '

Paulo Sérgio Morandi Júnior e Tiarajú Asmuz Diverio

Instituto de b?fàrmática e PPGC- UFRGS {~fkalcalde, sergio, diveriol@inft~/i·gs. br

Resumo

Até os dias de hoje tem-se buscado uma combinação de software (métodos de inclusão monotônica) com o hardware (aritmética de alta exatidão. matemática intervalar. arredondamentos direcionados. produto escalar ótimo. etc.) para que a tarefa de decidir se 0

resultado é ou nào satisfatório seja .tran.~ferido para o computador. ou seja. a Computação Ver!ficada. Agora, deseja-se capacitar com esta técnica os novos ambientes. propícios ao processamento paralelo e distribuído. para que eles resolvan1 problemas com alta exatidão e alto desempenho. O trabalho abordado nesse artigo visa 0

desenvolvimento de bibliotecas para a resolução de sistemas de equaçiies lineares densos e esparsos. utilizando a biblioteca C-XSC no cluster LabTec do 1/­

UFRGS.

1. Introdução

Computação Verificada significa o processamento numérico de problemas, utilizando a aritmética de alta exatidão, os métodos intervalarcs de inclusão e a convergência garantida pelo Teorema de Ponto Fixo de Brouwer ([9]). Entende-se por aritmética de alta exatidão a aritmética computacional de ponto flutuante baseada no padrão IEEE-754 ([1]), acrescida de arredondamentos direcionados, da matemática intervalar e do cálculo do produto ~scalar c somatórios em registradores especiais, que perm1tem que valores parciais sejam armazenados sem arredondamentos, resultando que o valor final dessas operações difira do valor real por apenas um arredondamento, vindo daí a máxima exatidão.

Os métodos de inclusão trabalham com intervalos. Cada aproximação é um intervalo que contém a solução do problema. As aproximações sucessivas são resultantes da intersecção de intervalos, o que garante que tenham um diâmetro menor (ou igual) à aproximação anterior. Esses méto~os também identificam a não existência de solução, atraves de uma aproximação vazia (o resultado não é um intervalo).

168

Carlos Amaral Hõlbig

PPGC - UFRGS & Universidade de Passo Fundo

holbig@up/br

Esse rdmo da Computação Científica ou da Matemática Computacional busca melhorar a qualidade numérica dos cálculos em ponto flutuante em computadores. Como é ilustrado na figura I, tem-se um somatório que depende da ordem da soma ou de um produto escalar (o resultado deste somatório é igual a I).

iu6i -16;)+ iu6i -16')+ 1 i=N i=N

Figura 1. Somatório utilizado nos testes

Tomando como exemplo os dados apresentados na tabela I, as apl icações foram resolvidas em máquinas vetoriais que executavam milhares de operações em ponto flutuante por segundo (MFiops). Entretanto, a qualidade numérica foi questionável.

Tabela 1. Resultados para N = 29 Somatório Modo Escalar Modo Vetorial SO O.OOOOOOE+OO 0.2951479E+21 S23 O.OOOOOOE+OO 0.1152922E+ 19 S 119 O.OOOOOOE+OO O.OOOOOOOE+OO Sl22 O.OOOOOOE+OO -0.2951479E+21 S 153 O.OOOOOOE+OO 0.1 OOOOOOE +O I S 154 0.1 OOOOOE+O I 0.1 OOOOOOE+O 1 S236 O.IOOOOOE+OI 0.2951479E+21

Essa busca da qualidade numérica dos cálculos torna­se mais crucial em aplicações de larga escala de computação, as quais necessitam da realização de uma grande quantidade de operações em ponto flutuante . Com as novas tecnologias de intercomunicação de redes, foi possível a construção de máquinas baratas com grande poder computacional, os agregados de computadores, também conhecidos como clusters. Qual a qualidade numérica dos cálculos executados nessas máquinas? Será isso importante para a área de Processamento de Alto Desempenho? Essas são questões que esta pesquisa procurará responder no transcorrer de seu desenvolvimento.

Page 2: Resolução de· Sistemas Lineares com Alta Exatidão em ... · A instalação ocorreu de forma normal, bastando baixar a biblioteca C-XSC do site e instalar o ... vetores e matrizes

Anais WSCAD 2003

2. O Ambiente Computacional Este trabalho está desenvolvendo ferramentas

computacionais (software) utilizando o c/uster LabTeC do 11-UFRGS e a biblioteca C-XSC (descrita em detalhes em [2], [3] c [7]).

Para realizar os testes c a instalação do GXSC com M PICH foi utilizado o cluster do Laboratório de Tecnologias em Cluster (LabTeC/DELL) da UFRGS (a c esse h tt p :llwww. i '!1: 1(/i·gs. br//a btec para in formações sobre o c/uster LabTeC/DELL), cuja configuração atual é:

• Servidor de acesso ao clustcr (front-cnd): Dual Pentium IV Xcon 1.8 GHz (Hyper Thrcading), I GB de memória RAM, HD SCSI de 36GB, placa de rede Gigabit Ethcmet;

• Configuração de cada Nó (total de 20 nós): Dual Pentium 111 1.1 GHz, I GB de memória RAM, HD SCSI de 18GB, placa de rede Gigabit Ethcrnet;

A instalação ocorreu de forma normal, bastando baixar a biblioteca C-XSC do site http://www.xsc.de e instalar o pacote seguindo as instruções fornecidas . A biblioteca MPICHjá estava instalada no cluster.

O C-XSC é baseado na linguagem C-ANSI e é implementado como uma biblioteca numérica da linguagem C++. O C-XSC torna o computador mais poderoso aritmeticamente c simplifica significantcmente a programação, incluindo produto escalar ótimo c muitos tipos de dados pré-definidos para elementos mais comumente usados em espaços vetoriais, tais como números reais e complexos, vetores e matrizes. Operadores para elementos desses tipos são pré-definidos e podem ser chamados pelos seus símbolos de operadores usuais. Assim, expressões aritméticas e algoritmos numéricos são expressos em uma notação que é muito similar à notação matemática usual. Todos os operadores numéricos pré­definidos são de alta exatidão, ou seja, o resultado computado difere do resultado correto por apenas um arredondamento. A ênfase do C-XSC é mais na exatidão e na confiabilidade do resultado do que na velocidade da obtenção do mesrro. O ambiente de programação do C­XSC é facilmente portável para qualquer computador que suporte um Compilador C++ padrão. Além do C-XSC, existem versões "XSC" para as linguagens Pascal e Fortran. O C-XSC possui ainda, entre suas características, aritmética intervalar, aritmética corrplexa, aritmética intervalar complexa e as correspondentes aritméticas de vetores e matrizes. Encontra-se também no C-XSC, módulos para a resolução de problemas numéricos, tais como: sistemas de equações lineares e não lineares, inversão de matrizes, autovalores e autovetores, avaliação de expressões aritméticas e muitos outros ([8]).

3. Integração da Biblioteca C-XSC com MPI

169

Como os objetivos desta pesquisa são o desenvolvimento de so/vers com alta exatidão para a resolução de sistemas de equações lineares em agregados de computadores c a utilização/otimização da biblioteca GXSC neste tipo de ambiente, primeiramente foi nccessano realizar a integração da biblioteca C-XSC com a biblioteca MPICH 1.2.2. Com essa integração, buscou-se reunir a alta exatidão do C-XSC com a paralelização resultante do uso da divisão de tarefas entre os diversos nodos disponíveis no c lustcr, sendo que todos executaram as mesmas tarefas c a comunicação entre os nodos e entre nodos c o servidor se deu através de troca de mensagens. Nestes testes iniciais foi notado que a biblioteca C-XSC necessita ser otimizada (ver [4]) para tornar-se eficiente em um ambiente de alto desempenho (até o momento, o principal objetivo do C-XSC foi a funcionalidade e portabilidade e não a velocidade).

Para garantir que o C-XSC tivesse uma total integração com MPICH, foi necessário realizar testes mostrando que os tipos especiais de dados do C-XSC (os que permitem que se tenha a alta exatidão nos cálculos) possam ser env iados c recebidos sem problemas pelas rotinas do MPICH, ou seja. que se ocorressem problemas, que estes fossem exclusivamente com os algoritmos implementados e não com aspectos relacionados à integração do C-XSC com MP!. Realizou-se, então, um teste bem simples com dois processos, no qual foram enviados os tipos de dados do C-XSC de um processo para outro. Para os tipos mais simples como matrizes, vetores. intervalos, complexos e reais, os testes funcionaram perfeitamente bem, utilizando o exemplo que se segue:

M PI_Seluf(& (var).sizeo.f(mr) .M P/_8 l'TE.destino.tag.mpicomgrmt

p):

onde var é qualquer uma das variáveis declaradas como um dos seguintes tipos: real, interva/, complex, rmatrix, rvector, imatrix, ivector, intvector, intmatrix, cvector, cmatrix, cinterva/, cimatrix e civector. Para realizar os testes sobre os tipos de dados dotprecision (dotprecision, idotprecision, cdotprecision, idotprecision e cidotprecision), foi necessária a utilização de um programa simples, porém mais funcional do que o anterior. O teste cons istiu em criar 4 processos, I principal e 3 escravos, onde o processo principal dividia dois vetores entre os processos escravos, e estes, por sua vez, calculavam um produto escalar ótimo (utilizando o tipo dotprecision) e enviava o resultado parcial para o processo principal. O processo principal recebia e somava os três resultados parciais, realizando o único arredondamento para dar a resposta final. Entretanto, quando os processos escravos enviavam os resultados parciais (do tipo dotprecision), os resultados não foram os

Page 3: Resolução de· Sistemas Lineares com Alta Exatidão em ... · A instalação ocorreu de forma normal, bastando baixar a biblioteca C-XSC do site e instalar o ... vetores e matrizes

Anais WSCAD 2003

esperados. Os processos escravos estavam enviando, através do MPI_Send, apenas 4 bytes para o processo principal. Uma breve consulta a [7] mostrou que esse tipo de comportamento estava completamente errado, uma vez que o dotprecision ocupa cerca de 529 bytes em memória. Então, certamente, o dotprecision seria um ponteiro para uma área de memória c o MPI_Send não estava conseguindo acessar o conteúdo da variável dotprecision. Utilizando um depurador paralelo desenvolvido no grupo GPPD (depurador PADI- ainda em fase de aperfeiçoamento), foi descoberto que na verdade o dotprecision é um apontador do tipo longint, logo a solução mais óbvia era de fazer um type casting, o que foi implementado. Para isso procedeu-se da seguinte maneira: 1. Type casting:

unsigned long *envia: <tipo_dotprecision> accu: envia = *(unsigned long **)(&accu):

2. Envio: Agora que envia aponta para o mesmo conteúdo que accu , na linha de comando MPI_Send acima basta trocar & (vm) por envia e sizeo.f(var) por BUFFERSIZE (BUFFERSIZE é uma constante do C­XSC usada internamente para alocar um dotprecision na memória):

MPI_Send(envia,BUFFERSIZE,MPI_BYTE,destino,tag.mpicomgr oup):

Para o recebimento, os procedimentos são análogos. Neste caso também há a necessidade de um type casting de recebimento:

unsigned long *recebe; <tipo_dotprecision > accu2: recebe = *(unsigned long **)(&accu2): MPI_ Recv(recebe. BUFFERSIZE.MPI_BYTE.origem,tag.m picomgroup.mpistarus);

A biblioteca C-XSC pôde, desta maneira, ser integrada com o MP/CH sem maiores problemas, ficando a cargo dos a lgoritmos paralelos a adaptação à computação verificada (características oferecidas pelo GXSC), para poder se aliar à alta exatidão com o alto desempenho.

Como a matemática intervalar exige controles extras (unida com a computação verificada) que, em geral , não existem nos algoritmos convencionais, é esperado que a execução de algoritmos paralelos com GXSC seja mais demorada. Porém, daqui surgem outras questões que tentaremos responder com o andamento desta pesquisa, tais como o quanto é mais demorado? Qual a relação

170

exatidão x desempenho? Será que com a comunicação não perdemos um pouco a qualidade do resultado?

4. Solvers para Sistemas Lineares

Em conjunto com o uso do C-XSC no c/uster discutida no item anterior, foram desenvolvidas as versões iniciais de solver.1· para a resolução de s istemas de equações lineares com matrizes densas e esparsas (para maiores detalhes ver [5], [6] e [8]).

O solver para sistemas de equações lineares Ax = b, com matrizes densas n x m, soluciona sistemas quadrados (m = n), sobre-determinados (m > n) c s ub-determinados (m < n).

O algoritmo implementado no solver para sistemas esparsos (em especial para matrizes do tipo banda) foi baseado no estreito re lacionamento existente entre as matrizes com estrutura banda e equações diferenciais. De acordo com esse relacionamento, as equações diferenciais podem ser reescritas equivalentemente como um sistema linear triangular com matrizes bandas. Similarmente, pode­se reescrever um sistema triangular com matrizes do tipo banda como equações diferenciais. O sistema descrito a seguir é equivalente à equação diferencial

de a X + .. ·+a x =b i=m ... n

1.1- m-+1 1-m + l 1.1 i I ' ' '

ordem m-1 com os valores mtc tats

X ;= (b i -a i.i-1 X i-1_ ... - a i.l XI I a ;., . i= 1, ... ' m - 1)·

au o

Ax= a,., =

o a u.n-m+l a,., x, b,

Como apresentado em [8], a solução de sis temas triangulares por retro-substituição interval~r pode resultar em sobre-determinações devido ao "wrapping effect". Com o objetivo de minimizar esse efeito, usou-se a resolução de sistemas triangulares com matrizes do tipo banda, através da resolução de equações diferenciais. Para sistemas com matrizes bandas em geral aplica-se a decomposição LU sem pivotamento para a matriz de coeficientes A, gerando uma iteração intervalar similar a equação a seguir.

[y ]k+t = RO(b- Ax) + 0(1- RA )[y ]k Aqui, entretanto, não se usou a completa aproximação

da inversa R, mas sim essa aproximação foi realizada pela solução de dois sistemas lineares com matrizes triangulares bandas ( L e U).

Page 4: Resolução de· Sistemas Lineares com Alta Exatidão em ... · A instalação ocorreu de forma normal, bastando baixar a biblioteca C-XSC do site e instalar o ... vetores e matrizes

Anais WSCAD 2003

4. 1 Testes

Para ilustrar a qualidade numenca dos so/vers que estão em desenvolvimento neste trabalho e, que são utilizados para a resolução de siste mas de equações lineares densas e esparsas, a presenta-se aqui um exemplo

onde se calculou a inc lusão para um s is tema linear esparso

de grande porte (ordem n=200.000). Foi utilizada uma matriz simétrica Toeplitz com 5 bandas com valores I ,2,4,2, I e definiu-se todos componentes de b ig ua is a I. O

solver para s istemas esparsos produz iu a seguinte saída

para esse sistema (somente os dez primeiros e os dez

últimos componentes da solução foram apresentados):

Dimensão n = 200000 Bandwidths l.k : 2 2 A = 1 242 1 troca elementos? (s/n) n b ==l troca elementos? (s/n) n

x = 1: [ 1.860146067479180E-OOI . 1.860146067479181E-OOI] 2: [ 9.0378595502 1 0300E-002. 9.0378595502 1 0302E-002 ] 3: [ 7.5 18438200412 189E-002. 7.5 1R4382004 1219 1E-002] 4: I 1.160876404875081E-OO I. 1.1 60876404875082E-00 1] 5: [ 1.003 153932563721 E-00 I. 1.003153932563722E-OO I ] 6: I 9.427 129202687645E-002. 9.427 129202687647E-002 l 7: [ 1.0283617994 16204E-OO I. 1.028361799416205E-OO I ] 8: [ 1.005240450090008E-OO I, 1.005240450090009E-OO I ] 9: I 9.87492 1290539136E-002. 9.874921290539138E-002 l 10: I 1.004617422430963E-001. 1.004617422430964E-001 J

199990:[1.00 195J939326 196E-OO I. 1.001953939326 197E-OO I I 19999 1 :I1 .004617422430963E-OO I. 1.004617422430964E-OO I I 199992:[9.87492 1290539136E-002, 9.87492 1290539138E-002 ] 199993:[1.005240450090008E-OO I. 1.005240450090009E-OO I J 199994: [ 1.02836 1799416204E-00 I. 1.0283617994 16205E-OO I ] 199995:(9.427 129202687645E-002. 9.427 129202687647E-002 ] 199996:[ 1.003 153932563721 E-00 I. 1.003 153932563722E-OO I ] 199997:[1 .16087640487508 1 E-00 I. 1.160876404875082E-OO I ] 199998:[7.5 18438200412 189E-002. 7.5 184382004 12191 E-002] 199999:[9.0378595502 1 0300E-002. 9.0378595502 1 0302E-002 ) 200000:[ 1.860 146067479 180E-OO I. 1.860 146067479181 E-001 ] max. rei. erro r = I .84583386042245 1 E-0 16 em i = 3 max. abs. erro r = 2. 77555756156289 1 E-0 17 em i = I min. abs.: x[3) = [7.5184382004121 89E-002. 7.5 18438200412191 E-002] max. abs.: x[ I] = [1.8601460674791 80E-OO I. 1. 860146067479181 E-00 1]

5. Conclusões e Trabalhos Futuros

Com o objetivo de tentar achar soluções para as perguntas fe itas no início deste artigo, é que está em desenvol vimento es ta pesquisa que objetiva disponibilizar ferramentas computacio nais com alta exatidão em agregados de computadores. A integração inicial do C-

171

XSC com o MPl já foi realizada, bem como o desenvolvimento de versões iniciais de so/vers para a resolução de s istemas de equações lineares. Atualmente, o trabalho está vo ltado para o estudo de como real izar uma efic iente para le lização dos métodos intervala res já implementados (métodos com a lta exatidão), além do

estudo, desenvolvimento e implementação de novos

métodos. Juntamente com esses estudos, est á se trabalhando nas tarefas de como realizar a o timização da

biblioteca C-XSC para que e la possa ser utilizada, de maneim eficiente, em agregados d e computadores.

6. Referências

[I] Ameriean National Standards lnstitute lnstitute o f Electrical and Electronics Engineers, A Standard for BinaryFloating-Point Arithmetic, ANSIIIEEE Std. 754-1 985, New York, 1985.

[2] Hammer, R. , Hocks, M., U. Kulisch, U .. Ratz, D., C-XSC Toolbox for Verified Computing 1: basic numerical problems, Springer-Verlag, Berlin/Heidelberg/New York, 1995.

[3] Hofschuster, W., Krãmer, W. , Wedner, S., WiethotT, A., C­XSC 2.0: A C++ C1ass Library for Extended Seientific Computing, Universitãt Wuppertal, Preprint BUGHW -WRSWT 2001/1,200 1.

(4] Hõlbig, C.A., Diverio, T.A., C laudio, D.M., Krãmer, W.,

ohlender, G., "Automatic Result Verificat ion in the Environment of High Performance Computing", In: IMACS/GAMM INTERNATIONAL SYMPOSIUM ON SCIENTIFIC

COMPUTING, COM PUTER ARITH MET IC AND VALIDATED NUMERICS, 2002, Paris, Extended abstraets, pg. 54-55, 2002.

[5] Hõlbig, C.A., Diverio, T.A., Krãmer, W., •· An Accurate and Efficient Selfverifying Solver for Systems with Banded

Coefficient Matrix", In: PARALLEL COMPUTING, 2003, Dresden, 2003.

(6] Hõlbig, C.A., Morandi Júnior, P.S., Alcaide, B.F.K., Diverio,

T.A., .. Selfveri fying Solvers for Linear Sy stems of Equations in C-XSC", In: INTERNATIONAL CONFERENCE ON

PARALLEL PROCESSING AND APPLI ED MATHEMATICS, 5th, 2003, Czestochowa, 2003.

[7] Klatte, R., Kulisch, U., Lawo, C., Raueh, M.,WiethotT, A.,

C-XSC, A C++ Class Libmry for Extended Scientific Computing, Springer-Verlag, Berlin/Heidelberg!New York, 1993.

[8] Krãmer, W., Kulisch, U., Lohner, R., Numerical Toolbox for Verified Computing 11 - Advanced Numerical Problems, University of Karlsruhe, 1994 (see

http :/ /www. uni -karlsruhe.de/\- Rudol f. Lohner/papers/tb2. ps.gz ).

[9] Kulisch, U., Miranker, W.L. (Eds.), A New Approach to

Scientific Computation, Proceedings ofSymposium held at IBM Research Center, Yorktown Heights, N.Y., 1982, Academie Press, New York, 1983.