Pathscale ENZO - 2011-04-15 by Vincent - Streamcomputing
Total Page:16
File Type:pdf, Size:1020Kb
PathScale ENZO - 2011-04-15 by vincent - StreamComputing - http://www.streamcomputing.eu PathScale ENZO by vincent – Friday, 15 April 2011 http://www.streamcomputing.eu/blog/2011-04-15/pathscale-enzo/ My todo-list gets too large, because there seem so many things going on in GPGPU-world. Therefore the following article is not really complete, but I hope it gives you an idea of the product. ENZO was presented as the alternative to CUDA and OpenCL. In that light I compared them to Intel Array Building Blocks a few weeks ago, not that their technique is comparable in a technical way. PathScale’s CTO mailed me and tried to explain what ENZO really is. This article consists mainly of what he (Mr. C. Bergström) told me. Any questions you have, I will make sure he receives them. ENZO ENZO is a complete GPGPU solution and ecosystem of tools that provide full support for NVIDIA Tesla (kernel driver, runtime, assembler, code generation, front-end programming model and various other things to make a developer’s life easier). Right now it supports the HMPP C/Fortran programming model. HMPP is an open standard jointly developed by CAPS and PathScale. I’ve mentioned HMPP before, as it can translate Fortran and C-code to OpenCL, CUDA and other languages. ENZO’s implementation differs from HMPP by using native front-ends and does hardware optimised code generation. You can learn ENZO in 5 minutes if you’ve done any OpenMP-like programming in the past. For example the Fortran-code (sorry for the missing indenting): !$hmpp simple codelet, target=TESLA1 page 1 / 3 PathScale ENZO - 2011-04-15 by vincent - StreamComputing - http://www.streamcomputing.eu subroutine add(n, a, b, c) implicit none integer, intent(in) :: n real, intent(in) :: a(n), b(n) real, intent(out) :: c(n) integer :: i do i=1, n if (a(i) > 5) then c(i) = 1 else c(i) = 2 endif enddo end subroutine add subroutine test integer, parameter :: n=10 real :: a(n), b(n), c(n) integer :: i do i=1, n a(i) = i b(i) = i enddo !$hmpp simple callsite call add(n, a, b, c) end subroutine test This is somewhat different we know from OpenCL, mostly because we don’t need a specific kernel. This is because with just a few hints, the compiler does a lot for you. Like in OpenMP you tell the compiler with directives/pragmas which parts you want to be parallelised. More explanation can be found in the user manual [PDF]. You can try it out yourself for free if you have a Tesla-card; future versions of ENZO will support more architectures. Related content: 1. DirectCompute’s unpopularity 2. The rise of the GPGPU-compilers 3. Basic Concepts: OpenCL Convenience Methods for Vector Elements and Type Conversions page 2 / 3 PathScale ENZO - 2011-04-15 by vincent - StreamComputing - http://www.streamcomputing.eu _______________________________________________ Related content: 1. DirectCompute’s unpopularity 2. The rise of the GPGPU-compilers 3. Basic Concepts: OpenCL Convenience Methods for Vector Elements and Type Conversions page 3 / 3 Powered by TCPDF (www.tcpdf.org).