OpenVX is a computer vision framework that enables embedded and real-time applications to optimize computer vision processing for performance and power. OpenVX addresses system-level optimizations by making use of a graph-based computational API. Although this gives a clear advantage over other traditional computer vision libraries such as OpenCV, which mainly addresses kernel-level optimizations, OpenVX still relies on vendor implementations to optimize individual built-in kernels. OpenVX implements several computer vision kernels but in order to increase adoption and user flexibility, OpenVX added support for C based user-kernels, which by default are single-threaded and there is no particular way to accelerate kernels or offload the computation to an accelerator such us a GPU. The user has to do the heavy lifting of supporting a multi-threaded implementation. We propose two different OpenVX API extensions to allow developers deploy accelerated user-kernels using OpenCL.
{"title":"OpenCL Interoperability with OpenVX Graphs","authors":"Ben Ashbaugh, A. Bernal","doi":"10.1145/3078155.3078183","DOIUrl":"https://doi.org/10.1145/3078155.3078183","url":null,"abstract":"OpenVX is a computer vision framework that enables embedded and real-time applications to optimize computer vision processing for performance and power. OpenVX addresses system-level optimizations by making use of a graph-based computational API. Although this gives a clear advantage over other traditional computer vision libraries such as OpenCV, which mainly addresses kernel-level optimizations, OpenVX still relies on vendor implementations to optimize individual built-in kernels. OpenVX implements several computer vision kernels but in order to increase adoption and user flexibility, OpenVX added support for C based user-kernels, which by default are single-threaded and there is no particular way to accelerate kernels or offload the computation to an accelerator such us a GPU. The user has to do the heavy lifting of supporting a multi-threaded implementation. We propose two different OpenVX API extensions to allow developers deploy accelerated user-kernels using OpenCL.","PeriodicalId":267581,"journal":{"name":"Proceedings of the 5th International Workshop on OpenCL","volume":"91 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-05-16","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"115105581","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
In the machine learning domain, machine learning frameworks are predominantly written and maintained in NVIDIA® CUDA™ language. There have been attempts to port these frameworks to OpenCL®, notably the ports of Caffe framework by Gu et al; Tschopp; and Engel; and of Torch framework by Perkins. The authors of these frameworks found merging their work into the mainstream framework challenging, and maintain their forks as separate branches or repositories. CUDA-on-CL addresses this problem by leaving the reference implementation entirely in NVIDIA CUDA, both host-side and device-side, and providing a compiler and a runtime component, so that any CUDA C++11 application can in theory be compiled and run on any OpenCL 1.2 device. We use Tensorflow framework as a case-study, and demonstrate the ability to run unary, binary and reduction Tensorflow and Eigen kernels, with no modification to the original CUDA source-code. Performance studies are undertaken, using the Tensorflow kernels. For buffer sizes of 1MB or more, performance is comparable between CUDA and CUDA-on-CL, across unary operations, binary operations and single-axis reductions. Full reduction is around 14 times slower on CUDA-on-CL than on CUDA. We think this may be because of the absence of the low-level hardware shfl operation. The asymptotic time for zero buffer sizes is double that of CUDA, possibly because of the overhead of additional kernel boilerplate needed to workaround limitations in the OpenCL 1.2 standard.
在机器学习领域,机器学习框架主要使用NVIDIA®CUDA™语言编写和维护。已经有人尝试将这些框架移植到OpenCL®,特别是Gu等人对Caffe框架的移植;Tschopp;和恩格尔;以及Perkins的Torch框架。这些框架的作者发现将他们的工作合并到主流框架中是一项挑战,并将他们的分支作为单独的分支或存储库进行维护。CUDA-on- cl通过将参考实现完全保留在NVIDIA CUDA(主机端和设备端)中解决了这个问题,并提供了编译器和运行时组件,因此任何CUDA c++ 11应用程序理论上都可以在任何OpenCL 1.2设备上编译和运行。我们使用Tensorflow框架作为案例研究,并演示了在不修改原始CUDA源代码的情况下运行一元,二进制和约简Tensorflow和特征核的能力。使用Tensorflow核进行性能研究。对于1MB或更大的缓冲区大小,CUDA和CUDA-on- cl之间的性能在一元操作、二进制操作和单轴缩减方面是相当的。完全还原在CUDA-on- cl上比在CUDA上慢14倍左右。我们认为这可能是因为缺少底层硬件shfl操作。零缓冲区大小的渐近时间是CUDA的两倍,可能是因为需要额外的内核样板的开销来解决OpenCL 1.2标准中的限制。
{"title":"CUDA-on-CL: a compiler and runtime for running NVIDIA® CUDA™ C++11 applications on OpenCL™ 1.2 Devices","authors":"Hugh Perkins","doi":"10.1145/3078155.3078156","DOIUrl":"https://doi.org/10.1145/3078155.3078156","url":null,"abstract":"In the machine learning domain, machine learning frameworks are predominantly written and maintained in NVIDIA® CUDA™ language. There have been attempts to port these frameworks to OpenCL®, notably the ports of Caffe framework by Gu et al; Tschopp; and Engel; and of Torch framework by Perkins. The authors of these frameworks found merging their work into the mainstream framework challenging, and maintain their forks as separate branches or repositories. CUDA-on-CL addresses this problem by leaving the reference implementation entirely in NVIDIA CUDA, both host-side and device-side, and providing a compiler and a runtime component, so that any CUDA C++11 application can in theory be compiled and run on any OpenCL 1.2 device. We use Tensorflow framework as a case-study, and demonstrate the ability to run unary, binary and reduction Tensorflow and Eigen kernels, with no modification to the original CUDA source-code. Performance studies are undertaken, using the Tensorflow kernels. For buffer sizes of 1MB or more, performance is comparable between CUDA and CUDA-on-CL, across unary operations, binary operations and single-axis reductions. Full reduction is around 14 times slower on CUDA-on-CL than on CUDA. We think this may be because of the absence of the low-level hardware shfl operation. The asymptotic time for zero buffer sizes is double that of CUDA, possibly because of the overhead of additional kernel boilerplate needed to workaround limitations in the OpenCL 1.2 standard.","PeriodicalId":267581,"journal":{"name":"Proceedings of the 5th International Workshop on OpenCL","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-05-16","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130494139","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Khronos open source components, including the ICD and Clang compiler, require significant time and effort to manually download, build, and install. Source code updates to these components require recompilation, and developers must repeat error-prone steps to build new test environments. Ideally developers should be able to use a tool that automatically obtains, builds, and installs OpenCL codes, libraries, and tools. The Windsor Build and Testing Framework (WBTF) is a tool that has been developed at the University of Windsor that does this. This paper will discuss how the WBTF works, demonstrate how it is used, will show how OpenCL C and C++ programs can be built, run, and/or used to perform various header-only, link, and/or various conformance-style tests using OpenCL reference, host-installed, or using device-installed header and libraries. Those interested in OpenCL C/C++ development, the Khronos OpenCL Clang compiler, and in writing conformance tests will be interested in this framework.
{"title":"The Windsor Build and Testing Framework","authors":"Shane M. Peelar, P. Preney","doi":"10.1145/3078155.3078184","DOIUrl":"https://doi.org/10.1145/3078155.3078184","url":null,"abstract":"Khronos open source components, including the ICD and Clang compiler, require significant time and effort to manually download, build, and install. Source code updates to these components require recompilation, and developers must repeat error-prone steps to build new test environments. Ideally developers should be able to use a tool that automatically obtains, builds, and installs OpenCL codes, libraries, and tools. The Windsor Build and Testing Framework (WBTF) is a tool that has been developed at the University of Windsor that does this. This paper will discuss how the WBTF works, demonstrate how it is used, will show how OpenCL C and C++ programs can be built, run, and/or used to perform various header-only, link, and/or various conformance-style tests using OpenCL reference, host-installed, or using device-installed header and libraries. Those interested in OpenCL C/C++ development, the Khronos OpenCL Clang compiler, and in writing conformance tests will be interested in this framework.","PeriodicalId":267581,"journal":{"name":"Proceedings of the 5th International Workshop on OpenCL","volume":"15 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-05-16","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133213902","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Agent-based modeling (ABM) is a bottom-up modeling approach, where each entity of the system being modeled is uniquely represented as a self-determining agent. Large scale emergent behavior in ABMs is population sensitive. As such, it is advisable that the number of agents in a simulation is able to reflect the reality of the system being modeled. This means that in domains such as social modeling, ecology, and biology, systems can contain millions or billions of individuals. Such large scale simulations are only feasible in non-distributed scenarios when the computational power of commodity processors, such as GPUs and multi-core CPUs, is fully exploited. In this paper we evaluate the feasibility of using CPU-oriented OpenCL for high-performance simulations of agent-based models. We compare a CPU-oriented OpenCL implementation of a reference ABM against a parallel Java version of the same model. We show that there are considerable gains in using CPU-based OpenCL for developing and implementing ABMs, with speedups up to 10x over the parallel Java version on a 10-core hyper-threaded CPU.
{"title":"Assessing the feasibility of OpenCL CPU implementations for agent-based simulations","authors":"Nuno Fachada, A. Rosa","doi":"10.1145/3078155.3078174","DOIUrl":"https://doi.org/10.1145/3078155.3078174","url":null,"abstract":"Agent-based modeling (ABM) is a bottom-up modeling approach, where each entity of the system being modeled is uniquely represented as a self-determining agent. Large scale emergent behavior in ABMs is population sensitive. As such, it is advisable that the number of agents in a simulation is able to reflect the reality of the system being modeled. This means that in domains such as social modeling, ecology, and biology, systems can contain millions or billions of individuals. Such large scale simulations are only feasible in non-distributed scenarios when the computational power of commodity processors, such as GPUs and multi-core CPUs, is fully exploited. In this paper we evaluate the feasibility of using CPU-oriented OpenCL for high-performance simulations of agent-based models. We compare a CPU-oriented OpenCL implementation of a reference ABM against a parallel Java version of the same model. We show that there are considerable gains in using CPU-based OpenCL for developing and implementing ABMs, with speedups up to 10x over the parallel Java version on a 10-core hyper-threaded CPU.","PeriodicalId":267581,"journal":{"name":"Proceedings of the 5th International Workshop on OpenCL","volume":"29 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-05-16","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124142591","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
The system of kinetic equations for interacting quantum system (such as excitons or polaritons in semiconductor) is problematic to study numerically, due to multiple summation giving amount of calculation as high as L9 where L is the linear size of the system. Here we present the effective algorithm of L5 log L scale using analytical tranformation. Our OpenCL realization allows simulation of the systems as large as L = 64.
{"title":"Effective simulation of kinetic equations for bosonic system with two-particle interaction using OpenCL","authors":"P. Kartsev","doi":"10.1145/3078155.3078185","DOIUrl":"https://doi.org/10.1145/3078155.3078185","url":null,"abstract":"The system of kinetic equations for interacting quantum system (such as excitons or polaritons in semiconductor) is problematic to study numerically, due to multiple summation giving amount of calculation as high as L9 where L is the linear size of the system. Here we present the effective algorithm of L5 log L scale using analytical tranformation. Our OpenCL realization allows simulation of the systems as large as L = 64.","PeriodicalId":267581,"journal":{"name":"Proceedings of the 5th International Workshop on OpenCL","volume":"57 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-05-16","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133200477","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
For writing a new scientific application, portability across existing and future hardware should be the major design goal, as there is a multitude of different compute devices, and programme codes typically outlive systems by far. Unlike other programming models that address parallelism or heterogeneity, OpenCL does provide practical portability across a wide range of HPC-relevant architectures. Other than that, it has a range of further advantages like being a library-only implementation, and using runtime kernel-compilation. We present experiences with utilising OpenCL alongside C++, MPI, and CMake in two real-world scientific codes. Our targets are a Cray XC40 supercomputer with multi- and many-core (Xeon Phi) CPUs, as well as multiple smaller systems with Nvidia and AMD GPUs. We shed light on practical issues arising in such a scenario, like the interaction between OpenCL and MPI, discuss solutions, and point out current limitations of OpenCL in the domain of scientific HPC from an application developer's and user's point of view.
{"title":"OpenCL in Scientific High Performance Computing: The Good, the Bad, and the Ugly","authors":"M. Noack","doi":"10.1145/3078155.3078170","DOIUrl":"https://doi.org/10.1145/3078155.3078170","url":null,"abstract":"For writing a new scientific application, portability across existing and future hardware should be the major design goal, as there is a multitude of different compute devices, and programme codes typically outlive systems by far. Unlike other programming models that address parallelism or heterogeneity, OpenCL does provide practical portability across a wide range of HPC-relevant architectures. Other than that, it has a range of further advantages like being a library-only implementation, and using runtime kernel-compilation. We present experiences with utilising OpenCL alongside C++, MPI, and CMake in two real-world scientific codes. Our targets are a Cray XC40 supercomputer with multi- and many-core (Xeon Phi) CPUs, as well as multiple smaller systems with Nvidia and AMD GPUs. We shed light on practical issues arising in such a scenario, like the interaction between OpenCL and MPI, discuss solutions, and point out current limitations of OpenCL in the domain of scientific HPC from an application developer's and user's point of view.","PeriodicalId":267581,"journal":{"name":"Proceedings of the 5th International Workshop on OpenCL","volume":"48 23 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-05-16","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116799505","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
In this technical session we present the open architectural design of the debugger and how it fits into the OpenCL JIT compilation flow. We demonstrate a show case on how to natively work with the debugger to solve functional bugs, as-well-as low-level debugging techniques on SIMD thread level which help to solve complex issues such as misaligned or out of range accesses to local/global memory, stack overflows, Illegal instructions, etc. Finally, we cover the challenges in debugging.
{"title":"Challenges and Opportunities in Native GPU Debugging","authors":"Jeff McAllister, Uri Levy","doi":"10.1145/3078155.3078158","DOIUrl":"https://doi.org/10.1145/3078155.3078158","url":null,"abstract":"In this technical session we present the open architectural design of the debugger and how it fits into the OpenCL JIT compilation flow. We demonstrate a show case on how to natively work with the debugger to solve functional bugs, as-well-as low-level debugging techniques on SIMD thread level which help to solve complex issues such as misaligned or out of range accesses to local/global memory, stack overflows, Illegal instructions, etc. Finally, we cover the challenges in debugging.","PeriodicalId":267581,"journal":{"name":"Proceedings of the 5th International Workshop on OpenCL","volume":"27 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-05-16","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"115260310","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Molecular Docking is a methodology used extensively in modern drug design. It aims to predict the binding position of two molecules by calculating the energy of their possible binding poses. One of the most cited docking tools is AutoDock. At its core, it solves an optimization problem by generating a large solution space of possible poses, and searches among them for the one having the lowest energy. These complex algorithms thus benefit from parallelization based run-time acceleration. This work presents an OpenCL implementation of AutoDock, and a corresponding performance evaluation on two different platforms based on multi-core CPU and GPU accelerators. It shows that OpenCL allows highly efficient docking simulations, achieving speedups of ~4x and ~56x over the original serial AutoDock version, as well as energy efficiency gains of ~2x and ~6x. respectively. To the best of our knowledge, this work is the first one also considering the energy efficiency of molecular docking programs.
{"title":"A Performance and Energy Evaluation of OpenCL-accelerated Molecular Docking","authors":"Leonardo Solis-Vasquez, A. Koch","doi":"10.1145/3078155.3078167","DOIUrl":"https://doi.org/10.1145/3078155.3078167","url":null,"abstract":"Molecular Docking is a methodology used extensively in modern drug design. It aims to predict the binding position of two molecules by calculating the energy of their possible binding poses. One of the most cited docking tools is AutoDock. At its core, it solves an optimization problem by generating a large solution space of possible poses, and searches among them for the one having the lowest energy. These complex algorithms thus benefit from parallelization based run-time acceleration. This work presents an OpenCL implementation of AutoDock, and a corresponding performance evaluation on two different platforms based on multi-core CPU and GPU accelerators. It shows that OpenCL allows highly efficient docking simulations, achieving speedups of ~4x and ~56x over the original serial AutoDock version, as well as energy efficiency gains of ~2x and ~6x. respectively. To the best of our knowledge, this work is the first one also considering the energy efficiency of molecular docking programs.","PeriodicalId":267581,"journal":{"name":"Proceedings of the 5th International Workshop on OpenCL","volume":"10 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-05-16","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122224813","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
The Production-CL library for iterative scientific calculations with OpenCL is presented. The main goal is to get rid of long repeating lines of standard code which slow down the development process, and realize the typical workflow elements for simulation of physics problems. Main entities of PCL library are: (i) kernel (called with single line resembling CUDA kernel invocation) and (ii) batch of kernels (to help constructing complex step of each iteration). In addition, PCL realizes the procedures standard for scientific calculations 'in production': typical cycle of iterations with main step and regular save/load the whole state, to save work. As an example of library application, we show and compare several projects developed with different approaches.
{"title":"Production-CL library for iterative scientific calculations","authors":"P. Kartsev","doi":"10.1145/3078155.3078162","DOIUrl":"https://doi.org/10.1145/3078155.3078162","url":null,"abstract":"The Production-CL library for iterative scientific calculations with OpenCL is presented. The main goal is to get rid of long repeating lines of standard code which slow down the development process, and realize the typical workflow elements for simulation of physics problems. Main entities of PCL library are: (i) kernel (called with single line resembling CUDA kernel invocation) and (ii) batch of kernels (to help constructing complex step of each iteration). In addition, PCL realizes the procedures standard for scientific calculations 'in production': typical cycle of iterations with main step and regular save/load the whole state, to save work. As an example of library application, we show and compare several projects developed with different approaches.","PeriodicalId":267581,"journal":{"name":"Proceedings of the 5th International Workshop on OpenCL","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-05-16","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129256312","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
In the current landscape of C++ applications, there is an increasing need of including different levels of support for heterogeneous platforms, where multiple specialised devices collaborate to execute an application. In this context, the SYCL standard[8] has been published by Khronos, providing a C++ abstraction layer on top of OpenCL[9] that enables single-source programming for a large number of heterogeneous devices. SYCL single-source programming and task data-flow approach enable developers to leverage modern programming techniques on heterogeneous platforms. In this paper, we present SYCL-BLAS, a BLAS implementation using SYCL that uses Expression Tree templates to generate BLAS kernels. This technique is then used to demonstrate seamless kernel fusion via composition of tree nodes. We also demonstrate how SYCL can be used to quickly develop libraries for heterogeneous systems by providing sufficient levels of abstraction.
{"title":"SYCL-BLAS: Leveraging Expression Trees for Linear Algebra","authors":"J. Aliaga, Ruymán Reyes, M. Goli","doi":"10.1145/3078155.3078189","DOIUrl":"https://doi.org/10.1145/3078155.3078189","url":null,"abstract":"In the current landscape of C++ applications, there is an increasing need of including different levels of support for heterogeneous platforms, where multiple specialised devices collaborate to execute an application. In this context, the SYCL standard[8] has been published by Khronos, providing a C++ abstraction layer on top of OpenCL[9] that enables single-source programming for a large number of heterogeneous devices. SYCL single-source programming and task data-flow approach enable developers to leverage modern programming techniques on heterogeneous platforms. In this paper, we present SYCL-BLAS, a BLAS implementation using SYCL that uses Expression Tree templates to generate BLAS kernels. This technique is then used to demonstrate seamless kernel fusion via composition of tree nodes. We also demonstrate how SYCL can be used to quickly develop libraries for heterogeneous systems by providing sufficient levels of abstraction.","PeriodicalId":267581,"journal":{"name":"Proceedings of the 5th International Workshop on OpenCL","volume":"35 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-05-16","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129733810","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}