Q. What are the major differences between Edison and Hopper?
A. The default programming environment on Edison is based on the Intel compiler. Hopper's is based on the Portland Group (PGI) compilers. PGI compilers are not available on Edison.
There is more memory per core. Edison has 2.67 GB per core rather than 1.3 GB per core on Hopper. On Edison you also have the option of using Intel's Hyperthreading technology which makes a physical core appears as two logical cores, so that you can run 48 tasks or thread per node (see below).
Q. Will my existing Hopper code run on Edison?
A. If your code runs on Hopper, it should run easily on Edison. However, if it relies on the PGI compilers, you may have to make changes to accommodate the Intel, Cray, or GNU programming environments. PGI is not available on Edison. Also, you definitely need to recompile your code to run on Edison; Hopper binaries will not run on Edison.
Q. What should I expect for the performance of my program on Edison?
A. There are many factors that contribute to an application’s performance. The Edison processor clock speed is faster than Hopper's (2.4 GHz vs. 2.1 GHz) and the processor is an Intel Xeon vs. an AMD Opteron. The Xeon line may be faster for many codes. Edison's memory speed is also faster (1600 MHz vs. 1333 MHz). The Edison Aries interconnect should offer better performance than Hopper's Gemini interconnect. Generally, it is likely that for an MPI-only code the per-core performance of Edison will be roughly 1.5 to 2.0 times that of Hopper.
Q. What is Hyper-Threading?
A. Hyper-Threading (officially Hyper-Threading Technology or HT Technology, abbreviated HTT or HT) is Intel's proprietary simultaneous multithreading (SMT) implementation used to improve parallelization of computations (doing multiple tasks at once). For each processor core that is physically present, the operating system addresses two virtual or logical cores, which share the most of the exeuction resources on the physical core. With hyperthreading, the operating system can schedule two tasks or threads on a physical core, so that when a task or thread is stalled waiting for access to a resource, for instance main memory or data on external media, the other task/thread can run on the execution resources which would be otherwise wasted. Therefore, Hyper-Threading could improve application performance by increasing the processor resource utilization.
Q. How do I use Hyper-Threading?
A. You can choose to use Hyper-Threading or not for each job started using the -j option of the "aprun" job launcher command. To enable hyperthreading, use -j 2 option. For example, to run with all logical cores on two Edison nodes,
aprun -j2 -n96 ./a.out
Please refer to the Running jobs page for sample job scripts.
Q. Will Hyperthreading help my code?
A. If your code is already performing at a high percentage of peak on Hopper, probably not. If your code has a lot of branches and/or random memory accesses, then maybe. The best advice is to experiment. One use case for hyperthreading might be to extend your allocation of computer time, rather than to reduce the time to solution. Think about it this way: if your code can complete on one node with 48 virtual hyperthreaded cores in less than twice the time it would take on two 24-core nodes, you will reduce your computing cost. NERSC charges by the node hour, regardless of how many cores you use on the node. We have done some HT performance tests with several top application codes at NERSC, and have some recommendations for you. You can find that information in the Performance and Optimization page for Edison.