36 research outputs found
Distribution of load in heterogeneous computer systems
The thesis explores the formulation and implementation of an application that divides, computes and merges a parallel computing problem on a heterogeneous system. The application uses all available compute devices. The goal is to determine how to divide a computing problem between devices to maximise the system's utilisation. The thesis presents possible solutions to the problem, their strengths, and weaknesses. Some of the solutions are benchmarked and compared. For benchmarking the Mandelbrot set was generated. Processing units are accessed and managed using the OpenCL framework. We found out how best to divide and allocate work, and how to set the size of work groups to imporve device utilisation
Source-to-source Compilation of OpenACC
The OpenACC framework was created to alleviate the problems with programming graphical processing unit. We implemented a compiler, which added OpenACC support to the Java programming language. We used source-to-source translation to compile Java code annotated with OpenACC directives into Java code which uses OpenCL to execute computations on the GPU. The code compiled with our compiler is compatible with any Java compiler and runs on any machine that supports the Java virtual machine and OpenCL. Due to the size of the OpenACC standard, we focused mostly on the core features of the framework, such as loop parallelization and data transfer. The code generated with our compiler achieved around a 50\% speed-up, and achieved parity with native C++ programs using OpenCL
Source-to-source Compilation of OpenACC
The OpenACC framework was created to alleviate the problems with programming graphical processing unit. We implemented a compiler, which added OpenACC support to the Java programming language. We used source-to-source translation to compile Java code annotated with OpenACC directives into Java code which uses OpenCL to execute computations on the GPU. The code compiled with our compiler is compatible with any Java compiler and runs on any machine that supports the Java virtual machine and OpenCL. Due to the size of the OpenACC standard, we focused mostly on the core features of the framework, such as loop parallelization and data transfer. The code generated with our compiler achieved around a 50\% speed-up, and achieved parity with native C++ programs using OpenCL
Source-to-source Compilation of OpenACC
Razvili smo prevajalnik, ki omogoča dodajanje direktiv OpenACC v programski jezik Java. Implementirali smo ga s pomočjo prevajanja na nivoju izvorne kode. Prevajalnik deluje kot predprocesor, ki javansko kodo z oznakami OpenACC prevaja v javansko kodo, ki uporablja vmesnik OpenCL za računanje na grafičnih procesnih enotah. Izhodna koda prevajalnika je prevedljiva s katerimkoli javanskim prevajalnikom in lahko teče na vseh računalnikih z Javinim navideznim strojem in podporo za OpenCL. Zaradi obsega standarda OpenACC smo se pri implementaciji osredotočili le na osnovno paralelizacijo zank in prenos podatkov med napravami. S prevajalnikom smo dosegli pospešitve izvajanja kompleksnih problemov za okoli 50% in dosegli enak čas izvajanja kot z jezikom C++, ki uporablja OpenCL.The OpenACC framework was created to alleviate the problems with programming graphical processing unit. We implemented a compiler, which added OpenACC support to the Java programming language. We used source-to-source translation to compile Java code annotated with OpenACC directives into Java code which uses OpenCL to execute computations on the GPU. The code compiled with our compiler is compatible with any Java compiler and runs on any machine that supports the Java virtual machine and OpenCL. Due to the size of the OpenACC standard, we focused mostly on the core features of the framework, such as loop parallelization and data transfer. The code generated with our compiler achieved around a 50% speed-up, and achieved parity with native C++ programs using OpenCL
Distribution of load in heterogeneous computer systems
V diplomskem delu opisujemo zasnovo in izvedbo aplikacije, ki na heterogenem računalniškem sistemu razdeli, izračuna in združi vzporeden računski problem. Za izračun aplikacija izrabi vse računske naprave, ki so ji dosegljive. Naš cilj v delu je ugotoviti, kako najbolje razdeliti računski problem med naprave tako, da je izkoriščenost sistema čim večja. Predstavimo možne načine delitve problema, njihove prednosti in slabosti. Rešitve so testirane in med seboj primerjane. Testiranje je opravljeno z računanjem Mandelbrotove množice. Za dostop do naprav na sistemu aplikacija uporablja ogrodje OpenCL. Ugotovili smo, kako najbolje dodeljevati delo procesnim enotam in kako nastaviti velikosti delovnih skupin za čim boljši izkoristek naprav.The thesis explores the formulation and implementation of an application that divides, computes and merges a parallel computing problem on a heterogeneous system. The application uses all available compute devices. The goal is to determine how to divide a computing problem between devices to maximise the system\u27s utilisation. The thesis presents possible solutions to the problem, their strengths, and weaknesses. Some of the solutions are benchmarked and compared. For benchmarking the Mandelbrot set was generated. Processing units are accessed and managed using the OpenCL framework. We found out how best to divide and allocate work, and how to set the size of work groups to imporve device utilisation
Distribution of load in heterogeneous computer systems
The thesis explores the formulation and implementation of an application that divides, computes and merges a parallel computing problem on a heterogeneous system. The application uses all available compute devices. The goal is to determine how to divide a computing problem between devices to maximise the system's utilisation. The thesis presents possible solutions to the problem, their strengths, and weaknesses. Some of the solutions are benchmarked and compared. For benchmarking the Mandelbrot set was generated. Processing units are accessed and managed using the OpenCL framework. We found out how best to divide and allocate work, and how to set the size of work groups to imporve device utilisation
Distribution of load in heterogeneous computer systems
V diplomskem delu opisujemo zasnovo in izvedbo aplikacije, ki na heterogenem računalniškem sistemu razdeli, izračuna in združi vzporeden računski problem. Za izračun aplikacija izrabi vse računske naprave, ki so ji dosegljive. Naš cilj v delu je ugotoviti, kako najbolje razdeliti računski problem med naprave tako, da je izkoriščenost sistema čim večja. Predstavimo možne načine delitve problema, njihove prednosti in slabosti. Rešitve so testirane in med seboj primerjane. Testiranje je opravljeno z računanjem Mandelbrotove množice. Za dostop do naprav na sistemu aplikacija uporablja ogrodje OpenCL. Ugotovili smo, kako najbolje dodeljevati delo procesnim enotam in kako nastaviti velikosti delovnih skupin za čim boljši izkoristek naprav.The thesis explores the formulation and implementation of an application that divides, computes and merges a parallel computing problem on a heterogeneous system. The application uses all available compute devices. The goal is to determine how to divide a computing problem between devices to maximise the system\u27s utilisation. The thesis presents possible solutions to the problem, their strengths, and weaknesses. Some of the solutions are benchmarked and compared. For benchmarking the Mandelbrot set was generated. Processing units are accessed and managed using the OpenCL framework. We found out how best to divide and allocate work, and how to set the size of work groups to imporve device utilisation
Concrete Types for TypeScript
International audienc
The Eval that Men Do -- A Large-scale Study of the Use of Eval in JavaScript Applications
Abstract. Transforming text into executable code with a function such as JavaScript's eval endows programmers with the ability to extend applications, at any time, and in almost any way they choose. But, this expressive power comes at a price: reasoning about the dynamic behavior of programs that use this feature becomes challenging. Any ahead-of-time analysis, to remain sound, is forced to make pessimistic assumptions about the impact of dynamically created code. This pessimism affects the optimizations that can be applied to programs and significantly limits the kinds of errors that can be caught statically and the security guarantees that can be enforced. A better understanding of how eval is used could lead to increased performance and security. This paper presents a large-scale study of the use of eval in JavaScript-based web applications. We have recorded the behavior of 337 MB of strings given as arguments to 550,358 calls to the eval function exercised in over 10,000 web sites. We provide statistics on the nature and content of strings used in eval expressions, as well as their provenance and data obtained by observing their dynamic behavior. eval is evil. Avoid it. eval has aliases. Don't use them. -Douglas Crockfor