Pin (computer program)
Developer(s) Intel
Stable release 2.10 / November 2011, 28; 7 months ago  (28-11-2011)
Operating system Linux, Windows
Platform IA-32, x86-64
Type Instrumentation framework, Profiler
License Proprietary, free, but you cannot redistribute Pin or pintool binaries
Website www.intel.com/software/pintool

Pin is a dynamic binary instrumentation framework for the IA-32 and x86-64 instruction set architectures that enables the creation of dynamic program analysis tools. Some tools built with Pin are Intel Parallel Inspector, Intel Parallel Amplifier and Intel Parallel Advisor.

The tools created using Pin, called Pintools, can be used to perform program analysis on user space applications in Linux and Windows[1]. As a dynamic binary instrumentation tool, instrumentation is performed at run time on the compiled binary files. Thus, it requires no recompiling of source code and can support instrumenting programs that dynamically generate code.

Pin was originally created as a tool for computer architecture analysis, but its flexible API and an active community (called "Pinheads") have created a diverse set of tools for security, emulation and parallel program analysis.

Pin is proprietary software developed and supported by Intel, and is supplied free of charge with a kit of reference tools.

Contents

Overview [link]

Pin performs instrumentation by taking control of the program just after it loads into memory. It then just-in-time recompiles (JIT) small sections of binary code just before they are run. New instructions, which perform the analysis, are added to the recompiled code. These new instructions come from the Pintool. A large array of optimization techniques are used to obtain the lowest possible running time and memory use overhead. As of June 2010, Pin's average base overhead is 30 percent (without running a pintool)[2].

Pin is a platform for creating analysis tools. A pin tool comprises instrumentation, analysis and callback routines. Instrumentation routines are called when code that has not yet been recompiled is about to be run, and enable the insertion of analysis routines. Analysis routines are called when the code they are associated with is run. Callback routines are called when specific conditions are met, or when a certain event has occurred. Pin provides an extensive application programming interface (API) for instrumentation at many abstraction levels, from one instruction to an entire binary module. It also supports callbacks for many events such as library loads, system calls, signals/exceptions and thread creation events.

Features [link]

Instrumentation modes [link]

Pin supports two modes of instrumentation called JIT mode and Probe mode. JIT mode supports all features of Pin, while Probe mode supports a limited feature set but is far faster, adding almost no overhead to program running time. JIT mode uses a just-in-time compiler to recompile all program code and insert instrumentation, while Probe mode uses code trampolines for instrumentation.

Platform independence [link]

Pin was designed for tool portability, and despite JIT compiling from one ISA to the same ISA (and not using a single intermediate representation for all code), most of its APIs are architecture and operating system independent. It was also designed to be portable itself, carefully isolating platform-specific code from generic code, allowing the fast adaptation of Pin to new platforms. Approximately half of the code is generic and the rest is either architecture or OS dependent.[3]

Optimizations [link]

Pin uses many techniques to optimize instrumentation and analysis code, using techniques such as inlining, liveness analysis and smart register spilling. Pin performs these optimizations automatically whenever possible, without needing users to insert any extra code to allow inlining. Naturally, some optimizations still require user hints, and some code structures are easier to inline than others. Direct linking of jitted code sections, a technique called trace linking, and register binding reconciliation, which minimizes register spilling and remapping, are also used.

Ease of use [link]

Pin’s API and implementation are focused on making pin tools easy to write. Pin takes full responsibility for assuring that the instrumentation code from the pin tool does not affect the application state. Also, the API enables instrumentation code to request many pieces of information from Pin. For example, the instrumentation code in the pin tool can use the Pin API to get the memory address being accessed by an instruction, without having to examine the instruction in detail.

Tools [link]

There are many Pintools that are used for varying tasks.

  • Components of Intel Parallel Studio make heavy use of pintools for memory debugging, performance analysis, multithreading correctness analysis and parallelization preparation.
  • Intel Software Development Emulator is a pintool that enables the development of applications using instruction set extensions that are not currently implemented in hardware.
  • CMP$IM is a cache profiler built using pin. [4]
  • PinPlay enables the capture and deterministic replay of the running of multithreaded programs under pin. Capturing the running of a program helps developers overcome the non-determinism inherent in multithreading.[5]
  • Pin itself comes with many example tools that make use of its abilities. These tools are licensed under a BSD-like license.

See also [link]

Notes [link]

References [link]

External links [link]


https://wn.com/Pin_(computer_program)

Computer program

A computer program is a collection of instructions that performs a specific task when executed by a computer. A computer requires programs to function, and typically executes the program's instructions in a central processing unit.

A computer program is usually written by a computer programmer in a programming language. From the program in its human-readable form of source code, a compiler can derive machine code—a form consisting of instructions that the computer can directly execute. Alternatively, a computer program may be executed with the aid of an interpreter.

A part of a computer program that performs a well-defined task is known as an algorithm. A collection of computer programs, libraries and related data are referred to as software. Computer programs may be categorized along functional lines, such as application software or system software.

History

Early programmable machines

The earliest programmable machines preceded the invention of the digital computer. In 1801, Joseph-Marie Jacquard devised a loom that would weave a pattern by following a series of perforated cards. Patterns, including flowers and leaves, could be weaved and repeated by arranging the cards.

Program

Program (American spelling) or programme (British spelling) may refer to:

Communication

  • Radio program, a segment of content intended for broadcast on radio
  • Television program, a segment of content intended for broadcast on television
  • Business and management

  • Program management, the process of managing several related projects, as in business or science
  • a plan for Time management
  • a part of Planning
  • Twelve-step program, a set of guiding principles for recovery from addiction, compulsion, or other behavioral problems
  • Technology

  • Program (machine), a technical setting stored in the memory of a machine or piece of hardware to be executed, including computers.
  • Computer program
  • Art and entertainment

  • Program – a synthesizer setting stored in memory, also called a patch
  • Programme (booklet), a printed leaflet for patrons of a live event such as a theatre, concert or sports performance
  • Program music, a type of art music that attempts to render musically an extra-musical narrative
  • "Program", an instrumental song by Linkin Park from LP Underground Eleven
  • Program management

    Program management or programme management is the process of managing several related projects, often with the intention of improving an organization's performance. In practice and in its aims it is often closely related to systems engineering and industrial engineering.

    The program manager has oversight of the purpose and status of the projects in a program and can use this oversight to support project-level activity to ensure the program goals are met by providing a decision-making capacity that cannot be achieved at project level or by providing the project manager with a program perspective when required, or as a sounding board for ideas and approaches to solving project issues that have program impacts. In a program there is a need to identify and manage cross-project dependencies and often the project management office (PMO) may not have sufficient insight of the risk, issues, requirements, design or solution to be able to usefully manage these. The program manager may be well placed to provide this insight by actively seeking out such information from the project managers although in large and/or complex projects, a specific role may be required. However this insight arises, the program manager needs this in order to be comfortable that the overall program goals are achievable.

    Program (machine)

    A program is a set of instructions used to control the behavior of a machine, often a computer (in this case it is known as a computer program).

    Examples of programs include:

  • The sequence of cards used by a Jacquard loom to produce a given pattern within weaved cloth. Invented in 1801, it used holes in punched cards to represent sewing loom arm movements in order to generate decorative patterns automatically.
  • A computer program list of instructions to be executed by a computer.
  • Barrels, punched cards and music rolls encoding music to be played by player pianos, fairground organs, barrel organs and music boxes.
  • The execution of a program is a series of actions following the instructions it contains. Each instruction produces effects that alter the state of the machine according to its predefined meaning.

    While some machines are called programmable, for example a programmable thermostat or a musical synthesizer, they are in fact just devices which allow their users to select among a fixed set of a variety of options, rather than being controlled by programs written in a language (be it textual, visual or otherwise).

    Human computer

    The term "computer", in use from the early 17th century (the first known written reference dates from 1613), meant "one who computes": a person performing mathematical calculations, before electronic computers became commercially available. "The human computer is supposed to be following fixed rules; he has no authority to deviate from them in any detail." (Turing, 1950) Teams of people were frequently used to undertake long and often tedious calculations; the work was divided so that this could be done in parallel.

    The first time the term "Computer" appeared in The New York Times was February 3, 1853; an obituary stated:

    Since the end of the 20th century, the term "human computer" has also been applied to individuals with prodigious powers of mental arithmetic, also known as mental calculators.

    Origins in astronomy

    The approach was taken for astronomical and other complex calculations. Perhaps the first example of organized human computing was by the Frenchman Alexis Claude Clairaut (1713–1765), when he divided the computation to determine timing of the return of Halley's Comet with two colleagues, Joseph Lalande and Nicole-Reine Lepaute.

    List of Courage the Cowardly Dog characters

    This is a list of characters from the Cartoon Network animated series, Courage the Cowardly Dog.

    Main characters

    Courage

    Courage is the series' protagonist, and an overly frightened purple beagle dog who lives in Nowhere, Kansas. He was abandoned as a puppy after his parents were sent into outer space, but was adopted by Muriel Bagge. Her husband, Eustace, regularly mistreats him. Ironically, given his name, Courage is a genuine coward, but still goes to great lengths to protect his owners; to the end, he often gets injured, sometimes quite brutally, or almost killed and only surviving through his determination and/or pure luck. Despite his cowardice, Courage is very clever and resourceful when the situation demands it, outsmarting the villains most of the time. Aiding him at saving the day is a self-aware, sarcastic and seemingly omniscient Computer that he keeps in the attic with which he could consult for information in how to remedy any predicament he faces (though it never fails to badmouth him in one way or another). He got his name when Muriel found him as a puppy alone in an alley and remarked that he must be quite brave to be there by himself.

    Podcasts:

    PLAYLIST TIME:
    ×