Difference between revisions of "Compiler"

From HPC Wiki
Jump to navigation Jump to search
(Created page with "A Compiler is a computer program translating code from one language to another. == General == When people write programs (code), the usually employ a text editor and a high l...")
 
Line 4: Line 4:
 
When people write programs (code), the usually employ a text editor and a high level language like C/C++ or Fotran, to produce a code that looks somewhat like this:
 
When people write programs (code), the usually employ a text editor and a high level language like C/C++ or Fotran, to produce a code that looks somewhat like this:
  
<syntaxhighlight lang="c++">
+
[[File:Compiler_Shematic.png|thumb|1000px|Schematic of the compile process]]
#include <iostream>
 
using namespace std;
 
  
int main()  
+
<syntaxhighlight lang="c">
 +
#include<stdio.h>
 +
 
 +
int main()
 
{
 
{
    cout << "Hello, World!";
+
  printf("Hello, World!\n");
    return 0;
+
  return 0;
 
}
 
}
 +
 
</syntaxhighlight>
 
</syntaxhighlight>
  
This is easy to write, understand and maintain for humans. However, since a computer only understands 0s and 1s, this can not be executed directly. A Compiler tranlates this code into a binary file, which can be executed, producing the desired output
+
 
$ Hello, World!
+
This is easy to write, understand and maintain for humans. However, since a computer only understands 0s and 1s, this can not be executed directly. A Compiler tranlates this code into a binary file, which can be executed.
  
 
Fostering the advend of higher level programming languages, this significantly lowers the entry barrier into programming, and also facillitates the creation of more complex programs which can not (easily) be written just in terms of 0s and 1s by humans.
 
Fostering the advend of higher level programming languages, this significantly lowers the entry barrier into programming, and also facillitates the creation of more complex programs which can not (easily) be written just in terms of 0s and 1s by humans.
  
 +
== Basic Usage ==
 +
You usually use a compiler by calling it from the [[shell]]:
 +
$ cc hello_world.c -o hello_world.o
 +
where you feed it the file hello_world.c and let it create the binary output file hello_world.o, which you can then execute by calling
 +
$ hello_world.o
 +
producing the desired output
 +
Hello, World!
 +
 +
In most compilers there are optimization flags like -O2 (commonly ranging from 0 to 3), where the compiler tries to figure out, what your program is doing and whether there is more efficient way of doing that. This should be used, when you start finishing development and start using your programs productively, so that it runs as fast as possible.
  
 
== Intel Compiler ==
 
== Intel Compiler ==
The Intel Compiler (icc) is a compiler written by Intel and optimized to take utilize the features of their microprocessors to their fullest extend, sometimes resulting in a significant performance improvement.
+
The Intel Compiler (icc) is a compiler written by Intel and optimized to take utilize the features of their microprocessors to their fullest extend, sometimes resulting in a significant performance improvement. It is usually called with:
 +
$ icc [files] [options]
  
 
== Gnu Compiler Collection ==
 
== Gnu Compiler Collection ==
 
The Gnu Compiler Collection (gcc) is a free collection of compilers, originally written for the GNU operating system and now available on all major platforms.
 
The Gnu Compiler Collection (gcc) is a free collection of compilers, originally written for the GNU operating system and now available on all major platforms.
 +
It is usually called with:
 +
$ gcc [files] [options]
  
 
== LLVM ==
 
== LLVM ==

Revision as of 10:54, 21 March 2018

A Compiler is a computer program translating code from one language to another.

General

When people write programs (code), the usually employ a text editor and a high level language like C/C++ or Fotran, to produce a code that looks somewhat like this:

Schematic of the compile process
#include<stdio.h>

int main()
{
   printf("Hello, World!\n");
   return 0;
}


This is easy to write, understand and maintain for humans. However, since a computer only understands 0s and 1s, this can not be executed directly. A Compiler tranlates this code into a binary file, which can be executed.

Fostering the advend of higher level programming languages, this significantly lowers the entry barrier into programming, and also facillitates the creation of more complex programs which can not (easily) be written just in terms of 0s and 1s by humans.

Basic Usage

You usually use a compiler by calling it from the shell:

$ cc hello_world.c -o hello_world.o

where you feed it the file hello_world.c and let it create the binary output file hello_world.o, which you can then execute by calling

$ hello_world.o

producing the desired output

Hello, World!

In most compilers there are optimization flags like -O2 (commonly ranging from 0 to 3), where the compiler tries to figure out, what your program is doing and whether there is more efficient way of doing that. This should be used, when you start finishing development and start using your programs productively, so that it runs as fast as possible.

Intel Compiler

The Intel Compiler (icc) is a compiler written by Intel and optimized to take utilize the features of their microprocessors to their fullest extend, sometimes resulting in a significant performance improvement. It is usually called with:

$ icc [files] [options]

Gnu Compiler Collection

The Gnu Compiler Collection (gcc) is a free collection of compilers, originally written for the GNU operating system and now available on all major platforms. It is usually called with:

$ gcc [files] [options]

LLVM

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.

References

Video Explaining the Basic Idea of a Compiler

Intel Compilers

Gnu Compiler Collection (gcc)

LLVM Compiler Collection