I am new to this forum. I have couple of questions on the parallel computing environment availablefor Intel multicore GPPs (general purpose processors), for example processors like Core2/4 Duo, Atom Core 2/4, Xeon Core 2/4 etc.
a)What is the parallel programming model supported by the Intel's multicore processors? Is it task parallel or data parallel? Is there any way that an user can exploit these features while building its own software on top of the Linux or Windows OS? Which OS is better with respect to the multicore - Windows or Linux?
b) Is the current form ofdevelopment tools from Intel exploit the core parallelism up to full extent? For example, given a large task or C program, do Intel supportedC complier exploits parallelism in its best? Is there any design guideline from Intel regarding how to take advantages of architectural features while workingon designing an application in Windows or Linux OS?
Kindly providerelevent literatures which will help me to gain understanding of parallel programming enviornment on Intel multiocre GPPs.
DSOC and SMP are some of the models supported by Intel's multicore processors .Multicore processors helps a lot in client-side applications. It is best for data parallel , task level parallelism also works . Yes users can build their own software . It can be used in several enviornments like MPI, OpenMP, HPF, TBB, Erlang, Shmemm, Portals, ZPL, BSP, windows threads, Tstreams, GA, Java, UPC, Titanium, Parlog, NESL,Split-C etc. TBB ,OpenMP, native threads are supported by Intel, they can co-exist and interoperate.Both Linux and windows work well with multicore but I do suggest Linux as it is an Open Source .
You might refer the following resources for understanding more on Parallel Programing and multicore processors.
An expert from Intel Team might answer the rest .
They are general-purpose, i.e they equally support all high-level models: data parallelism, task parallelism, unstructured thread parallelism etc. Actually they only provide some basic means for really parallel execution of several "activities", all other depends on software.
The most general way to exploit parallelism is OS threads, i.e. you create several OS threads, and OS will try to execute them actually in parallel. There are also higher-level abstractions like OpenMP, TBB, IPP.
Windows and Linus have roughly equal support for multiprocessing. They both have threads, affinities, synchronization primitives etc. Although Windows has some interesting features like WaitForMultipleObjects(), and FlushProcessWriteBuffers().
Exploitation of multi-core up to full extent depends more on your application (architecture, implementation), not on the tools. Although Intel has a number of tools/libraries which can help with it: Thread Checker, Performance Tuning Utility, Threading Building Blocks, Integrated Performance Primitives etc.
You can find a number of guidelines in Intel Multicore Knowledge Base:
Actually there is not so much new wrt exactly Intel systems. If you have expirience with other SMP, SMP-NUMA or HWT systems, then you can start developing for Intel systems right away.
I think the main difference is that communication between cores is much cheaper than in SMP systems. Some cores even share L2/L3 cache.
Also Hyper-Threading technology has some caveats. Logical model of Hyper-Threading is two separate processors, however physical model of that is more like single-processor. I.e. HT threads share execution units, caches and other machinery inside core.