Q. What are the Major Differences Between Edison and Hopper?
A. The new Edison Phase-I system has 16 cores per node; Hopper has 24. 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.
Q. What else is different?
A. There is more memory per core. Edison has 4 GB per core rather than 1.3 GB per core on Hopper. On Edison you also have the option of enabling Intel's Hypterthreading technology on a 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 accomodate the Intel, Cray, or GNU programmming environments. PGI is not available on Edison.
Q. What should I expect for the performance of my program on Edison Phase-1?
A. There are many factors that contribute to an application’s performance. The Edison processor clock speed is faster than Hopper's (2.6 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 Aires 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 Hyperthreading?
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, and shares the workload between them when possible. With hyperthreading, the OS will attempt to schedule "work" from one execution thread on a physical processor while another thread is stalled waiting for access to a resources such as main memory or data on external media.
Q. How do I use Hyperthreading?
A. You can choose to use hyperthreading or not for each job started using the "aprun" job launcher command. To enable hyperthreading, use
aprun -j 2 [other options as usual] ... executable_name
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 32 virtual hyperthreaded cores in less than twice the time it would take on two 16-core nodes, you will reduce your computing cost. NERSC charges by the node hour, regardless of how many cores you use on the node.