Explicit threading methods, such as Windows* threads or POSIX* threads, use library calls to create, manage, and synchronize threads. Use of explicit threads requires an almost complete restructuring of affected code. On the other hand, OpenMP* is a set of pragmas, API functions, and environment variables that enable you to incorporate threads into your applications at a relatively high level. The OpenMP pragmas are used to denote regions in the code that can be run concurrently. more>
Parallelism is coming to everything from laptops to high-end servers. It will exist at multiple levels with multiple cores per chip, multiple sockets per box, and multiple boxes per system (cluster). While only some programmers will need to worry about clusters, all programmers will need to worry about shared memory multiprocessors. And the way you program these systems is with multi-threading. more>
As you probably know by now, to get the maximum performance benefit from a processor with Hyper-Threading Technology, an application needs to be executed in parallel. Parallel execution requires threads, and threading an application is not trivial. more>
In shared memory multiprocessor architectures, such as SMPs, threads can be used to implement parallelism. Historically, hardware vendors have implemented their own proprietary versions of threads, making portability a concern for software developers. For UNIX systems, a standardized C language threads programming interface has been specified by the IEEE POSIX 1003.1c standard. Implementations that adhere to this standard are referred to as POSIX threads, or Pthreads. more>
Many software applications are about to be turned upside-down by the transition of CPUs from single to multi-core implementations. In new designs, software developers will be tasked with keeping multiple cores busy to avoid leaving performance on the floor. In legacy designs, you will be faced with the challenge of having single-threaded applications run efficiently on multiple cores. Programs will need to serve up code threads that can be dished out to several cores in an efficient manner. Code threading breaks up a software task into subtasks called threads which run concurrently and independently. more>
OpenMP provides a powerful, portable, and simple means of threading applications. In some cases, however, developers should choose the flexibility of native threading APIs. The guidelines in this article help to identify whether OpenMP is an appropriate choice for a given situation. more>
As you know, OpenMP* contains a very powerful set of pragmas that help you parallelize a loop. What you may not know is that OpenMP can be used to thread more than just loops. When the "parallel for" construct falls a little short, OpenMP has additional pragmas, constructs, and function calls that come to the rescue. more>
Now that multi-core processors are becoming mainstream, developers need to thread their code so it will run in parallel. OpenMP1 can provide a useful way to thread an application. But what should you know about your threaded code’s performance, and what does that mean when using OpenMP? In an earlier paper2, we discovered that all threading methods have a consistent startup cost, but that OpenMP has some performance advantages over typical Windows* threading, due to its use of thread pooling. more>
The first edition of The Software Optimization Cookbook continues to be one of the most popular books offered by Intel Press. Feedback received from readers indicates that the book fills a gap between introductory textbooks that deal with program optimizations in general and advanced manuals that deal with all aspects of the Intel® architecture in particular. more>
Readers should have programming experience in a high-level language, preferably C, C++, and/or Fortran, though many of the recommendations in this document also apply to languages such as Java, C#, and Perl. Readers must also understand basic concurrent programming and be familiar with one or more threading methods, preferably OpenMP*, POSIX threads (also referred to as Pthreads), or the Win32* threading API. more>
This series was designed for current .NET developers who have an interest in threading but have not had extensive experience in threading nor how threading enables improved performance on multi-core systems. more>
Java* threads provide a vital performance boost to nearly all apps. Discover how these threads are becoming a standard part of Java* programming by exploiting Hyper-Threading Technology and the new multi-core Intel® processors. more>
Building multi-threading into .NET* applications is a powerful tool for the developer. It empowers applications that demand high scalability, such as enterprise applications, as well as desktop applications that need to process more than one task at the same time. more>