-
Notifications
You must be signed in to change notification settings - Fork 29
/
RELEASE-4.2
444 lines (309 loc) · 15.8 KB
/
RELEASE-4.2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
Open64 Compiler Version 4.2 Release Notes
Sep 30, 2008
1. Overview
2. Features
2.1 Front End Features
2.2 Back End Features
3. The Packages of the Compiler Suite
4. Installing the Compiler Suite
4.1 Install from bz2 Package
4.2 Install from RPM packages
5. Build the compiler Suite - directly from source
5.1 Prerequisites
5.2 Build Steps
5.3 Build FORTRAN Front-End
5.4 Build the archives
5.5 Some Notes on Build
6. Bug Reporting
7. Known Problems, Limitation and Some Notes
8. Acknowledgements
1. Overview
=============
Open64 is an open source, optimizing compiler for multiple architectures.
Open64 supports Fortran 77/95/2003 and C/C++, as well as the shared memory
programming model OpenMP. Open64 derives from the SGI compilers for the MIPS
called MIPSPro. It was released under the GNU GPL in 2000. The initial release
of Open64 only supports Intel IA-64(Itanium). Now it has been extended to
generate code for CISC, RISC, VLIW architectures, including x86, MIPS, IA-64
and others.
The objective of the Osprey project is to bring the Open64 compiler
to that of a production quality compiler and catch up with the GCC/G++
features evolution. This release was merged with PathScale 3.2 release.
Thanks to this PathScale release, GCC 4.2 based FE is enabled and works
for IA64 also. We improved the performance, integrated many bug fixes
by leveraging efforts from PathScale, NVIDIA and SimpLight. We also
enhanced the scalability, capability and correctness of IPA.
It is worth noting that several new code generators and programming
system are integrated into this release, including CUDA from NVIDIA,
SL (a 32-bit multi-threaded architecture for embedded systems and DSP
in telecommunications) from SimpLight, MIPS (prototype) from ICT with
input from both PathScale and SimpLight.
The source code of the latest release and all previous archives can be
found in the subversion tree and it is readily available for researchers
and developers to join the development and incrementally check in changes.
The website for that is
http://www.open64.net/
The release consists of two kinds of packages: a suite of pre-built
compiler binaries including C, C++, F95 and related archives, and
a suite of corresponding compiler source codes. The pre-built compilers
are built using a self-build bootstrap process. They are provided both in
.bz2 and RPM packages. These files can be downloaded from sourceforge.net:
http://sourceforge.net/project/showfiles.php?group_id=34861
After this release, we will continue to update the GCC/G++ front end to the
latest version, improve the quality and scalability. Another important
focus after this release is further performance improvement to follow the
latest CPU and architecture evolution, especially for the multicore. Besides
this, Open64 based static analysis tool, runtime optimization framework,
security checking tool are highly expected.
We are looking forward for collaboration from the open source community
for this effort. The SVN source control and Bugzilla system are built up
to facilitate this. Our check-in testing will be continuously improved
to achieve the "check-in early and check-in fast with little to no impact
to overall quality" development environment.
For a more detailed description of the quality and performance of the compiler,
please visit Open64 website:
http://www.open64.net
2. Features
=============
2.1 Front End Features
-------------------
Open64 C/C++ Front End is based on GNU C/C++ Compiler (GCC). The C/C++ Front
End provides the compatibility with GCC from 3.x to latest 4.x. Open64 FORTRAN
Front End is based on CRAY-FORTRAN, which supports FORTRAN 77/95/2003 and CRAY
extensions.
In this release, we enabled the GCC 4.2.0 based FE to get better compatibility
with the latest GCC revision. Several bugs in previous GCC 3.3.1 and 4.0.2
based FE are also fixed.
Now the compiler contains three different GCC based front-ends:
o. GCC 3.3.1 based FE
Provides the compatibility with GCC 3.x
o. GCC 4.0.2 based FE
Provides the compatibility with GCC 4.0.x
o. GCC 4.2.0 based FE
Provides the compatibility with GCC 4.1.x and above
The right FE will be chosen automatically based on the version of the GCC
on the host. The command line options: '-gnu3', '-gnu40' and '-gnu42', can
be used to designate the FE explicitly.
We also improve the conformance of the FORTRAN Front End for new FORTRAN
2003 features:
o. Using 'intent' and 'pointer' attributes together
o. 'volatile' attribute and declaration
2.2 Back End Features
-------------------
Open64 Back End contains several optimizers and code generator.
o. Interprocedural Analyzer and Optimizer (IPA)
o. Loop Nest Optimizer (LNO)
o. Global Optimizer (WOPT)
The Code Generator (CG) can generate code for several targets, including
IA-64, IA-32 and x86_64 and others.
In this release, we reduced the memory footprint of IPA to get better
scalability to enable building large C++ application with IPA. Also, we enhanced
the IPA to handle mixed archives which may contains both WHIRL IR files
and object files. Several bugs to build shared libraries (.so) with IPA are
also fixed. Besides IPA, Some bugs in LNO, WOPT and CG are fixed.
We also introduced several performance improvements in BE.
o. Better loop vectorization and loop factorization from PathScale
o. New dead store elimination (DSE) algorithm from SimpLight
o. Improved prefetch efficiency for ix86 and x86_64 from PathScale
o. Improved instruction scheduling for ix86 and x86_64 from PathScale
o. Better tuning for both AMD and Intel new multicore CPU from PathScale
Several new targets were also supported in this release besides IA-64, x86
and x86_64:
o. SL (an embedded DSP architecture) code generation from SimpLight
o. CUDA code generation from NVIDIA
o. A MIPS code generation prototype from ICT based on input from PathScale
and SimpLight
3. The Packages of the Compiler Suite
=============
This compiler is available in both binary and source-code form for
different target machines.
o. open64-4.2-0.src.tar.bz2
This package contains the compiler's source code. It's machine independent.
o. open64-4.2-0.ia64.tar.bz2
This package contains all the binary code for ia64 machine including
pre-built library. The compiler is built on an Itanium2 based system with
kernel 2.6.18 and glibc 2.5. The OS is RHEL5 on IA64. The GCC version
is 4.1.1. The compiler is built twice for releasing. The first stage
is built by open64 4.1 at '-O2', then we use the compiler built in the
first stage to build the release compiler at '-O2'. The libraries are built
by the release compiler.
o. open64-4.2-0.i386.tar.bz2, open64-4.2-0.x86_64.tar.bz2
These two packages are the same; contain all the binary code for i386 and
x86_64 machines. The compiler is built on an IA32 based system with
kernel 2.6.18 and glibc 2.5. The OS is RHEL5 on IA32. The compiler is
built twice for releasing. The first stage is built by Open64 4.1 at '-O2',
then we use the compiler built in the first stage to build the release
compiler at '-O2'. The 32-bit libraries are built on the same
system by this compiler.
The 64-bit libraries are built on an RHEL5 x86_84 system by this compiler.
o. open64-4.2-0.i386.rpm, open64-4.2-0.x86_64.rpm, open64-4.2-0.ia64.rpm
These three packages are binaries rpm for different targets. The binaries
are the same in both bz2 and rpm packages. It's easier to install the
compiler from the rpm.
4. Installing the Compiler Suite
=============
4.1 Install from bz2 Package
-------------------
Before installing the compiler, the environment variable $TOOLROOT
should be set properly. As the name suggests, this variable specifies
the root of the installation hierarchy. You can set it to anywhere
you have write permission. For example, in GNU BASH this may be done
with the following command: may set this variable by adding this
command to the $HOME/.bash_profile file:
export TOOLROOT=$HOME/mycompiler
After that, run 'source $HOME/.bash_profile' to make the change effective.
Now, to complete the installation:
o. Expand open64-4.2-0-ia64.tar.gz with the command:
tar zxvf open64-4.2-0-ia64.tar.gz
o. Run script 'INSTALL.sh'
The C, C++, FORTRAN compilers are now available in folder
$TOOLROOT/bin. They are opencc, openCC, openf90 respectively.
4.2 Install from RPM Package
-------------------
To install the compiler from rpm:
$ rpm -ivh open64-4.2-0.ia64.rpm
This command will install the Open64 compiler to /opt/open64. The C, C++,
FORTRAN compilers are in folder /opt/open64/bin.
To install the compiler to another location:
$ rpm --prefix=/path/to/folder -ivh open64-4.2-0.ia64.rpm
Then the compiler will be installed to /path/to/folder
5. Build the compiler Suite - directly from source
=============
If you choose to build the compiler suite from the source tar ball,
follow the steps outlined below.
5.1 Prerequisites
-------------------
In order to compile Open64 successfully, your system should meet the
following requirements:
o. Linux OS on IA64/ix86/x86_64
Open64 as well as its variants have been successfully built on many UNIX
variants and UNIX-like systems. This release has only been tested extensively
on IA64/ix86/x86_64 running Linux operating systems. If you are going to
build it on any platform other than Linux on IA64/ix86/x86_64, you may need
to make some minor changes to the source code.
o. Miscellaneous Tools
To build the open64 compiler from source, these tools are needed:
awk, csh, bash, gmake, flex and bison
On some Ubuntu distributions, you need to set the environment variable
'SHELL' to '/bin/bash' or change the symbol link '/bin/sh' to '/bin/bash'
to make the shell scripts work.
o. GNU Compiler Collection
Currently, GCC 3.3.x through 4.1.x are supported. GCC 4.1.x is preferred.
o. An open64 binary for building the FORTRAN Front End
You can just download the Open64 binary for system and install it to
some place and make sure that openf90 is in your PATH before building
the FORTRAN Front End.
Intel Fortran Compiler (on IA64/IA-32/x86_64) or PathScale Fortran Compiler
(on IA-32/x86_64) can also be used to build the FORTRAN Front End.
5.2 Build Steps
-------------------
Follow these steps to build the compiler:
Step 1. Expand the source tarball
After that, the whole source hierarchy will be in directory rooted at
open64-4.2-0/. Change working directory to open64-4.2-0/.
Step 2. Build the compiler components by simply invoking command:
make or make V=1(V=1 will show all building information)
If you want to build a debuggable compiler, use this command instead:
make BUILD_OPTIMIZE=DEBUG
Note that, if you type "make", it will only build the compiler's source
code by default it won't build the necessary libraries. If you want to
build them by yourself, type
make library
The default FORTRAN compiler in source code is openf90. If the openf90 is
not in the PATH, the FORTRAN front end will not be built. During the
installation, the pre-built version will be picked up. Then, we can use
it to build the FORTRAN front end again.
Developers may find this command handy in building individual component,
say wopt.so:
make BUILD_OPTIMIZE=DEBUG wopt.so
step 3. Set environment variable TOOLROOT to anywhere you have write
permission as detailed in section 3.
If you do not want to use $TOOLROOT, just skip this step.
step 4. Call 'make install' or 'install_compiler.sh' to install
all compiler components and archives.
If $TOOLROOT is set, the compiler will be installed to that folder.
Otherwise, a path will be prompted.
The C, C++, FORTRAN compilers are now available in folder
$TOOLROOT/bin/
They are opencc, openCC, openf90 respectively.
People interested in building the compiler for CUDA or SL should contact
NVIDIA or SimpLight directly.
5.3 Build FORTRAN Front-End
-------------------
The FORTRAN front-end executable is provided in both binary and source
packages. Normally, you need *NOT* to build it by yourself. If you are
going to build one, make sure that an Openf90 is already in your $PATH
(you need to download a binary form and install it somewhere).
Then just type:
make mfef95.
The Makefile will use a pre-hand openf90 to build the new mfef95 for you.
5.4 Build the archives
-------------------
The archives required by Open64 are provided in both binary and source
packages. Normally, you need *NOT* to build it by yourself. These libraries
can be built by Open64. Add $TOOLROOT/bin into your $PATH and type:
make BUILD_COMPILER=OSP lib
Then, you can follow the step 3 and step 4 in section 5.2 to install these
archives.
5.5 Some Notes on Build
-------------------
o. The compiler is built with flag '-Werror' which treats warnings as error.
If the build process terminates due to warnings, you can get around this
with:
make ... ERROR_ON_WARNINGS="" ...
i.e. simply repeat the make process with ERROR_ON_WARNINGS="".
6. Bug Reporting
=============
You are WELCOME to report bugs. The bugs tracked at
http://bugs.open64.net/.
Bug reports should include these items in order to be reproduced:
o. The compiler release version;
o. System details -- the OS, libc etc;
o. The compilation flags that trigger the bug;
o. The test file if applicable (it is highly appreciated if the test file
is minimized);
o. The correct output of the test file.
7. Known Problems, Limitation and Some Notes
=============
o. Currently, we built the compiler *ONLY* on Linux/IA64, x86_64, i386.
'make cross' is supposed to be used to build the cross compiler on
Linux/IA32 systems targeting IA64. However, we have not tested this
thoroughly.
o. On x86_64, Open64 can be built in either 32-bit or 64-bit. We find
several bugs in building 32-bit applications by 64-bit compiler. All
executables in Open64 4.2 binary release on x86_64 are 32-bit. These bugs
will be fixed in the next release.
o. Auto-Parallel Optimization (enabled by '-apo') has been implemented in the
compiler. But now it does not work. We will fix this problem in the next
release.
o. The perlbench benchmark in CPU2006 suite may not run successfully without
some changes to its source code on IA-64. It is *NOT* an Open64 bug.
The problem is with the perlbench benchmark itself. Please check the bug-81
(https://bugs.open64.net/) for details. This problem can be solved by
deleting following lines from file spec_config.h (of perlbench benchmark):
1172 #undef HASATTRIBUTE
1173 #ifndef HASATTRIBUTE
1174 #define __attribute__(_arg_)
1175 #endif
o. A full list of known bugs can be found in our bug database. You can visit
http://bugs.open64.net
to view them.
8. Acknowledgements
=============
This project is led by Shin-Ming Liu at HP Inc. It is the result of
partnership between these academies and companies:
o. Tsinghua University
o. CAPSL research laboratory at the University of Delaware
o. NVIDIA Inc.
o. SimpLight Nanoelectronics Inc.
o. Hewlett-Packard Inc.
o. Institute of Computing Technology (ICT) at the Chinese Academy of Science
We upgraded the GCC front end in Open64 by leveraging PathScale's effort.
We also got a lot of suggestions, bug fixes, especially the performance
enhancements from Fred Chow and others in PathScale Inc. Their help is
greatly appreciated.
Thanks all of the Pro64 developers, the ORC developers and ORC/Open64 users.
In this release, Cui Huimin at ICT did the prototype of MIPS retarget based on
input from PathScale and SimpLight.
The following individuals also contributed a lot to our previous releases:
o. Paul Yuan at Peking University