0% found this document useful (0 votes)
16 views58 pages

Xcalablemp Pgas Programming Language From Programming Model To Applications Mitsuhisa Sato

The document provides information about the XcalableMP programming language, which is a directive-based parallel programming language designed for distributed memory systems. It supports the PGAS model and aims to facilitate the migration from existing codes while enhancing productivity for exascale computing. The document also includes links to various related ebooks and resources available for download on textbookfull.com.

Uploaded by

kalvanemehr2
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views58 pages

Xcalablemp Pgas Programming Language From Programming Model To Applications Mitsuhisa Sato

The document provides information about the XcalableMP programming language, which is a directive-based parallel programming language designed for distributed memory systems. It supports the PGAS model and aims to facilitate the migration from existing codes while enhancing productivity for exascale computing. The document also includes links to various related ebooks and resources available for download on textbookfull.com.

Uploaded by

kalvanemehr2
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 58

Explore the full ebook collection and download it now at textbookfull.

com

XcalableMP PGAS Programming Language From


Programming Model to Applications Mitsuhisa Sato

https://textbookfull.com/product/xcalablemp-pgas-
programming-language-from-programming-model-to-applications-
mitsuhisa-sato/

OR CLICK HERE

DOWLOAD EBOOK

Browse and Get More Ebook Downloads Instantly at https://textbookfull.com


Click here to visit textbookfull.com and download textbook now
Your digital treasures (PDF, ePub, MOBI) await
Download instantly and pick your perfect format...

Read anywhere, anytime, on any device!

Programming Language Concepts Peter Sestoft

https://textbookfull.com/product/programming-language-concepts-peter-
sestoft/

textbookfull.com

ADA Programming Everything you need to know about ADA


Programming language 2nd Edition Claudia Alves

https://textbookfull.com/product/ada-programming-everything-you-need-
to-know-about-ada-programming-language-2nd-edition-claudia-alves/

textbookfull.com

Programming 101: The How and Why of Programming Revealed


Using the Processing Programming Language 1st Edition
Jeanine Meyer
https://textbookfull.com/product/programming-101-the-how-and-why-of-
programming-revealed-using-the-processing-programming-language-1st-
edition-jeanine-meyer/
textbookfull.com

Programming in 15 Language Muhammad Allah Rakha

https://textbookfull.com/product/programming-in-15-language-muhammad-
allah-rakha/

textbookfull.com
Advanced Software Technologies for Post Peta Scale
Computing The Japanese Post Peta CREST Research Project
Mitsuhisa Sato
https://textbookfull.com/product/advanced-software-technologies-for-
post-peta-scale-computing-the-japanese-post-peta-crest-research-
project-mitsuhisa-sato/
textbookfull.com

Go programming language The Ultimate Beginner s Guide to


Learn Go Programming Step by Step 3rd Edition John Bach

https://textbookfull.com/product/go-programming-language-the-ultimate-
beginner-s-guide-to-learn-go-programming-step-by-step-3rd-edition-
john-bach/
textbookfull.com

Introducing Vala Programming: A Language and Techniques to


Boost Productivity Michael Lauer

https://textbookfull.com/product/introducing-vala-programming-a-
language-and-techniques-to-boost-productivity-michael-lauer/

textbookfull.com

The Rust Programming Language 1st Edition Steve Klabnik

https://textbookfull.com/product/the-rust-programming-language-1st-
edition-steve-klabnik/

textbookfull.com

The Rust Programming Language 2nd Edition Steve Klabnik

https://textbookfull.com/product/the-rust-programming-language-2nd-
edition-steve-klabnik/

textbookfull.com
Mitsuhisa Sato Editor

XcalableMP PGAS
Programming
Language
From Programming Model
to Applications
XcalableMP PGAS Programming Language
Mitsuhisa Sato
Editor

XcalableMP PGAS
Programming Language
From Programming Model to Applications
Editor
Mitsuhisa Sato
Programming Envt Research Team
RIKEN Center for Computational Science
Kobe, Hyogo, Japan

ISBN 978-981-15-7682-9 ISBN 978-981-15-7683-6 (eBook)


https://doi.org/10.1007/978-981-15-7683-6

This book is an open access publication.

© The Editor(s) (if applicable) and The Author(s) 2021


Open Access This book is licensed under the terms of the Creative Commons Attribution 4.0 Inter-
national License (http://creativecommons.org/licenses/by/4.0/), which permits use, sharing, adaptation,
distribution and reproduction in any medium or format, as long as you give appropriate credit to the
original author(s) and the source, provide a link to the Creative Commons license and indicate if changes
were made.
The images or other third party material in this book are included in the book’s Creative Commons
license, unless indicated otherwise in a credit line to the material. If material is not included in the book’s
Creative Commons license and your intended use is not permitted by statutory regulation or exceeds the
permitted use, you will need to obtain permission directly from the copyright holder.
The use of general descriptive names, registered names, trademarks, service marks, etc. in this publication
does not imply, even in the absence of a specific statement, that such names are exempt from the relevant
protective laws and regulations and therefore free for general use.
The publisher, the authors, and the editors are safe to assume that the advice and information in this book
are believed to be true and accurate at the date of publication. Neither the publisher nor the authors or
the editors give a warranty, expressed or implied, with respect to the material contained herein or for any
errors or omissions that may have been made. The publisher remains neutral with regard to jurisdictional
claims in published maps and institutional affiliations.

This Springer imprint is published by the registered company Springer Nature Singapore Pte Ltd.
The registered company address is: 152 Beach Road, #21-01/04 Gateway East, Singapore 189721,
Singapore
Preface

XcalableMP is a directive-based parallel programming language based on Fortran


and C, supporting the PGAS (partitioned global address space) model for distributed
memory parallel systems. PGAS is a programming model related to distributed
memory system with a shared address space that distinguishes between local (cheap)
and remote (expensive) memory access. It provides an easy and intuitive program-
ming model to describe remote data access. PGAS is an emerging programming
model for exascale computing.
The XcalableMP project has been started in 2008 as a part of MEXT e-science
project, led by Prof. Yutaka Ishikawa, University of Tokyo, Japan. The language
specification working group were organized by Mitsuhisa Sato, University of
Tsukuba, with members from academia, government laboratories, and industries,
who are interested in parallel programming languages. In 2011, version 1.0 of
XcalableMP was published. Since 2011, after the e-science project was ended, the
specification working group has been managed under the PC Cluster Consortium,
Japan. At the same time, the Omni XcalableMP compiler has been developed as
a production-level reference implementation of XcalableMP compiler for C and
Fortran 2008 by RIKEN CCS and University of Tsukuba.
The XcalableMP project has taken an evolutional approach with the following
strategies:
• We focus on migration from existing codes: To facilitate the migration, we
took the directive-based approach to enable parallelization by adding direc-
tives/pragma in the global view programming. As a local view programming,
the coarray feature was supported to replace the MPI communication for the
migration from the MPI.
• Learn from the past: In the past, the Japanese HPC language community had a
lot of experience on High-Performance Fortran. This experience provided useful
insights for the design of the global view programming model.
• Specification designed by community: Programming languages should be shared
by many programmers. For the design of the language specification, the specifi-
cation working group has been organized to collect the idea from the community.

v
vi Preface

Currently, the working group is organized under the PC Cluster Consortium,


Japan.
• Design based on the PGAS model and Coarray Fortran: In XcalableMP, the
PGAS model is adopted as the main programming model since it is an emerging
programming model for exascale computing. In addition, we extend it with the
idea taken from HPF for global view programming. Coarray feature is taken as a
local view programming.
• Used as a research vehicle for researches for programming language: As
advanced researches, an extension to accelerator, XcalableACC, and global task-
parallel programming for XcalableMP 2.0 are explored based on the XcalableMP
language.
This book presents XcalableMP language from its programming model and basic
concept to the experience and performance of applications described in XcalableMP
and some extended research projects using XcalableMP.
Chapter “XcalableMP Programming Model and Language” presents the
overview of XcalableMP programming model and language, followed by
implementation and performance evaluation of a reference prototype compiler
and Omni XcalableMP compiler, in Chapter “Implementation and Performance
Evaluation of Omni Compiler”. Chapter “Coarrays in the Context of XcalableMP”
presents how to design and implement the Coarray feature in the XcalableMP
compiler.
XcalableACC is an extended project to integrate the OpenACC with XcalableMP
for the programming of the cluster with accelerators. Chapter “XcalableACC: An
Integration of XcalableMP and OpenACC” describes the XcalableACC with the
implementation and performance evaluation.
Chapter “Mixed-Language Programming with XcalableMP” presents the mixed-
language programming with XcalableMP. It demonstrates how to use XcalableMP
with other programming languages such as Python. The global view programming
of XcalableMP provides very simple and intuitive programming tools to describe a
part of program controlled by Python.
Chapters “Three-Dimensional Fluid Code with XcalableMP”, “Hybrid-View
Programming of Nuclear Fusion Simulation Code in XcalableMP” and “Paralleliza-
tion of Atomic Image Reconstruction from X-ray Fluorescence Holograms with
XcalableMP” present applications experiences, “Three-Dimensional Fluid Code,”
“Nuclear Fusion Simulation Code,” and “Atomic Image Reconstruction from X-ray
Fluorescence Holograms” described in XcalableMP.
Chapter “Multi-SPMD Programming Model with YML and XcalableMP”
presents the international collaboration with French and German partners.
Framework and Programming for Post-Petascale Computing (FP3C) project
conducted during September 2010–March 2013 aimed to exploit efficient
programming and method for future supercomputers. In the FP3C project, the
mSPMD programming had been proposed with the integration of the XcalableMP
and YML workflow programming environment. The priority program “Software for
Exascale Computing” (SPPEXA) by the collaboration with three countries, Japan,
Preface vii

Germany, and France, had been conducted to address fundamental research on the
various aspects of HPC software during 2016–2018 (phase II). The project “MUST
Correctness Checking for YML and XMP Programs (MYX)” had been selected.
The correctness checking program, MUST is applied to the XcalableMP program.
XcalableMP was taken as a parallel programming language project in FLAG-
SHIP 2020 project which was to develop the Japanese flagship supercomputer,
Fugaku, for improving the productivity and performance of parallel programming.
XcalableMP is now available on Fugaku and the performance is enhanced by the
Fugaku interconnect, Tofu-D. Chapter “XcalableMP 2.0 and Future Directions”
presents the current status of XcalableMP on Fugaku and a proposal for the next
version, XcalableMP 2.0. I conclude this book with challenges for future PGAS
models and some retrospectives about XcalableMP.
I hope this book will provide useful information to the XcalableMP program-
mers. Furthermore, for future exascale computing and beyond, an important role
of programming model is to bridge the gap between a new architecture and
programmer’s view as well as providing a comprehensive architectural view of the
system. I believe that the PGAS model and its extensions will be still an important
and suggestive model integrating computation and memory.
Finally, I would like to thank the members of the XcalableMP Specification
Working Group and all the people who contributed to the XcalableMP project.

Kobe, Japan Mitsuhisa Sato


July 2020
Contents

XcalableMP Programming Model and Language .. . . . . . .. . . . . . . . . . . . . . . . . . . . 1


Hitoshi Murai, Masahiro Nakao, and Mitsuhisa Sato
Implementation and Performance Evaluation of Omni Compiler.. . . . . . . . . 73
Masahiro Nakao and Hitoshi Murai
Coarrays in the Context of XcalableMP .. . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . 97
Hidetoshi Iwashita and Masahiro Nakao
XcalableACC: An Integration of XcalableMP and OpenACC .. . . . . . . . . . . . . 123
Akihiro Tabuchi, Hitoshi Murai, Masahiro Nakao, Tetsuya Odajima,
and Taisuke Boku
Mixed-Language Programming with XcalableMP .. . . . . .. . . . . . . . . . . . . . . . . . . . 147
Masahiro Nakao
Three-Dimensional Fluid Code with XcalableMP . . . . . . . .. . . . . . . . . . . . . . . . . . . . 165
Hitoshi Sakagami
Hybrid-View Programming of Nuclear Fusion Simulation Code
in XcalableMP .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . 181
Keisuke Tsugane, Taisuke Boku, Hitoshi Murai, Mitsuhisa Sato,
William Tang, and Bei Wang
Parallelization of Atomic Image Reconstruction from X-ray
Fluorescence Holograms with XcalableMP . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . 205
Atsushi Kubota, Tomohiro Matsushita, and Naohisa Happo
Multi-SPMD Programming Model with YML and XcalableMP . . . . . . . . . . . 219
Miwako Tsuji, Hitoshi Murai, Taisuke Boku, Mitsuhisa Sato,
Serge G. Petiton, Nahid Emad, Thomas Dufaud, Joachim Protze,
Christian Terboven, and Matthias S. Müller
XcalableMP 2.0 and Future Directions . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . 245
Mitsuhisa Sato, Hitoshi Murai, Masahiro Nakao, Keisuke Tsugane,
Tesuya Odajima, and Jinpil Lee
ix
XcalableMP Programming Model
and Language

Hitoshi Murai, Masahiro Nakao, and Mitsuhisa Sato

Abstract XcalableMP (XMP) is a directive-based language extension of Fortran


and C for distributed-memory parallel computers, and can be classified as a parti-
tioned global address space (PGAS) language. One of the remarkable characteristics
of XMP is that it supports both global-view and local-view parallel programming.
This chapter describes the programming model and language specification of XMP.

1 Introduction

Distributed-memory systems are generally used for large-scale simulations. To pro-


gram such systems, Message Passing Interface (MPI) is widely adopted. However,
programming with MPI is difficult because programmers must describe inter-
process communications with consideration of the execution flow of their programs,
which might cause deadlocks or wrong results.
To address this issue, a parallel language named High Performance Fortran (HPF)
was proposed in 1991. With HPF, programmers can execute their serial programs in
parallel by inserting minimal directives into them. If the programmers specify data
distribution with HPF directives, the compilers do all other tasks for parallelization
(e.g. communication generation and work distribution). However, HPF was not
widely accepted eventually because the compilers’ automatic processing prevents
the programmers from performance tuning, and the performance depends heavily
on the environment (e.g. compiler and hardware)

Note For more details, please refer: Ken Kennedy, Charles Koelbel and Hans Zima:
The Rise and Fall of High Performance Fortran: An Historical Object Lesson, Proc.
3rd ACM SIGPLAN History of Programming Languages Conf. (HOPL-III), pp. 7-
1–7-22 (2007).

H. Murai () · M. Nakao · M. Sato


RIKEN Center for Computational Science, Kobe, Hyogo, Japan
e-mail: [email protected]; [email protected]; [email protected]

© The Author(s) 2021 1


M. Sato (ed.), XcalableMP PGAS Programming Language,
https://doi.org/10.1007/978-981-15-7683-6_1
2 H. Murai et al.

In such circumstance, to develop a new parallel programming model that enables


easy parallelization of existing serial programs and design a new language based on
it, “the XMP Specification Working Group” was established in 2008. This group
utilized the lessons from the experience of HPF to define a new parallel language
XcalableMP (XMP). The group was reorganized to one of the working groups of PC
Cluster Consortium in 2011.
It is learned from the lessons of HPF that more automatic processing of compilers
increases the gap between a program and its execution, and, as a result, decreases the
usability of the language. In XMP, the programmers specify explicitly the details of
parallel programs on the basis of compiler directives to make their execution easy to
understand. In particular, they can specify explicitly communication, synchroniza-
tion, data mapping, and work mapping to facilitate performance tuning. In addition,
XMP supports features for one-sided communication on each process, which was
not available in HPF. This feature might enable programmers to implement parallel
algorithms more easily.
In this chapter, an overview of the programming model and language specifica-
tion of XMP is shown. You can find the latest and complete language specification
of XMP in: XcalableMP Specification Working Group, XcalableMP Specification
Version 1.4, http://xcalablemp.org/download/spec/xmp-spec-1.4.pdf (2018).

1.1 Target Hardware

The target of XcalableMP is distributed-memory multicomputers (Fig. 1). Each


compute node, which may contain several cores, has its own local memory (shared
by the cores, if any), and is connected with the others via an interconnection
network. Each node can access its local memory directly and remote memory (the
memory of another node) indirectly (i.e. via inter-node communication). However,

Fig. 1 Target hardware of XMP


XcalableMP Programming Model and Language 3

it is assumed that accessing remote memory may be much slower than accessing
local memory.

1.2 Execution Model

The execution entities in an XMP program are referred to as XMP nodes or, more
simply, nodes, which has its own memory and can communicate with each other.
An XcalableMP program execution is based on the Single Program Multiple
Data (SPMD) model, where each node starts execution from the same main routine,
and continues to execute the same code independently (i.e. asynchronously) until it
encounters an XcalableMP construct (Fig. 2).
A set of nodes that executes a procedure, statement, loop, a block, etc. is referred
to as its executing node set, and is determined by the innermost task, loop, or
array directive surrounding it dynamically, or at runtime. The current executing
node set is an executing node set of the current context, which is managed by the
XcalableMP runtime system on each node.
The current executing node set at the beginning of the program execution, or
entire node set, is a node set that contains all the available nodes, which can be
specified in an implementation-defined way (e.g. through a command-line option).
When a node encounters at runtime either a loop, array, or task construct,
and is contained by the node set specified (explicitly or implicitly) by the on clause

Fig. 2 Execution model of


XMP
4 H. Murai et al.

of the directive, it updates the current executing node set with the specified one
and executes the body of the construct, after which it resumes the last executing
node set and proceeds to execute the subsequent statements.
In particular, when a node in the current executing node set encounters a loop
or an array construct, it executes the loop or the array assignment in parallel with
the other nodes, so that each iteration of the loop or element of the assignment is
independently executed by the node in which the specified data element resides.
When a node encounters a synchronization or a communication directive,
synchronization or communication occurs between it and the other nodes. That is,
such global constructs are performed collectively by the current executing nodes.
Note that neither synchronization nor communication occurs unless these constructs
are specified.

1.3 Data Model

There are two classes of data in XcalableMP: global data and local data. Data
declared in an XcalableMP program are local by default.
Global data are distributed onto a node set by the align directive (see
Sect. 2.4). Each fragment of distributed global data is allocated in the local memory
of a node in the node set.
Local data comprises all data that are not global. They are replicated within the
local memory of each of the executing nodes.
A node can access directly only local data and sections of global data that reside
in its local memory. To access data in remote memory, explicit communication
must be specified in such ways as global communication constructs and coarray
assignments (Fig. 3).

Fig. 3 Data model of XMP


XcalableMP Programming Model and Language 5

1.4 Programming Models


1.4.1 Partitioned Global Address Space

XMP can be classified as a partitioned global address space (PGAS) language, such
as Co-Array Fortran [1], Unified Parallel C [2], and Chapel [3].
In such PGAS languages, multiple executing entities (i.e. threads, processes, or
nodes in XMP) share a part of their address space, which is, however, partitioned
and a portion of which is local to each executing entity.
The two programming models, global-view and local-view, that XMP supports
to achieve high performance and productivity on PGAS are explained below.

1.4.2 Global-View Programming Model

The global-view programming model is useful when, starting from a serial version
of a program, the programmer parallelizes it in a data-parallel style by adding
directives with minimum modification. Based on this model, the programmer
specifies the distribution of data among nodes using the data distribution directives.
The loop construct assigns each iteration of a loop to the node at which the
computed data is located. The global-view communication directives are used to
synchronize nodes, maintain the consistency of shadow areas of distributed data,
and move sections of distributed data globally. Note that the programmer must
specify explicitly communication to make all data references in their program local
using appropriate directives.
In many cases, the XcalableMP program following the global-view programming
model is based on a serial program, and it can produce the same result, regardless
of the number of nodes (Fig. 4).
There are three groups of directives for this model:
• Data mapping, which specifies the data distribution and mapping to nodes
• Work mapping (parallelization), which specifies the work distribution and
mapping to nodes.
• Communication and synchronization, which specify how a node communicates
and synchronizes with the other nodes.
Because these directives are ignored as a comment by the compilers of base
languages (Fortran and C), an XcalableMP program can usually be compiled by
them to ensure that they run properly.

1.4.3 Local-View Programming Model

The local-view programming model is suitable for programs that implement an


algorithm and a remote data reference that are to be executed by each node (Fig. 5).
6 H. Murai et al.

Fig. 4 Parallelization based on the global-view programming model

Fig. 5 Local-view programming model

For this model, some language extensions and directives are provided. The
coarray notation, which is imported from Fortran 2008, is one such extension,
and can be used to explicitly specify data on which node is to be accessed. For
example, the expression of A(i)[N] in XcalableMP Fortran is used to access an
XcalableMP Programming Model and Language 7

array element of A(i) located on the node N. If the access is a reference, then
a one-sided communication to read the value from the remote memory (i.e. the
get operation) is issued by the executing node. If the access is a definition, then
a one-sided communication to write the value to the remote memory (i.e. the put
operation) is issued by the executing node.

1.4.4 Mixture of Global View and Local View

In the global-view model, nodes are used to distribute data and works. In the local-
view model, nodes are used to address remote data in the coarray notation. In
application programs, the programmers should choose an appropriate data model
according to the characteristics of their program. Figure 6 illustrates the global view
and the local view of data.
Data can have both a global view and a local view, and can be accessed in both of
the views. XcalableMP provides a directive to give the local name (alias) to global
data declared in the global-view programming model to enable them to also be
accessed in the local-view programming model. This feature is useful to optimize
a certain part of a program by using explicit remote data access in the local-view
programming model.

1.5 Base Languages

The XcalableMP language specification is defined on the basis of Fortran and C as


the base languages. More specifically, the base language of XcalableMP Fortran is
Fortran 90 or later, and that of XcalableMP C is ISO C90 (ANSI C89) or later with
some extensions (see below).

1.5.1 Array Section in XcalableMP C

In XcalableMP C, the base language C is extended so that a part of an array, that is,
an array section or subarray, can be put in an array assignment statement, which
is described in Sect. 1.5.2, and some XcalableMP constructs. An array section is
built from a subset of the elements of an array, which is specified by a sequence of
square-bracketed integer expressions or triplets, which are in the form of:
[ base ] : [ length ] [ : step ]
When step is positive, the triplet specifies a set of subscripts that is a regularly
spaced integer sequence of length length beginning with base and proceeding in
increments of step up to the largest. The same applies to negative step too.
When base is omitted, it is assumed to be 0. When length is omitted, it is assumed
to be the number of remainder elements of the dimension of the array. When step is
omitted, it is assumed to be 1.
8 H. Murai et al.

Fig. 6 Global view and local view

Assuming that an array A is declared by the following statement,


int A[100];
some array sections can be specified as follows:
A[10:10] array section of 10 elements from A[10] to A[19]
A[10:] array section of 90 elements from A[10] to A[99]
A[:10] array section of 10 elements from A[0] to A[9]
A[10:5:2] array section of 5 elements from A[10] to A[18] by step 2
A[:] array section of the whole of A
XcalableMP Programming Model and Language 9

1.5.2 Array Assignment Statement in XcalableMP C

In XcalableMP C, the base language C is also extended so that it supports array


assignment statements just as Fortran does.
With such statement, the value of each element of the result of the right-hand side
expression is assigned to the corresponding element of the array section on the left-
hand side. When an operator or an elemental function is applied to array sections in
the right-hand side expression, it is evaluated to an array section that has the same
shape as that of the operands or arguments, and each element of which is the result
of the operator or function applied to the corresponding element of the operands or
arguments. A scalar object is assumed to be an array section that has the same shape
as that of the other array section(s) in the expression or on the left-hand side, and
where each element has its value.
Note that an array assignment is a statement, and therefore cannot appear as an
expression in any other statements.
In the example below, an array assignment statement in the fourth line copies the
five elements from B[0] to B[4] into the elements from A[5] to A[9].
XcalableMP C
int A[10];
int B[5];
...
A[5:5] = B[0:5];

1.6 Interoperability

Most of the existing parallel applications are written with MPI. It is not realistic to
port them over to XMP because each of them consists of millions of lines.
Because XMP is interoperable with MPI, users can develop an XMP application
by modifying a part of an existing one instead of rewriting it totally. Besides, when
developing a parallel application from scratch, it is possible to use XMP to write a
complicated part of, for example, domain decomposition while they use MPI, which
could be faster than XMP, to write a hot-spot part that need to be tuned carefully. In
addition, XMP is interoperable with OpenMP and Python (see Chap. 5).
It might be difficult to develop an application with just one programming
language or framework since it generally has its own strong and weak points. Thus,
an XMP program is interoperable with those in other languages to provide both high
productivity and performance.
10 H. Murai et al.

2 Data Mapping

2.1 nodes Directive

The nodes directive declares a node array, which is an array-like arrangement of


nodes in a node set. A node array can be multi-dimensional.
XcalableMP C
#pragma xmp nodes p[4]
XcalableMP Fortran
!$xmp nodes p(4)

The nodes directive declares a one-dimensional node array p that includes four
nodes. In XMP/C, it is zero-based and consists of p[0], p[1], p[2], and p[3].
In XMP/Fortran, it is one-based and consists of p(1), p(2), p(3), and p(4).
XcalableMP C
#pragma xmp nodes p[2][3]
XcalableMP Fortran
!$xmp nodes p(3,2)

The nodes directive declares two-dimensional node array p that includes six
nodes. In XMP/C, it consists of p[0][0], p[0][1], p[0][2], p[1][0],
p[1][1], and p[1][2]. In XMP/Fortran, it consists of p(1,1), p(2,1),
p(3,1), p(1,2), p(2,2), and p(3,2).

Note The ordering of the elements in a node array follows that of a normal array
in the base language, C or Fortran.

XcalableMP C
#pragma xmp nodes p[*]
XcalableMP Fortran
!$xmp nodes p(*)

An asterisk can be specified as the size in the nodes directive to declare a


dynamic node array. In the above code, one-dimensional dynamic node array p
is declared with an asterisk as the size. The actual size of a dynamic node array is
determined at runtime to fit the size of the current executing node set. For example,
when the programmer runs the sample code with three nodes, the node array p
includes three nodes.
The programmer can also declare multi-dimensional dynamic node arrays with
an asterisk.
XcalableMP C
#pragma xmp nodes p[*][3]
XcalableMP Programming Model and Language 11

XcalableMP Fortran
!$xmp nodes p(3,*)

When the programmer runs the sample code with 12 nodes, the node array p
has a shape of 4 × 3, in C, or 3 × 4, in Fortran.

Note The programmer can put an asterisk only in the last dimension, in XMP/For-
tran, or the first dimension, in XMP/C, of the node array.

Hint The dynamic node array may interfere with compiler optimizations. In
general, programs with static ones achieve better performance.

The programmer can declare a node subarray derived from an existing node array.
Node subarrays can be used, for example, to optimize inter-node communication by
reducing the number of nodes participating in the communication.
XcalableMP C
#pragma xmp nodes p[16]
#pragma xmp nodes q[8]=p[0:8]
#pragma xmp nodes r[4][2]=p[8:8]
XcalableMP Fortran
!$xmp nodes p(16)
!$xmp nodes q(8)=p(1:8)
!$xmp nodes r(2,4)=p(9:16)

In line 1, a node array p including 16 nodes is declared. In line 2, a node


subarray q corresponding to the first half of p is declared. In line 3, a two-
dimensional node subarray r corresponding to the latter half of p is declared.
The programmer can declare an n-dimensional node subarray derived from an
m-dimensional one (Fig. 7).
XcalableMP C
#pragma xmp nodes p[4][2]
#pragma xmp nodes row[4]=p[:][*]
#pragma xmp nodes col[2]=p[*][:]
XcalableMP Fortran
!$xmp nodes p(2,4)
!$xmp nodes row(4)=p(*,:)
!$xmp nodes col(2)=p(:,*)

In line 1, a two-dimensional node array p including 4 × 2 nodes is declared. In


line 2, a node subarray row derived from a single row of p is declared. In line 3, a
node subarray col derived from a single column of p is declared.
12 H. Murai et al.

Fig. 7 Node subarrays

A colon represents a triplet which indicates all possible indices in the dimension.
An asterisk indicates the index of the current executing node in the dimension.
For example, col[2] corresponds to p[0][0:2] on nodes p[0][0] and
p[0][1], and to p[1][0:2] on nodes p[1][0] and p[1][1] in XMP/C.
Similarly, col(2) corresponds to p(1:2,1) on nodes p(1,1) and p(2,1),
and to p(1:2,2) on nodes p(1,2) p(2,2) in XMP/Fortran.
In XMP/C, row[0] corresponds to p[0][0] and p[0][1] on p[:][0]
and p[:][1], respectively; col[0] corresponds to p[0][0], p[1][0],
p[2][0], and p[3][0] on p[0][:], p[1][:], p[2][:], p[3][:],
respectively. In XMP/Fortran, row(1) corresponds to p(1,1) and p(2,1) on
p(1,:) and p(2,:), respectively; col(1) corresponds to p(1,1), p(1,2),
p(1,3), and p(1,4) on p(:,1), p(:,2), p(:,3), p(:,4), respectively.

Note The semantics of an asterisk in a node reference is different from that in a


declaration.
XcalableMP Programming Model and Language 13

2.2 template Directive

The template directive declares a template, which is a virtual array that is used
as a “template” of parallelization in the programs and to be distributed onto a node
array.
XcalableMP C
#pragma xmp template t[10]
XcalableMP Fortran
!$xmp template t(10)

This template directive declares a one-dimensional template t having ten


elements. Templates are indexed in the similar manner to arrays in the base
languages. For the above examples, the template t is indexed from zero to nine (i.e.
t[0] · · · t[9]), in XMP/C, or one to ten (i.e. t(1) · · · t(10)), in XMP/Fortran.

Hint In many cases, a template should be declared to have the same shape as your
target array.

XcalableMP C
#pragma xmp template t[10][20]
XcalableMP Fortran
!$xmp template t(20,10)

The template directive declares a two-dimensional template t that has 10 ×


20 elements. In XMP/C, t is indexed from t[0][0] to t[9][19], and, in XMP/Fortran,
from t(1,1) to t(20,10).
XcalableMP C
#pragma xmp template t[:]
XcalableMP Fortran
!$xmp template t(:)

In the above examples, a colon instead of an integer is specified as the size to


declare a one-dimensional dynamic template t. The colon indicates that the size
of the template is not fixed and to be fixed at runtime by the template_fix
construct (Sect. 2.6).

2.3 distribute Directive

The distribute directive specifies a distribution of the target template. Either of


block, cyclic, block-cyclic, or gblock (i.e. uneven block) can be specified to distribute
a dimension of a template.
14 H. Murai et al.

2.3.1 Block Distribution


XcalableMP C
#pragma xmp distribute t[block] onto p
XcalableMP Fortran
!$xmp distribute t(block) onto p

The target template t is divided into contiguous blocks and distributed among
nodes in the node array p (Fig. 8). Let’s suppose that the size of the template is
N and the number of nodes is K. If N is divisible by K, a block of size N/K is
assigned to each node; otherwise, a block of size ceil(N/K) is assigned to each of
N/ceil(N/K) nodes, a block of size mod(N, K) to one node, and no block to (K −
N/ceil(N/K) − 1) nodes. The block distribution is useful for regular computations
such as a stencil one.

Note The function ceil(x) returns a minimum integer value greater than or equal to
x, and mod(x, y) returns x modulo y.

XcalableMP C
#pragma xmp nodes p[3]
#pragma xmp template t[22]
#pragma xmp distribute t[block] onto p
XcalableMP Fortran
!$xmp nodes p(3)
!$xmp template t(22)
!$xmp distribute t(block) onto p

Since ceil(22/3) is 8, eight elements are allocated on each of p[0] and p[1],
and the remaining six elements are allocated on p[2].

XMP/C
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

p[0], p(1)
XMP/Fortran
p[1], p(2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
p[2], p(3)

Fig. 8 Block distribution


XcalableMP Programming Model and Language 15

XMP/C
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

p[0], p(1)
XMP/Fortran
p[1], p(2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
p[2], p(3)

Fig. 9 Cyclic distribution

2.3.2 Cyclic Distribution


XcalableMP C
#pragma xmp distribute t[cyclic] onto p
XcalableMP Fortran
!$xmp distribute t(cyclic) onto p

The target template t is divided into chunks of size one and distributed among
nodes in the node array p in a round-robin manner (Fig. 9). The cyclic distribution
is useful for the case where the load on each element of the template is not balanced.
XcalableMP C
#pragma xmp nodes p[3]
#pragma xmp template t[22]
#pragma xmp distribute t[cyclic] onto p
XcalableMP Fortran
!$xmp nodes p(3)
!$xmp template t(22)
!$xmp distribute t(cyclic) onto p

2.3.3 Block-Cyclic Distribution


XcalableMP C
#pragma xmp distribute t[cyclic(w)] onto p
XcalableMP Fortran
!$xmp distribute t(cyclic(w)) onto p

The target template t is divided into chunks of size w and distributed among
nodes in the node array p in a round-robin manner (Fig. 10). The block-cyclic
distribution is useful for the case where the load on each element of the template is
not balanced but the locality of the elements is required.
16 H. Murai et al.

XMP/C
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

p[0], p(1)
XMP/Fortran
p[1], p(2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
p[2], p(3)

Fig. 10 Block-cyclic distribution

XcalableMP C
#pragma xmp nodes p[3]
#pragma xmp template t[22]
#pragma xmp distribute t[cyclic(3)] onto p
XcalableMP Fortran
!$xmp nodes p(3)
!$xmp template t(22)
!$xmp distribute t(cyclic(3)) onto p

2.3.4 Gblock Distribution


XcalableMP C
#pragma xmp distribute t[gblock(W)] onto p
XcalableMP Fortran
!$xmp distribute t(gblock(W)) onto p

The target template t is divided into contiguous blocks of size W[0], W[1], · · · ,
in XMP/C, or W(1), W(2), · · · , in XMP/Fortran, and distributed among nodes in
the node array p (Fig. 11). The array W is called a mapping array. The programmer
can specify irregular (uneven) block distribution with the gblock format.
XcalableMP C
#pragma xmp nodes p[3]
#pragma xmp template t[22]
int W[3] = {6, 11, 5};
#pragma xmp distribute t[gblock(W)] onto p
XcalableMP Fortran
!$xmp nodes p(3)
!$xmp template t(22)
integer, parameter :: W(3) = (/6,11,5/)
!$xmp distribute t(gblock(W)) onto p
XcalableMP Programming Model and Language 17

XMP/C
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

p[0], p(1)
XMP/Fortran
p[1], p(2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
p[2], p(3)

Fig. 11 Gblock distribution

The programmer can specify an asterisk instead of a mapping array in the


gblock distribution to defer fixing the actual distribution. In such a case, the actual
distribution will be fixed at runtime by using the template_fix construct.

2.3.5 Distribution of Multi-Dimensional Templates

The programmer can distribute a multi-dimensional template onto a node array.


XcalableMP C
#pragma xmp nodes p[2][2]
#pragma xmp template t[10][10]
#pragma xmp distribute t[block][block] onto p
XcalableMP Fortran
!$xmp nodes p(2,2)
!$xmp template t(10,10)
!$xmp distribute t(block,block) onto p

The distribute directive declares the distribution of a two-dimensional


template t onto a two-dimensional node array p. Each dimension of the template
is divided in a block manner and each of the rectangular region is assigned to a node
(Fig. 12).
The programmer can specify a different distribution format in each of the
dimension of a template (Fig. 13).
XcalableMP C
#pragma xmp nodes p[2][2]
#pragma xmp template t[10][10]
#pragma xmp distribute t[block][cyclic] onto p
XcalableMP Fortran
!$xmp nodes p(2,2)
!$xmp template t(10,10)
!$xmp distribute t(cyclic,block) onto p
18 H. Murai et al.

XMP/C XMP/Fortran
0 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8
0 1
1 2
2 3
3 4 p[0][0], p(1,1)
4 5 p[0][1], p(2,1)
5 6 p[1][0], p(1,2)
6 7
p[1][1], p(2,2)
7 8

Fig. 12 Example of multi-dimensional distribution (1)

XMP/C XMP/Fortran
0 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8
0 1
1 2
2 3
3 4 p[0][0], p(1,1)
4 5 p[0][1], p(2,1)
5 6 p[1][0], p(1,2)
6 7
p[1][1], p(2,2)
7 8

Fig. 13 Example of multi-dimensional distribution (2)

XMP/C XMP/Fortran
0 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8
0 1
1 2
2 3
3 4 p[0], p(1)
4 5 p[1], p(2)
5 6
p[2], p(3)
6 7
p[3], p(4)
7 8

Fig. 14 Example of multi-dimensional distribution (3)

When an asterisk is specified in a distribute directive as a distribution


format, the target dimension is “non-distributed.” In the following example, the
first dimension is distributed in a block manner and the second dimension is non-
distributed (Fig. 14).
XcalableMP Programming Model and Language 19

XcalableMP C
#pragma xmp nodes p[4]
#pragma xmp template t[10][10]
#pragma xmp distribute t[block][*] onto p
XcalableMP Fortran
!$xmp nodes p(4)
!$xmp template t(10,10)
!$xmp distribute t(*,block) onto p

2.4 align Directive

The align directive specifies that an array is to be mapped in the same way as a
specified template. In other words, an align directive defines the correspondence
of elements between an array and a template, and each of the array element is
allocated on the node where the corresponding template element is assigned.

a[i] / a(i) t[i] / t(i)

p[0], p(1)
p[1], p(2)
p[2], p(3)
p[3], p(4)

Fig. 15 Example of array alignment (1)

a[i][j] / a(j,i) t[i][j] / t(j,i)

p[0][0], p(1,1)
p[0][1], p(2,1)
p[1][0], p(1,2)
p[1][1], p(2,2)

Fig. 16 Example of array alignment (2)


20 H. Murai et al.

a[i][*] / a(*,i) t[i] / t(i)

p[0], p(1)
p[1], p(2)
p[2], p(3)
p[3], p(4)

Fig. 17 Example of array alignment (3)

a[i] / a(i) t[i][*] / t(*,i)

p[0], p(1)
p[1], p(2)
p[2], p(3)
p[3], p(4)

Fig. 18 Example of array alignment (4)

XcalableMP C
#pragma xmp nodes p[4]
#pragma xmp template t[8]
#pragma xmp distribute t[block] onto p
int a[8];
5 #pragma xmp align a[i] with t[i]
XcalableMP Fortran
!$xmp nodes p(4)
!$xmp template t(8)
!$xmp distribute t(block) onto p
integer :: a(8)
5 !$xmp align a(i) with t(i)

The array a is decomposed and laid out so that each element a(i) is colocated
with the corresponding template element t(i) (Fig. 15).
The align directive can also be used for multi-dimensional arrays (Fig. 16).
XcalableMP C
#pragma xmp nodes p[2][2]
#pragma xmp template t[8][8]
#pragma xmp distribute t[block][block] onto p
XcalableMP Programming Model and Language 21

int a[8][8];
5 #pragma xmp align a[i][j] with t[i][j]
XcalableMP Fortran
!$xmp nodes p(2,2)
!$xmp template t(8,8)
!$xmp distribute t(block,block) onto p
integer :: a(8,8)
5 !$xmp align a(j,i) with t(j,i)

The programmer can align an n-dimensional array with an m-dimensional


template for n > m (Fig. 17).
XcalableMP C
#pragma xmp nodes p[4]
#pragma xmp template t[8]
#pragma xmp distribute t[block] onto p
int a[8][8];
5 #pragma xmp align a[i][*] with t[i]
XcalableMP Fortran
!$xmp nodes p(4)
!$xmp template t(8)
!$xmp distribute t(block) onto p
integer :: a(8,8)
5 !$xmp align a(*,i) with t(i)

When an asterisk is specified as a subscript in a dimension of the target array


in the align directive, the dimension is “collapsed” (i.e. not distributed). In the
sample program above, the first dimension of the array a is distributed onto the
node array p while the second dimension is collapsed.
In XMP/C, a[0:2][:] will be allocated on p[0] while, in XMP/Fortran,
a(:,1:2) will be allocated on p(1).
The programmer also can align an n-dimensional array with an m-dimensional
template for n < m (Fig. 18).
XcalableMP C
#pragma xmp nodes p[2][2]
#pragma xmp template t[8][8]
#pragma xmp distribute t[block][block] onto p
int a[8];
5 #pragma xmp align a[i] with t[i][*]
XcalableMP Fortran
!$xmp nodes p(2,2)
!$xmp template t(8,8)
!$xmp distribute t(block,block) onto p
integer :: a(8)
5 !$xmp align a(i) with t(*,i)
Exploring the Variety of Random
Documents with Different Content
A luz vinha a proposito.
Um passo mais, e Gilliatt estaria em uma agua talvez sem fundo. As
aguas das cavas tem um tal resfriamento e uma paralysia tão subita,
que lá ficam muitas vezes os mais fortes nadadores.
Demais, não havia meio de subir e agarrar ás rochas entre as quaes
ficaria preso.
Gilliatt parou.
Á grota, donde elle sahira, ia ter a mesma saliencia estreita e
viscosa, especie de vulcão na muralha a pique. Gilliatt encostou-se á
muralha e olhou.
Estava n'uma grande cava. Tinha acima de si alguma cousa
semelhante ao interior de um craneo dissecado. E parecia dissecado
de fresco. As nervuras gotejantes das strias do rochedo imitavam na
abobada as fibras dentadas de uma bola. Por tecto, a pedra; por
assoalho, o mar; as ondas apertadas entre as quatro paredes da
grota, pareciam vastos ladrilhos fluctuantes. A grota estava fechada
por todos os lados. Nenhuma trapeira, nenhum respiradouro,
nenhuma fenda na parede. À luz vinha debaixo atravez da agua. Era
um resplendor tenebroso.
Gilliatt cujas pupillas se dilataram durante o trajecto obscuro do
corredor, distinguia tudo naquelle crepusculo.
Conhecia, por lá ter ido mais de uma vez, as cavas de Plenmont em
Jersey, o Croux-Maillé em Guernesey, as Boutiques em Jerk, assim
chamadas por causa dos contrabandistas que alli depunham as suas
mercadorias; nenhum desses maravilhosos antros era comparavel ao
quarto subterraneo e submarinho onde penetrára.
Gilliatt via diante delle, debaixo da vaga, uma especie de arcada
afogada. Essa arcada, ogiva natural, trabalhada pela onda, era
brilhante entre as suas duas columnas profundas e negras. Era por
aquelle portico submergido que entrava na caverna claridade do alto
mar. Luz estranha que vinha por um buraco na agua.
Essa claridade esvasava-se debaixo da agua como um largo leque e
repercutia no rochedo. Os raios rectilineos, cortados em longas fitas
negras, sobre a opacidade do fundo, clareando ou escurecendo de
uma anfractuosidade a outra, immilavam interposicões de laminas
de vidro. Havia luz, mas luz desconhecida. Já não era a nossa luz.
Podia-se crer que se estava em outro planeta. A luz era um enigma;
dissera-se o verde clarão da pupilla de uma sphynge. A cava figura o
interior de uma caverna enorme; a esplendida abobada era o
craneo, e a arcada era a bocca; não havia buracos dos olhos. A boca
engulindo e vomitando o flux e o reflux, aberta em pleno meio dia
exterior, bebia a luz e vomitava o amargor.
Certos entes, intelligentes e máos, assemelham-se a isto. O raio do
sol, atravessando aquelle portico obstruido de uma espessura
vidrenta da agua do mar, tornava-se verde como um raio de
Aldebaran. A agua, cheia dessa luz molhada, parecia esmeralda em
fusão. Um reflexo de agua-marinha de incrivel delicadeza tingia
brandamente toda a caverna.
A abobada com os seus lobulos quasi cerebraes e as suas
ramificações semelhantes a nervos, tinha um fraco reflexo de
chrysopraso. O chamalote da onda, reverberado no tecto,
decompunha-se e recompunha-se constantemente, alargando e
estreitando as suas rodas de ouro com um movimento de dansa
mysteriosa. Sahia dalli uma impressão espectral; o espirito podia
perguntar que preza ou que espera era aquella que fazia tão
alegremente aquelle magnifico filete de fogo vivo. Nos relevos da
abobada e nas asperidades da rocha pendiam longas e finas
vegetações banhando provavelmente as raizes atravez do granito em
alguma toalha de agua superior, e desbagando, nas pontas, uma
gota d'agua, uma perola. Essas perolas cahiarn no golphão com um
pequeno rumor. Todo esse conjuuto era inexprimivel. Não se podia
imaginar nada mais lindo nem mais lngubre.
Era alli o palacio da Morte, alegre.
XIII

O QUE SE VÊ E O QUE SE ENTREVÊ

Sombra que deslumbra, tal era aquelle sitio sorprehendente.


A palpitação do mar fazia-se sentir naquella cava. A oscillação
externa inchava e depremia a toalha de agua interior com a
regularidade de uma respiração. Cuidava-se vêr uma alma
mysteriosa naquelle grande diaphragma verde elevando-se e
abaixando-se em silencio.
A agua era magicamente limpida, e Gilliatt distinguia, em
profundezas diversas, estações immersas, superficie de rochas de
um verde carregado a mais e mais. Certas cavas obscuras eram
provavelmente insondaveis.
Dos dous lados do portico sub-marinho, esboços de cimbrios
abatidos, cheios de trevas, indicavam pequenas cavas lateraes,
pontos inferiores da caverna central, accessiveis talvez na época das
marés extremamente baixas.
Essas anfractuosidades tinham tectos em plano inclinado, em
angulos mais ou menos abertos. Pequenas plagas, descobertas pelas
excavações do mar, mergulhavam-se e perdiam-se debaixo dessas
obliquidades.
Longas hervas expessas, de mais de uma toeza, ondulavam debaixo
d'agua como um balancear de cabellos ao vento. Entreviam-se
florestas de sargaço.
Fóra d'agua, e dentro d'agua, toda a muralha da cava, de alto
abaixo, desde a abobada até ao desapparecimento no invisivel, era
tapetada dessas prodigiosas florescencias do oceano, tão raramente
viaveis ao olho humano, que os velhos navegadores hespanhóes,
chamaram praderias del mar. Expesso musgo, com todos os matizes
da azeitona, escondia e ampliava as exostosis de granito. De todos
os declives rompiam os delgados lóros lavrados do sargaço com que
os pescadores fazem barometros. O halito obscuro da caverna
agitava essas correas luzentes.
Debaixo dessas vegetações escondiam-se e mostravam-se ao
mesmo tempo, as mais raras joias do escrinio do oceano, os marfins,
as mitras, os elmos, as purpuras, os buzios, os strultiolarios, as
conchas univalvulas. As campanas de lapas, semelhantes a barracas
microscopicas, adheriam ao rochedo e grupavam-se em aldèas, em
cujas ruas rolavam as multivalvulas, esses escarabeos da vaga. Não
podendo os seixos de marisco entrar facilmente nessa grota, ahi se
refugiavam as conchas. As conchas são grandes fidalgos que,
bordados e paramentados, evitam o rude e incivil contacto do
populacho das pedras. A fulgida reunião das conchas fazia debaixo
d'agua, em certos lugares, ineffaveis irradiações atravez das quaes
entrevia-se um grupo de azues e vermelhos, e todos os reflexos da
agua.
Na parede da caverna, um pouco ácima da linha de flutuação da
maré, uma planta magnifica e singular, prendia-se como um debrum
á tapeçaria do sargaço, continuava-o e terminava-o. Essa planta,
fibrosa, vasta, inextrincavelmente dobrada, e quasi negra, offerecia
ao olhar largas toalhas embaraçadas e obscuras, ornadas em toda a
extensão de numerosas florinhas côr de lapiz lazuli. Na agua parecia
que essas flôres accendiam-se, e cuidava-se vêr brazas azues. Fóra
da agua eram flôres, dentro da agua eram saphyras, de modo que a
onda, subindo e innundando o esvazamenlo da grota, revestia essas
plantas e cobria o rochedo de carbunculos.
A cada enchimento da vaga tumida como um pulmão, essas flôres
banhadas, resplandeciam, a cada abaixamento apagavam-se;
melancolica semelhança com o destino. Era a aspiração, que é a
vida; era a expiração que é a morte.
Uma das maravilhas daquella caverna era a rocha. Essa tocha, ora
muralha, ora cymbrio, ora pilastra, era em alguns lugares bruta e
nua, em outros trabalhada pelos mais delicados lavores naturaes.
Um não sei quê, aliás de espirito, misturava-se á estupidez massiça
da pedra. Que artista não é o abysmo! Tal pedaço de parede,
cortado em quadro e cheio de altos e baixos, representando
attitudes, figurava um vago baixo-relevo; ante essa esculptura, em
que havia um tanto de nuvem, podia-se sonhar com Prometteo
esboçando para Miguel Angelo. Parecia que com alguns toques de
cinzel o genio poderia acabar o que o gigante começara. Em outros
lugares a rocha era embutida como um broquel sarraceno ou
traçada como uma florentina. Tinham almofadas que pareciam
bronze de Corintho, arabescos como uma porta de mesquita; como
uma pedra runica tinha signaes de unha obscuros e improvaveis.
Plantas com ramos torcidos em forma do verruma, cruzando-se no
dourado do musgo, cobriam-na filagranas. Era um antro e uma
alhambra. Era o encontro da selvageria e da ourivesaria na augusta
e disforme architectura do acaso.
O magnifico bolor do mar avelludava os angulos do granito. As
pedras estavam adornadas de lianas grandi-flôres, tão destras que
não cahiam, e pareciam intelligentes tão bem adornavam ellas.
Parietarias com estranhos ramalhetes mostravam os seus tuffos a
proposito e com gosto. Havia alli a casquilhice possivel numa
caverna. A sorprehendente luz edenica que vinha debaixo d'agua, a
um tempo penumbra marinha e radiação paradisiaca, esfumava
todos os lineamentos em uma especie de diffusão visionaria. Cada
vaga era um prisma. O contorno das cousas debaixo desses
ondeamentos iriados tinha o chrosmatismo das lentes d'optica
demasiado convexas; spetros solares fluctuavam debaixo da agua.
Acreditar-se-hia ver torcer-se nessa diaphaneidade auroreal pedaços
de arco-iris afogados. Em outros lugares havia nagua um certo luar.
Todos os esplendores pareciam amalgamados alli para fazer um quê
de cego e de nocturno. Nada mais impossivel e enigmatico do que
aquelle fasto naquella cava. O que dominava alli era o encanto. A
vegetação phantastica e a stratificação informe acordavam-se e
compunham uma harmonia. Era de bello effeito aquelle consorcio de
cousas medonhas. Penduravam-se as ramificações parecendo
apenas tocar de leve. Era profundo o affago da rocha selvagem e da
flôr ruiva.
Pilares massiços tinham por capiteis e por ligaduras, frageis e
tremulas grinaldas; parecia ver-se dedos de fada fazendo cocegas
nas patas de um hypopotamo, e o rochedo sustentava a planta e a
planta abraçava o rochedo com uma graça monstruosa.
Resultava dessa difformidade mysteriosamente ajustada uma belleza
soberana. As obras da natureza, não menos supremas que as obras
do genio, contém o absoluto e impoem-se. O inesperado dellas faz-
se obedecer imperiosamente pelo espirito; sente-se uma
premeditação que fica fora do homem, e ellas não são mais
sorprehendentes do que quando fazem subitamente sahir o delicado
do terrivel.
Aquella grota estava por assim dizer, e se tal expressão é admissivel,
sederalisada. Sentia-se alli o imprevisto do espanto. O que enchia
aquella crypta, era luz do apocalypse. Não havia certeza de que
aquillo existisse. Tinha-se diante dos olhos uma realidade cheia de
impossivel. Olhava-se isto, tocava-se, presenciava-se; mas era difficil
crer.
Era luz aquillo que jorrava daquella janella debaixo d'agua? Era agua
aquillo que tremia naquella bacia obscura? Aquelles cimbrios e
porticos não eram nuvem celeste imitando uma caverna? Que pedra
era aquella que se pisava? Aquelle apoio não ia desconjuntar-se e
tornar-se fumo? Que joalheria de conchas era aquella que se
entrevia? Que distancia havia dalli á vida, á terra, aos homens? Que
encanto era aquelle misturado áquellas trevas? Commoção inaudita,
quasi sagrada, á qual misturava-se a doce inquietação das hervas no
fundo d'agua.
Na extremidade da cava, que era oblonga, debaixo de uma
archivolta cyclopica singularmente correcta, em um buraco quasi
indistinto, especie de antro no antro, especie de tabernaculo no
sanctuario, atraz de uma toalha de luz verde, interposta como um
véo de templo, descobria-se fora d'agua uma pedra de angulos
cortados em quadro com uma parecença de altar. A agua
circumdava essa pedra. Parecia que uma deusa tinha descido d'alli.
Era impossivel deixar de pensar, debaixo d'aquella crypta, em cima
daquelle altar, em alguma nueza celeste eternamente pensativa, que
a entrada de um homem tinha feito fugir. Era difficil conceber
aquella celula augusta sem uma visão dentro della; a apparição,
evocada pelo devaneio, recompunha-se por si; um rorejar de casta
luz sobre espaduas apenas entrevistas, uma fronte banhada de
alvores, um oval de rosto olympico, uns mysteriosos seios
arredondados, uns braços pudicos, uma coma esparra em uma
aurora, uns quadris ineffaveis modelados em luz pallida, no meio da
sagrada bruma, umas fórmas de nympha, um olhar de virgem, uma
Venus sahindo do mar, uma Eva sahindo do cahos; tal era o sonho
que forçosamente assaltava a imaginação. Era inverosimil que não
estivesse antes um phantasma naquelle lugar. Uma mulher nua, com
um astro em si, devia provavelmente ter occupado aquelle altar.
Sobre aquelle pedestal, d'onde emanava um estasis inexprimivel,
imaginava-se uma alvura, viva e de pé. O espirito creava, no meio
da adoração muda daquella caverna, uma Amphitrite, uma Tethys,
alguma Diana que podesse amar, estatua do ideal formada de um
raio e contemplando a sombra com meiguice. Foi ella quem, ao
esquivar-se, deixou na caverna aquella claridade, especie de
perfume—luz sahido daquelle corpo-estrella. A fascinação daquelle
fantasma já não estava alli; já se não via a figura, feita para ser vista
sómente pelo invisivel, mas sentia-se; recebia-se aquelle
estremecimento que é uma volupia. A deosa estava ausente, mas a
divindade estava presente.
A bellesa do antro parecia feita para aquella presença. Era por causa
dessa deidade, dessa fada dos nacares, dessa rainha das brisas,
dessa graça nascida das vagas, era por causa delia, ao menos
suppunha-se isto, que o subterraneo estava religiosamente murado,
afim de que nada perturbasse nunca, em derredor daquelle divino
fantasma, a obscuridade que é um respeito, o silencio que é uma
magestade.
Gilliatt, que era uma especie de vidente da naturesa, scismava,
confusamente commovido.
De subito, alguns palmos abaixo delle, na transparencia encantadora
daquella agua, que eram pedras preciosas dissolvidas, Gilliatt vio
alguma cousa inexprimivel. Uma especie de longo andrajo movia-se
na oscillação das vagas. Esse andrajo não fluctuava, vogava; tinha a
fórma de um sceptro de truão com pontas; essas pontas tinham
reflexos; parecia que uma poeira impossivel de molhar-se cobria
aquelle todo. Era mais que horrivel, era nojento. Tinha um quê de
chimerico; era um ente, a menos que não fosse uma apparencia.
Parecia dirigir-se para o obscuro da cava e mergulhava-se alli. As
espessuras da agua tornaram-se sombrias sobre aquella cousa que
resvalou e desappareceu, sinistra.

LIVRO SEGUNDO

O trabalho

OS RECURSOS DAQUELLE QUE NÃO TEM RECURSOS

A cava não soltava facilmente quem lá ia. A entrada era pouco


commoda, a sahida foi ainda peior. Gilliatt entretanto safou-se, mas
não voltou lá. Nada encontrou do que procurava, e não tinha tempo
para ser curioso.
Poz immediatamente a forja em actividade. Faltava ferramenta,
Gilliatt fabricou-a.
Tinha por combustivel os destroços, a agua por motor, o vento por
folles, uma pedra por bigorna, por arte o instincto, por força a
vontade.
Gilliatt entrou ardentemente nesse trabalho sombrio.
O tempo mostrava-se complacente. Continuava bello, e o menos
equinoxial possivel. Chegára o mez de Março, mas tranquillamente.
Os dias tornavam-se compridos. O azul do céo, a vasta doçura dos
movimentos da extensão, a serenidade do meio dia, pareciam excluir
qualquer intensão má. Alegrava-se o mar debaixo do sol. Um affago
previo tempera as traições. A agoa marinha não é avara desses
affagos. Com aquella mulher é preciso desconfiar do sorriso.
Havia pouco vento; a hydraulica soprava bem. O excesso do vento
tolheria em vez de ajudar.
Gilliatt tinha uma serra; fabricou uma lima; com a serra attacou a
madeira, com a lima, o metal; depois ajuntou as duas mãos do
ferreiro, uma tenaz e uma pinça: a tenaz agarra, a pinça maneja;
uma trabalha como a mão, a outra como o dedo. A ferramenta é um
organismo. A pouco e pouco Gilliatt arranjava auxiliares, e construia
as suas armaduras. Com um pedaço de ferro em folha fez uma
anteparo na forja.
Um dos seus primeiros cuidados foi a separação e a reparação das
roldanas. Concertou as caixas e as rodas das polés. Cortou a
exfoliação de todos os barrotes quebrados e aplainou as
extremidades; como dissemos, tinha para as necessidades da
carpintaria, grande cópia de peças de madeira armazenadas, e
apparelhadas, segundo as formas, as dimensões e as essencias, o
carvalho de um lado, o pinheiro do outro, as peças curvas, como as
porcas, separadas das peças direitas, como as que ligam as
escotilhas. Era uma reserva de pontos de apoio e alavancas, de que
podia precisar em um momento dado.
Quem quer construir um guindaste deve munir-se de traves e polés
mas não basta isso, é preciso corda. Gilliatt restaurou os cabos e as
cordas. Estendeu as vellas rasgadas, e conseguio extrahir excellente
fio com que compoz uma sarja, e cirzio o cordoame. Mas essas
costuras eram sujeitas a apodrecer, era preciso empregar as cordas
e os cabos, Gilliatt apenas pôde fazer o massame sem ter alcatrão.
Concertou as cordas, concertou as correntes.
Pôde, graças á ponta lateral da bigorna, fazer aneis grosseiros, mas
solidos; com esses aneis, prendeu uns aos outros os pedaços de
corrente quebrados, e fez correntes compridas.
Forjar só, e sem auxilio, é mais do que incommodo. Comtudo Gilliatt
conseguio fazêl-o. É certo que só teve de trabalhar na forja, peças
de pequeno volume; podia meneal-as com uma mão, e martellar
com a outra.
Cortou em pedaços as barras de ferro redondas do lugar do
commando; forjou nas duas extremidades de cada pedaço, de um
lado uma ponta, do outro uma larga cabeça chata, e desse modo fez
grandes prégos de palmo e meio. Esses prégos, muito usados em
trabalhos maritimos, são uteis para fixar os páos nas pedras.
Porque motivo Gilliatt tomava todo este trabalho? Vêr-se-ha.
Teve de refazer muitas vezes o fio da machadinha e os dentes da
serra. Para a serra fabricou uma lima triangular.
Servia-se tambem do cabrestante da Durande. Quebrou-se a fateixa
da corrente. Gilliat fez outra.
Com ajuda da pinça e da tenaz, e servindo-se da faca como de um
virador emprehendeu desmontar as duas rodas do navio; conseguio.
É preciso não esquecer que isso era exequivel; essa era a
particularidade da construcção das rodas. As caixas que as tinham
coberto, serviram-lhes de capas; com as taboas das caixas, Gilliatt
arranjou dous caixotes onde metteu peça por peça, as duas rodas
cuidadosamente numeradas.
O pedaço de giz servio-lhe para essa numeração.
Arranjou os dous caixotes na parte mais solida do convez da
Durande.
Terminados estes preliminares, Gilliatt achou-se diante da
difficuldade suprema. Surgio a questão da machina.
Desmontar as rodas foi possivel; desmontar a machina, não.
Primeiramente, Gilliatt conhecia mal aquelle mecanismo.
Trabalhando ao acaso, podia produzir algum desconcerto irreparavel.
Depois, mesmo para tentar desmontal-a peça por peça, se tivesse
esta imprudencia, eram-lhe precisas outras ferramentas do que as
que elle podia fazer n'uma caverna por officina, com o vento por
folles, e uma pedra por bigorna. Tentando desmontar a machina
arriscava-se a despedaçal-a.
Aqui podia-se crêr que estava diante do impraticavel.
Affigurou-se-lhe que estava ao pé deste muro: o impossivel.
Que fazer?

II

DE QUE MODO SHAKESPEARE PODE ENCONTRAR-SE COM ESCHYLO

Gilliatt tinha uma idéa.


Desde aquelle carpinteiro de Salbris que, no VI seculo, na infancia
da sciencia, muito antes que Amoutons tivesse achado a primeira
fricção, Labire a segunda, e Coulomb a terceira, sem conselho, sem
guia, sem mais auxiliar que um menino, filho delle, com uma
ferramenta informe, resolveu em massa, arreando o grande relogio
da igreja de Charité-Sur-Loire, cinco ou seis problemas de statica e
de dynamica, todos juntos, como as rodas de carros embaraçados;
desde esse trabalhador extravagante que achou meio de, sem
quebrar um fio de latão e sem desfazer um encaixe, arrear de uma
só vez, por uma simplificação prodigiosa, do segundo andar da torre
ao primeiro, aquella massiça gaiola de horas, toda de ferro e cobre,
grande como uma guarita, com o seu movimento, cylindros,
tambores, ganchos, mostrador, pendula horisontal, ancoras de
escapamento, meada de corda, pesos de pedra dos quaes um
pesava quinhentas libras, tympano, carrilhão; desde esse homem
que fez esse milagre, e cujo nome já se não sabe, jámais houve
nada igual á empreza que Gilliatt commettia.
A operação de Gilliatt era talvez peior, isto é, mais bella ainda que a
outra.
O peso, a delicadeza, o conjuncto das difficuldades, não eram
menores na machina da Durande que no relogio de Charité-Sur-
Loire.
O carpinteiro gothico tinha um auxiliar, o filho; Gilliatt era só.
Havia uma população, vinda de Menug-Sur-Loire, de Nevers, e
mesmo de Orleans, a qual podia, em caso de necessidade, ajudar o
carpinteiro de Salbris, e animal-o com os seus rumores benevolos;
Gilliatt só tinha á roda de si o rumor do vento e a multidão das
ondas.
Nada se compara á timidez da ignorancia, a não ser a sua
temeridade. Quando a ignorancia começa a ousar é que tem uma
bussola comsigo. Essa bussola é a intuição da verdade, mais clara ás
vezes num espirito simples que n'um espirito complicado.
Ignorar convida a tentar. A ignorancia é um devaneio, e o devaneio
curioso é uma força. Saber, desconcerta ás vezes, e desaconselha
muitas. Se Vasco da Gama soubesse recuára ante o Cabo das
Tormentas. Se Christovão Colombo fosse bom cosmographo não
teria descoberto a America.

O segundo que subio ao Monte Branco foi um sabio, Saussure; o


primeiro foi um pastor, Balmat.
Taes casos, digamol-o de passagem, são a excepção, e tudo isto não
tira nada á sciencia, que fica sendo a regra. O ignorante póde achar,
só o sabio inventa.
A pança continuava a estar ancorada na angra do Homem, onde o
mar a deixava tranquilla. Gilliatt, como se sabe, arranjou tudo de
modo a ficar em livre pratica com a barca. Foi alli e mediu-a em
diversos pontos. Depois voltou á Durande e mediu o grande
diametro da machina. O grande diametro, sem as rodas, bem
entendido, era mais curto dous pés que o espaço da pança.
Portanto, a machina podia entrar na barca.
Mas como metel-a ahi?

III

A OBRA PRIMA DE GILLIATT AJUDA A OBRA PRIMA DE LETHIERRY

Alguns dias depois, o pescador que fosse assaz tonto para ir


perlustrar aquellas paragens, em semelhante estação, teria pago a
sua ousadia com a visão de uma cousa singular entre as Douvres.
Veria isto o pescador: quatro roubustas pranchas com espaços
iguaes entre si, indo de uma Douvre á outra, e como que forçadas
entre os rochedos, o que é a melhor solidez deste mundo. Do lado
da pequena Douvre as suas extremidades pousavam e fincavam-se
nas fendas da rocha; do lado da grande Douvre, essas extremidades
deviam ter sido violentamente espetadas na columna com um
martello por um robusto trabalhador trepado na propria prancha.
Essas pranchas eram um pouco mais longas que o intervallo das
Douvres; dahi, a segurança e o plano inclinado em que estavam,
formando uma ladeira. Tocavam a grande Douvre em angulo agudo
e a pequena em angulo obtuso. Era suave o declive, mas desigual, o
que se tornava defeito. A essas quatro pranchas prendiam-se quatro
polés guarnecidas todas de corda e boça, e tendo esta singularidade
e ousadia, que a polé de rodas estava em uma extremidade da
prancha e a polé simples na extremidade opposta. Este desvio de
arte, tamanho que era perigoso, era provavelmente exigido pela
necessidade da operação. As polés compostas eram fortes e as
siraplices eram solidas. A essas prendiam-se cabos que de longe
pareciam fios, e por baixo desse aparelho aereo de guindastes e
taboas, o massiço casco da Durande parecia suspenso a esses fios.
Ainda não estava suspensa. Perpendicularmente por baixo das
pranchas, oito aberturas foram praticadas no casco, quatro a
bombordo e quatro a estibordo da machina, e mais oito debaixo
dessas, na carena. Os cabos desciam verticalmente, entravam no
convez, depois sahiam pela carena, pelas aberturas de estibordo,
passavam por baixo da quilha e da machina, entravam outra vez no
navio pelas aberturas de bombordo e subindo, atravessando, o
convez, voltavam a prender-se nos quatros guindastes das pranchas,
onde um guincho prendia-os e fazia um rolo de um cabo unico
podendo ser dirigido por um só braço. Um gancho e um carretel por
cujo centro passava e dividia-se o cabo unico completavam o
apparelho, e em caso de necessidade, continham-no. Esta
combinação obrigava as quatro polés a trabalharem juntas, e,
verdadeiro freio de forças pendentes, leme de dynamica na mão do
piloto da operação, mantinha a manobra em equilibrio. O
ajustamento engenhoso do guincho tinha alguma das qualidades
simplificadoras do guindaste Werton de hoje, e do antigo
polypastono de Vitruvio. Gilliatt descobrio isso, sem conhecer
Vitruvio, que já não existe, nem Werton, que não existia ainda. O
comprimento dos cabos variava segundo o desigual declive das
pranchas, e corrigia um pouco a desigualdade. As cordas eram
perigosas, o maçame branco podia quebrar; era melhor empregar
correntes, finas as correntes não poderiam passar com facilidade nas
polés.
Tudo isso, cheio de defeitos, mas feito por um só homem, era
sorprehendente.
De mais, abreviemos a explicação. Comprehender-se-ha que
ommittimos muitos pormenores que tornariam a cousa clara para as
pessoas do officio, e obscura para as outras.
O cimo do cano da machina passava por entre as duas pranchas do
meio.
Gilliatt, sem dar por isso, plagiario inconsciente do desconhecido,
refez, a tres seculos de distancia, o mechanismo do carpinteiro de
Salbris, mechanismo rudimentario e incorrecto, assustador para
quem ousasse manobral-o.
Digamos aqui que os defeitos mais grosseiros não impedem que um
mechanismo funccione. O obelisco da praça de S. Pedro de Roma foi
levantado contra todas as regras da statica. O coche do czar Pedro
era construido de tal modo que parecia tombar a cada passo;
entretanto andava. Quantas difformidades na machina de Marly.
Tudo alli era mal feito. Nem por isso deixou de dar de beber a Luiz
XIV.
Fosse como fosse, Gilliatt tinha confiança. Contava até com o
successo ao ponto de fixar na borda da pança, no dia em que lá foi,
dous pares de argolas de ferro, diante um do outro, nos dous lados
da barca, nos mesmos espaços que as quatro argolas da Durande ás
quaes se prendiam as quatro correntes do cano.
Gilliatt tinha evidentemente um plano muito completo e definitivo.
Tendo contra si todas as probabilidades, queria pôr todas as
precauções do seu lado.
Fazia cousas que pareciam inuteis, signal de uma premeditação
attenta.
A sua maneira de proceder desviava um observador, e mesmo um
conhecedor.
Uma pessoa que o visse, por exemplo, com exforços inauditos e em
risco de quebrar o pescoço, pregar com um martello oito ou dez
grandes pregos que elle forjou, no esvasamento das duas Douvres,
na entrada da garganta do escolho, comprehenderia difficilmente o
motivo desses pregos, e perguntaria provavelmente porque razão
fazia todo aquelle trabalho.
Se visse Gilliatt medir o pedaço da amurada da prôa que ficára
pendurada, depois prender uma forte corda na borda superior desta
peça, cortar com um machado as madeiras deslocadas que a
retinham, arrastal-as fora da garganta, com auxilio da maré que
descia, e emfim prender laboriosamente com a corda essa pesada
massa de taboas e vigas, mais larga que a entrada da garganta, aos
prégos mettidos na base da pequena Douvre, o observador
comprehenderia menos ainda, e diria que, se Gilliatt quizesse para
facilidade da manobra, desempedir o intervallo das Douvres, bastava
deixar cahir aquelle pedaço de taboas na maré que o levaria á flor
d'agua.
Gilliatt provavelmente tinha lá as suas razões.
Gilliatt, para fixar os prégos na base das Douvres, tirava partido de
todas as fendas do granito, alargava-as quando era preciso, e mettia
ao principio tocos de páos, nos quaes introduzia depois os prégos.
Emboçou a mesma preparação nas duas rochas que se levantavam
n'outra extremidade do escolho, do lado de leste; guarneceu de
cavilhas de páo todos os buracos, como se as quizesse ter promptas
para receber ganchos; mas isso pareceu ser uma simples reserva,
porque Gilliatt não metteu prégos nessas fendas. Comprehende-se
que, por prudencia na sua penuria, elle não podia gastar materiaes
senão á proporção que tivesse necessidade, e no momento em que
a necessidade se manifestasse. Era mais uma complicação no meio
de tantas difficuldades.
Acabado um primeiro trabalho, surgia um segundo, Gilliatt passava
sem hesitar de um a outro e dava resolutamente esse pulo de
gigante.

IV

SUBRE

O homem que fazia estas cousas tornára-se medonho.


Gilliatt, naquelle trabalho multiplo, gastava todas as suas forças;
difficilmente as refazia.
Privações de uma parte, cançasso de outra, Gilliatt tinha
emmagrecido. Cresceram-lhe as barbas e cabellos. Excepto uma
camisa, todas as mais estavam em frangalhos. Tinha os pés nús, por
que o vento levára-lhe um sapato, e o mar o outro. Pedaços da
bigorna rudimentaria, e mui perigosa, de que se servia, tinham-lhe
feito nas mãos e nos braços pequenas chagas, salpicos de trabalho.
Essas chagas, mais esfoladuras que feridas, eram superficiaes, mas
irritadas pelo ar vivo e pela agua salgada.

Tinha fome, tinha sede, tinha frio.


O pichel de agua doce estava vasio. A farinha de centeio fôra já
comida ou empregada no trabalho. Restava-lhe um pouco de
biscouto.
Não tendo agua para molhal-o, Gilliatt quebrava-o com os dentes.
Dia a dia iam-lhe escasseando as forças.
Aquelle temivel rochedo esgotava-lhe a vida.
Beber, era uma questão; comer, era uma questão; dormir, era uma
questão.
Gilliatt comia quando apanhava algum marisco ou outro bichinho do
mar; bebia quando via um passaro descer a alguma ponta da rocha.
Trepava então e achava n'uma cava um pouco de agua doce. Bebia
depois do passaro, ás vezes ao mesmo tempo; porque as gaivotas já
estavam acostumadas a elle, e não fugiam quando elle se
approximava. Gilliatt, mesmo na maior fome não lhes fazia mal.
Sabemos que elle tinha a superstição dos passaros. Os passaros,
como os cabellos de Gilliatt estivessem eriçados e horriveis, e a
barba longa, já lhe não cobravam medo; a mudança do aspecto
tranquillisava-os; já não viam naquillo um homem, acreditavam-n'o
bicho.
Os passaros e Gilliatt eram agora bons amigos. Todos aquelles
pobres ajudavam-se uns aos outros. Emquanto Gilliatt teve centeio,
deu-lhes algumas migalhas dos bolos que fazia; agora os passaros
indicavam-lhe em que lugar havia agua.
Comia as conchas cruas; as conchas, em certa proporção, são
refrigerantes. Quanto aos caranguejos cosia-os; não tendo vasilha
propria, cosia-os entre duas pedras abrasadas ao fogo, como os
selvagens das ilhas Feroe.
Declarou-se entretanto um pouco de equinoxio; veio a chuva; mas
chuva hostil. Nem ondas, nem aguaceiros, mas longos choviscos,
finos, gelados, que, atravessavam-lhe a roupa até á pelle, e a pelle
até os ossos. Era chuva que dava pouco de beber e molhava muito.
Avara de auxilio, prodiga de miseria, tal era aquella chuva, indigna
do céo. Gilliatt apanhou-a toda, durante uma semana, de noite e de
dia. Era uma má acção lá de cima.
De noite, no seu buraco do rochedo, só dormia por cançasso. Os
grandes mosquitos do mar iam morde-lo. Acordava coberto de
pustulas.
Tinha febre, que o sustentava; a febre é um amparo, que mata.
Mastigava, por instincto, o musgo ou chupava as folhas de
cochlearia selvagem, magras producções das fendas seccas do
rochedo. Mas occupava-se bem pouco com o soffrimento. Não tinha
tempo de distrahir-se do trabalho para cuidar de si. A machina da
Durande estava de saude. Era o que bastava.
A cada momento, para as necessidades do trabalho, Gilliatt atirava-
se ao mar, depois tomava pé. Entrava na agua e sahia, como se
passa de um quarto a outro.
As roupas já lhe não seccavam. Estavam embebidas da agua da
chuva que não parava, e da agua do mar que não secca nunca.
Gilliatt vivia molhado.
Viver molhado é um habito que se adquire. Os pobres grupos
irlandezes, velhos, mães, raparigas quasi nuas, crianças, que
passara o inverno debaixo de aguaceiros e neve, apertados uns
contra os outros nos angulos das casas nas ruas de Londres, vivem
e morrem molhados.
Estar molhado e ter sede; Gilliatt supportava essa tortura extranha.
De quando em quando mordia a manga da japona.
O fogo que elle accendia não o aquecia; o fogo no meio de um
grande espaço arejado é um meio soccorro; secca-se de um lado,
humedece-se de outro.
Gilliatt suava e tiritava.
Tudo lhe resistia em roda delle numa especie de silencio terrivel. Elle
sentia o inimigo.
As cousas tem um sombrio Non possumus.
A inercia dellas é uma lugubre advertencia.
Immensa má, vontade cercava Gilliatt. Estava cheio de queimaduras
e tinha arrepios de frio. Queimava-o o fogo, gelava-o a agua, a sêde
causava-lhe febre, o vento rasgava-lhe a roupa, a fome minava-lhe o
estomago. Elle supportava a oppressão era um conjuncto fatigante.
O obstaculo, tranquillo, vasto, tendo a irresponsabilidade apparente
da fatalidade, mas cheio de uma unanimidade feroz, convergia de
todas as partes sobre Gilliatt. Gilliatt sentia-o apoiado
inexoravelmente sobre elle. Nenhum meio de escapar-lhe. Era quasi
uma entidade. Gilliatt tinha consciencia de um desprezo sombrio e
de um odio que fazia esforço por diminui-lo. Dependia delle fugir,
mas, pois que ficava, tinha de lutar com a hostilidade impenetravel.
Não podendo po-lo fóra d'alli, punham-n'o debaixo dos pés. Quem?
O Ignoto. Apertavam-n'o, comprimiam-n'o, tiravam-lhe lugar e
alento. Estava abatido pelo invisivel. Cada dia, a mysteriosa verruma
entrava um pedaço.
A situação de Gilliatt naquelle medonho lugar assemelhava-se a um
duelo equivoco com um traidor.
Cercava-o a coalição das forças obscuras. Elle sentia uma resolução
de alguem para expulsal-o dalli. É assim que a geleira expelle a
massa erratica.
Quasi sem parecer que o tocava, essa coalição latente punha-o em
farrapos, cheio de sangue, falho de recursos, e por assim dizer, fóra
de combate antes do combate. Nem por isso deixava elle de
trabalhar, e sem cessar, mas á proporção que a obra se fazia, ia-se
desfazendo o operario, Dissera-se que aquella feroz natureza,
receiando a alma, resolvera-se a extenuar o homem. Gilliatt
affrontava, e esperava. O abysmo começava por cançalo. Que faria
depois o abysmo?
A dupla Douvres, dragão de granito e emboscado em pleno mar,
admitira Gilliatt. Deixou-o entrar e trabalhar. A admissão
assemelhava-se á hospitalidade de um sorvedouro aberto.
O deserto, a extenção, o espaço onde ha para o homem tantos
recursos, a inclemencia muda dos phenomenos seguindo o seu
curso, a grande lei geral implacavel e passiva, o flux e o reflux, o
escolho, pleiada negra onde cada ponto é uma estrella de turbilhões,
centro de uma irradiação e correntes, a conspiração da indifferença
das cousas contra a tenacidade de um ente, o inferno, as nuvens, o
mar sitiante, cercavam Gilliatt, apertavam-n'o lentamente, fechavam-
se sobre elle, e o separavam dos vivos, como um carcere que fosse
subindo á roda de um homem. Tudo contra elle, nada a favor delle;
estava isolado, abandonado, minado, esquecido.
Gilliatt tinha esgotado as provisões, as ferramentas já estavam
usadas, a sede e a fome de dia, o frio de noite, feridas e andrajos,
vestidos rotos cobrindo suppurações, buracos nas roupas e na carne,
mãos dilaceradas; pés sangrentos, membros magros, rosto livido,
uma flamma nos olhos.
Flamma soberba essa, era a vontade visivel. O olho do homem é
feito de modo que se lhe vê por elle a virtude. A nossa pupilla diz
que quantidade de homens ha dentro de nós. Affirmamo-nos pela
luz que fica debaixo da sobrancelha. As pequenas consciencias
piscam o olho, as grandes lançam raios. Se não ha nada que brilhe
debaixo da palpebra, é que nada ha que pense no cerebro, é que
nada ha que ame no coração. Quem ama quer, e aquelle que quer
relampeja e scintilla. A resolução enche os olhos de fogo; admiravel
fogo que se compõe da combustão dos pensamentos timidos.
Os teimosos são os sublimes. Quem é apenas bravo tem só um
assomo, quem é apenas valente tem só um temperamento, quem é
apenas corajoso tem só uma virtude; o obstinado na verdade tem a
grandeza. Quasi todo o segredo dos grandes corações está nesta
palavra:—Perseverando. A perseverança está para a coragem como
a roda para a alavanca; é a renovação perpetua do ponto de apoio.
Esteja na terra ou no céo o alvo da vontade, a questão é ir a esse
alvo; no primeiro caso, é Colombo, no segundo caso, é Jesus.
Insensata é a cruz; vem dahi a sua gloria. Não deixar discutir a
consciencia, nem desarmar a vontade, é assim que se obtem o
soffrimento e o triumpho. Na ordem dos factos moraes o cahir não
exclue o pairar. Da queda sabe a ascenção. Os mediocres deixam-se
perder pelo obstaculo especioso; não assim os fortes. Parecer é o
talvez dos fortes, conquistar é a certeza delles. Pódes dar a Estevão
todas as boas razões para que elle não se faça apedrejar. O desdem
das objecções razoaveis crêa a sublime victoria vencida que se
chama o martyrio.
Todos os esforços de Gilliatt pareciam agarrados ao impossivel, o
exito era mesquinho ou lento, e cumpria gastar muito para obter
pouco; isso é que o fazia magnanimo, isso é que o fazia pathetico.
Que para fazer um andaime de quatro pranchas acima de um navio
naufragado, para cortar nesse navio a parte que se podia salvar,
para ajustar a esse resto dos restos quatro guindastes com os seus
cabos, fossem precisos tantos preparativos, tantos trabalhos, tantas
apalpadellas, tantas noites mal dormidas, tantos dias afadigados,
essa era a miseria do trabalho solitario. Fatalidade na causa,
necessidade no effeito. Gilliatt fez mais do que aceitar essa miseria;
quil-a. Temendo um concurrente, porque um concurrente poderia
ser um rival, não procurou auxiliar. A esmagadora empreza, o risco,
o perigo, o trabalho multiplicado por si mesmo, o engolimento
possivel do salvador no salvamento, a fome, a febre, a nudez, o
abandono, tudo isso tomou elle para si só. Teve este egoismo.
Gilliatt estava debaixo de uma especie de machina pneumatica. A
vitalidade ia-se retirando delle a pouco e pouco. E elle mal o sentia.
A perda das forças não esgota a vontade. Crer é apenas a segunda
potencia; a primeira é querer; as montanhas proverbiaes que a fé
transporta nada valem ao lado do que a vontade produz. O que
Gilliatt perdia em vigor, rehavia em tenacidade. A diminuição do
homem physico debaixo da acção repellente daquella natureza
selvagem produzia o engrandecimento do homem moral.
Gilliatt não sentia a fadiga, ou para melhor dizer, não consentia nella.
O consentimento da alma recusado ao desfalecimento do corpo é
uma força immensa.
Gilliatt via os progressos do trabalho, e não via nada mais. Era
miseravel sem sabel-o. O seu alvo, que elle tocava quasi, allucinava-
o, soffria todos os soffrimentos sem ter outra idéa que não fosse
esta: Avante! A sua obra subia-lhe á cabeça. Vontade embriagada. O
homem póde embriagar-se com a propria alma. Essa embriaguez
chama-se heroismo.
Gilliatt era uma especie de Job do Oceano.
Mas um Job que lutava, um Job que combatia e affrontava os
flagellos, um Job que conquistava, e se taes palavras não são
demasiado grandes para um pobre marinheiro pescador de
carangueijos A de lagostas, um Job Prometheu.

SUB UMBRA

Ás vezes, alta noite, Gilliatt abria os olhos e olhava para a sombra.


Sentia-se extremamente commovido.
Olhar aberto sobre trevas. Situação lugubre: anciedade.
Existe a pressão da sombra.
Inexprimivel tecto de tenebras; alta obscuridade sem mergulhador
possivel; luz mesclada á obscuridade, mas uma luz vencida e
sombria; claridade reduzida a pó; é semente? é cinza? milhões de
fachos, claridade nulla; vasta ignição que não diz o seu segredo,
uma diffusão de fogo em poeira que parece um bando de faiscas
paradas, a desordem do turbilhão e a immobilidade do sepulchro, o
problema offerecendo uma abertura de precipicio, o enigma
desvendando e escondendo a sua face, o infinito mascarado com a
escuridão, eis a noite. Pesa no homem esta superposição.
Esse amalgama de todos os mysterios a um tempo, do mysterio
cosmico e do mysterio fatal, abate a cabeça humana.
A pressão da sombra actúa em sentido inverso nas differentes
especies de almas. O homem diante da noite reconhece-se
incompleto. Vê a obscuridade e sente a enfermidade. O céo negro é
o homem cégo. Entretanto com a noite, o homem abate-se, ajoelha-
se, prostorna-se, roja-se, arrasta-se para um buraco, ou procura
azas. Quasi sempre quer fugir a essa presença informe do
desconhecido. Pergunta o que é; treme, curva-se, ignora; ás vezes
quer ir lá.
Aonde?
Lá.
Lá? O que é? Que ha lá?
Essa curiosidade é evidentemente a das cousas defezas, porque para
aquelle lado todas as pontes á roda do homem estão cortadas. Mas
o desejo attrahe, porque é golphão. Onde não vae o pé, vae o olhar,
onde o olhar pára, póde continuar o espirito. Não ha homem qne
não tente, por mais fraco e insufficiente que seja. O homem,
segundo a sua natureza, investiga ou espera diante da noite. Para
uns é um rechaçamento, para outros é uma dilatação. O espectaculo
é sombrio. Mescla-se a elle o indefinivel.
Vai a noite serena? É um fundo de sombra. Vai tempestuosa? É um
fundo de fumaça. O illimitado recusa-se e offerece-se ao mesmo
tempo, fechado à experiencia, aberto á conjectura. Infinitas picadas
de luz tornam mais negra a obscuridade sem fundo. Carbunculos,
scintillações, astros. Presenças verificadas no Ignorado; tremendos
reptos para ir tocar esses clarões. São estacas da creação no
absoluto; são marcos de distancia lá onde já não ha distancia; é
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

textbookfull.com

You might also like