Proceedings of the 2023 International Workshop on OpenCL最新文献

筛选
英文 中文
Tutorial: Introduction to SYCL 教程:SYCL的介绍
Proceedings of the 2023 International Workshop on OpenCL Pub Date : 2023-04-18 DOI: 10.1145/3585341.3585370
Adelais Mills, Rod Burns
{"title":"Tutorial: Introduction to SYCL","authors":"Adelais Mills, Rod Burns","doi":"10.1145/3585341.3585370","DOIUrl":"https://doi.org/10.1145/3585341.3585370","url":null,"abstract":"0.1 Format A half-day workshop (4 hours, with space for 40 participants) 0.2 Proposal This introductory workshop explores the challenges of programming for heterogeneous high performance computing systems. In order to grow the SYCL community, we need not just experts but new users to try out the technology. In this hands-on training, learners will be guided by Intel-qualified Research Software Engineers from Research Computing Services at the University of Cambridge. The team have delivered this training to multiple audiences over the last several years. The workshop will explain how SYCL can solve the challenges of programming in a heterogeneous world. It will help learners to use tools like Intel’s oneAPI to enable their research workflows. The workshop will provide an introduction to the SYCL language and programming model with an emphasis on practical exercises. Learners will be led through short presentations, followed by exercises giving them a solid foundation to build on. Learners will gain experience in using the SYCL programming language to target different types of accelerator devices (e.g., CPUs, GPUs, FPGAs). Research Computing Services will provide access to the CSD3 supercomputer at Cambridge for the purpose of the workshop. The session will include familiarisation on the use Jupyter notebooks and a programming challenge towards the end. The modules to be covered include:","PeriodicalId":360830,"journal":{"name":"Proceedings of the 2023 International Workshop on OpenCL","volume":"81 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-04-18","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129168896","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}
引用次数: 0
Towards a SYCL API for Approximate Computing 面向近似计算的SYCL API
Proceedings of the 2023 International Workshop on OpenCL Pub Date : 2023-04-18 DOI: 10.1145/3585341.3585374
Lorenzo Carpentieri, Biagio Cosenza
{"title":"Towards a SYCL API for Approximate Computing","authors":"Lorenzo Carpentieri, Biagio Cosenza","doi":"10.1145/3585341.3585374","DOIUrl":"https://doi.org/10.1145/3585341.3585374","url":null,"abstract":"Approximate computing is a well-known method [7] to achieve higher performance or lower energy consumption while accepting a loss of output accuracy. Many applications such as image processing and neural networks, are tolerant of a certain amount of error, and have the potential for significant improvements in terms of execution time and energy consumption. The most advanced software approximation techniques are mixed precision, which uses a lower precision data representation for both integer and floating point variables [1, 4]; perforation, which skips instruction blocks in a program, iterations in a loop, or data in buffers assuming that nearby data have similar values [2, 5, 6, 8]; and relaxed synchronization which removes synchronization points that represent one of the major bottleneck in parallel applications [3, 9]. These approximate approaches differ in performance achieved and also in error produced. Usually, perforation and synchronization elision have higher performance compared with mixed precision but produce more errors. In particular, synchronization elision introduces non-deterministic errors that are complex to handle. Support for approximate computing is provided by the SYCL heterogeneous programming model often used for developing portable HPC applications. SYCL supports approximate computing by providing a set of built-in functions and data types that can be used to perform approximate operations, such as half-floating-point reductions and bit-level operations. In this technical talk, we present SYprox, a SYCL-based API supporting a broad set of approximation techniques in modern C++. SYprox introduces a set of semantics that extend SYCL’s buffers and accessors to provide a high-level easy-to-use programming API. It supports data perforation and elision patterns for efficient approximation, as well as signal reconstruction algorithms for error mitigation. Figure 1 (a) depicts the accurate execution of an application while Figure 1 (b) shows the approximation process: an input buffer is perforated according to the chosen schema, and the perforated data can be approximated before or after computation using respectively input or output reconstruction. The code snippet below illustrates the accurate version of a SYCL program and our proposed approximate approach using SYprox: Figure 2 shows a visual representation of the schemes on 1D and 2D buffers. Gray components are perforated, whereas blue-colored elements are computed. Schemes (a) and (b) can be applied to 2D buffers and respectively calculate a row and column of results. Also, scheme (c) is applicable to 2D buffers and perforates data following a checkerboard layout. Finally, schema (d) works on 1D buffers and perforates data according to a user-defined skip factor. As applying perforation strategies introduce errors in the final output, the developed library also provides two types of reconstruction techniques to mitigate applications error: output and input reconstructio","PeriodicalId":360830,"journal":{"name":"Proceedings of the 2023 International Workshop on OpenCL","volume":"11 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-04-18","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128936047","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}
引用次数: 0
Transforming Fortran weather and climate applications to OpenCL using PSyclone 使用PSyclone将Fortran天气和气候应用程序转换为OpenCL
Proceedings of the 2023 International Workshop on OpenCL Pub Date : 2023-04-18 DOI: 10.1145/3585341.3585360
Sergi Siso, A. Porter, R. Ford
{"title":"Transforming Fortran weather and climate applications to OpenCL using PSyclone","authors":"Sergi Siso, A. Porter, R. Ford","doi":"10.1145/3585341.3585360","DOIUrl":"https://doi.org/10.1145/3585341.3585360","url":null,"abstract":"Specialized hardware accelerators have gained popularity in high-performance computing as a way to increase the performance and power efficiency characteristics of the systems. However, a large number of scientific applications running on these systems are written in Fortran, which does not provide a performance-portable vendor-agnostic API to target heterogeneous architectures. In this paper, we use the PSyclone source-to-source code generation and transformation system to automatically translate a subset of the Fortran language to OpenCL for weather and climate applications conforming to the PSyKAl kernel-based parallelism model. This allows Fortran applications to take advantage of the mature accelerator portability and runtime compilation capabilities of OpenCL. However, a direct translation does not always produce optimal code for each device. To improve the performance portability of the generated code, the presented approach also allows application developers to provide a list of additional code transformations needed to make the generated OpenCL kernels appropriate for each target architecture. We tested the system with the NEMOLite2D Fortran application, which produced competitive performance portability results for CPU and GPU platforms from different vendors and provided an initial port of the application to an FPGA system.","PeriodicalId":360830,"journal":{"name":"Proceedings of the 2023 International Workshop on OpenCL","volume":"181 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-04-18","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124533567","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}
引用次数: 0
Open Standard Software Stack for Low Latency Offloading from Lightweight Devices to Remote Heterogeneous Platforms 用于从轻量级设备到远程异构平台的低延迟卸载的开放标准软件堆栈
Proceedings of the 2023 International Workshop on OpenCL Pub Date : 2023-04-18 DOI: 10.1145/3585341.3585376
Jan Solanti, Topi Leppänen, P. Jääskeläinen
{"title":"Open Standard Software Stack for Low Latency Offloading from Lightweight Devices to Remote Heterogeneous Platforms","authors":"Jan Solanti, Topi Leppänen, P. Jääskeläinen","doi":"10.1145/3585341.3585376","DOIUrl":"https://doi.org/10.1145/3585341.3585376","url":null,"abstract":"","PeriodicalId":360830,"journal":{"name":"Proceedings of the 2023 International Workshop on OpenCL","volume":"66 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-04-18","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121575060","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}
引用次数: 0
Tutorial: SYCL Techniques and Best Practices 教程:SYCL技术和最佳实践
Proceedings of the 2023 International Workshop on OpenCL Pub Date : 2023-04-18 DOI: 10.1145/3585341.3585373
Rod Burns, Hugh Delaney, Aksel Alpay, R. Keryell, Igor Vorobtsov
{"title":"Tutorial: SYCL Techniques and Best Practices","authors":"Rod Burns, Hugh Delaney, Aksel Alpay, R. Keryell, Igor Vorobtsov","doi":"10.1145/3585341.3585373","DOIUrl":"https://doi.org/10.1145/3585341.3585373","url":null,"abstract":"The tutors involved in this tutorial have presented multiple times at IWOCL and SYCLcon and have helped to expand and develop the SYCL Academy open source learning materials. This tutorial brings a more advanced set of lessons. The SYCL programming model means heterogeneous programming using C++ is now more accessible than ever. SYCL uses modern standard C++, and it’s a programming model that lets developers support a wide variety of devices (CPUs, GPUs, FPGAs, and more) from a single code base. The growing popularity of this programming model means that developers are eager to understand how to use all the features of SYCL and how to achieve great performance for their code. Gain further expertise of SYCL in a practical environment focused more on writing code than Powerpoint with help from experts in the SYCL community. This tutorial assumes existing knowledge and some experience of using SYCL to develop code for accelerators such as GPUs. The concepts introduced to attendees will cover some of the topics that build on the fundamentals of SYCL including strategies for optimizing code, managing data flow, how to use different memory access patterns, understanding work group sizes, using vectorization, the importance of ND ranges, and making the most of the multiple devices available on your architecture. The majority of the tutorial consists of hands-on coding activities, these exercises have been tried and tested at previous conferences and are regularly updated to improve the learning experience. We anticipate significant improvements to these this year. Almost every short presentation is accompanied by a session where attendees will run through a coding exercise. The tutorial organizers will provide several ways to run through the code examples, either on the attendee’s own laptop where possible, but also in a cloud environment giving access to a hosted multi-GPU system. Attendees can choose to use multiple SYCL compilers and target different processors from multiple vendors. Tutors (confirmation of in person attendance is pending but at least 2-3 tutors will be present):","PeriodicalId":360830,"journal":{"name":"Proceedings of the 2023 International Workshop on OpenCL","volume":"9 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-04-18","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124269901","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}
引用次数: 0
Portability and Scaling of the DPEcho GR-MHD SYCL code: What’s new for numerical Astrophysics in SYCL2020 DPEcho GR-MHD SYCL代码的可移植性和可伸缩性:SYCL2020中数值天体物理学的新内容
Proceedings of the 2023 International Workshop on OpenCL Pub Date : 2023-04-18 DOI: 10.1145/3585341.3585382
Alexander Pöppl, S. Cielo, Margarita Egelhofer
{"title":"Portability and Scaling of the DPEcho GR-MHD SYCL code: What’s new for numerical Astrophysics in SYCL2020","authors":"Alexander Pöppl, S. Cielo, Margarita Egelhofer","doi":"10.1145/3585341.3585382","DOIUrl":"https://doi.org/10.1145/3585341.3585382","url":null,"abstract":"","PeriodicalId":360830,"journal":{"name":"Proceedings of the 2023 International Workshop on OpenCL","volume":"43 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-04-18","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"115676913","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}
引用次数: 0
Accelerate Machine Learning Workloads using TVM and OpenCL ML SDK on Qualcomm AdrenoTM GPUs 在Qualcomm AdrenoTM gpu上使用TVM和OpenCL ML SDK加速机器学习工作负载
Proceedings of the 2023 International Workshop on OpenCL Pub Date : 2023-04-18 DOI: 10.1145/3585341.3587104
S. B, Hongqiang Wang, Krishna Raju Vegiraju, Balaji Calidas, Alex Bourd
{"title":"Accelerate Machine Learning Workloads using TVM and OpenCL ML SDK on Qualcomm AdrenoTM GPUs","authors":"S. B, Hongqiang Wang, Krishna Raju Vegiraju, Balaji Calidas, Alex Bourd","doi":"10.1145/3585341.3587104","DOIUrl":"https://doi.org/10.1145/3585341.3587104","url":null,"abstract":"","PeriodicalId":360830,"journal":{"name":"Proceedings of the 2023 International Workshop on OpenCL","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-04-18","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130427186","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}
引用次数: 0
Introduction to TTL, an Open Source Tensor and Tiling Library for OpenCL TTL简介,一个开源的OpenCL张量和平铺库
Proceedings of the 2023 International Workshop on OpenCL Pub Date : 2023-04-18 DOI: 10.1145/3585341.3587953
Christopher Gearing, A. Zaks
{"title":"Introduction to TTL, an Open Source Tensor and Tiling Library for OpenCL","authors":"Christopher Gearing, A. Zaks","doi":"10.1145/3585341.3587953","DOIUrl":"https://doi.org/10.1145/3585341.3587953","url":null,"abstract":"OpenCL has an Image data type to represent multi-dimensional arrays of image data for processing in device Kernels. Whilst providing powerful functionality for image processing, they are designed towards the capabilities of GPUs and provide closed opaque functionality and data formats. This presentation presents a recently released Open-Source library, “Tensor and Tiling library”. TTL has been created to support multi-dimensional data for non-GPUs. Like the GPU Image type, the TTL tensor type has built-in attributes to describe its shape, layout and underlying data. The library provides methods for reading, writing, reasoning about the relative positioning of related Tensors, and attributes of the data beyond the extent of the Tensor. OpenCL C provides asynchronous data copy functions built into the language, allowing data transportation between the host and device memory systems. Many usage patterns where the devices have limited memory require the data to be Tiled and then pipelined through the device. Whilst the OpenCL primitives make this pipelining possible, the pipelining code can be a significant part of the development effort when the actual value added is the algorithm implementation itself. The TTL library offloads the tiling and pipelining boilerplate code allowing the programmer to focus on algorithm development. The presentation will present the Tensor and Tiling library. The library today is temporarily hosted at https://gitlab.khronos.org/opencl/ttl and, by the time of IWOCL 2023, will be finally hosted at https://github.com/KhronosGroup","PeriodicalId":360830,"journal":{"name":"Proceedings of the 2023 International Workshop on OpenCL","volume":"32 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-04-18","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133609350","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}
引用次数: 0
Towards Alignment of Parallelism in SYCL and ISO C++ 在SYCL和ISO c++中平行度的对齐
Proceedings of the 2023 International Workshop on OpenCL Pub Date : 2023-04-18 DOI: 10.1145/3585341.3585371
S. Pennycook, Ben Ashbaugh, James C. Brodman, M. Kinsner, Steffen Larsen, G. Lueck, Roland Schulz, Michael J. Voss
{"title":"Towards Alignment of Parallelism in SYCL and ISO C++","authors":"S. Pennycook, Ben Ashbaugh, James C. Brodman, M. Kinsner, Steffen Larsen, G. Lueck, Roland Schulz, Michael J. Voss","doi":"10.1145/3585341.3585371","DOIUrl":"https://doi.org/10.1145/3585341.3585371","url":null,"abstract":"SYCL began as a C++ abstraction for OpenCL concepts, whereas parallelism in ISO C++ evolved from the algorithms in the standard library. This history has resulted in the two specifications using different terminology to describe parallelism, which is confusing to developers and hinders the SYCL community’s efforts to influence the direction of C++ through experiments and proof points. Critically, SYCL does not provide mechanisms for developers to reason about specific device behaviors that may impact the execution of parallel programs, such as the forward progress guarantees at various levels of the execution model hierarchy. The N-dimensional range (ND-range) execution model currently defined by SYCL extends the C++ model, but does not relate it to concepts or formalisms of C++ parallelism. This paper presents: (1) a detailed analysis of parallelism terminology in SYCL and ISO C++; (2) proposed modifications to the SYCL standard, to align with C++17; and (3) a generalized abstract ND-range execution model introducing the notion of hierarchical forward progress guarantees. To demonstrate the potential impact of these changes, we outline a new extension to SYCL enabling developers to understand and potentially control device behavior across the hierarchy. Although discussed in the context of SYCL, the changes outlined in this paper have broader implications for all languages building upon an ND-range model (e.g. OpenCL). Our abstract hierarchical execution model applies generally to modern data parallel languages, many of which don’t yet comprehend the hierarchical nature of the hardware architectures that they target.","PeriodicalId":360830,"journal":{"name":"Proceedings of the 2023 International Workshop on OpenCL","volume":"58 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-04-18","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"123839235","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}
引用次数: 0
Toward a CAD Tool for SYCL programming 一个用于SYCL编程的CAD工具
Proceedings of the 2023 International Workshop on OpenCL Pub Date : 2023-04-18 DOI: 10.1145/3585341.3585358
E. Fabiani, Loïc Lagadec, Alexandre Skrzyniarz, Chiara Relevat, Erell Cottour, Paul Allaire
{"title":"Toward a CAD Tool for SYCL programming","authors":"E. Fabiani, Loïc Lagadec, Alexandre Skrzyniarz, Chiara Relevat, Erell Cottour, Paul Allaire","doi":"10.1145/3585341.3585358","DOIUrl":"https://doi.org/10.1145/3585341.3585358","url":null,"abstract":"This poster discusses the design and operation of a CAD tool for the SYCL standard. The availability of heterogeneous platforms combining multicore, FPGA, GPGPU, manycores, CGRA on the same chip is of growing importance. A full exploitation of the available heterogeneous computing power goes through mastering the complexity of the different underlying computing models and their interactions. The SYCL standard addresses this challenge, by standardizing the definition of computing cores and memory transfers, simplifying the portability of cores (between devices on the same platform) or their reuse on different platforms. This indeed simplifies the programming of heterogeneous platforms, yet, the design space exploration, especially driving the choice of granularity of cores and their execution device, remains a major concern. Moreover, expressing dependencies between kernels through memory transfers may induce error-prone execution. Conversely, automatic code generation based on directly expressed relationships between kernels tackles this issue. The objective of our framework is to design methods and tools to solve SYCL program design problems, by following a model-driven engineering methodology. Looking for high performances during the design phase always induces an additional complexity. Our claim is that this complexity can be gradually absorbed by mastering a good development methodology relying on an automatic step-by-step refinement during implementation. Two main problems are highlighted here. The first one concerns the correspondence between the abstract model of kernel dependencies and their expression in SYCL. Defining dependencies via memory transfers limits the analysis of existing code, hence evolution and continuous verification of its structural compliance with the initial specifications. Conversely, automatic generation of interaction code from a high-level model is a way to increase productivity and reliability. The second concerns the exploration of the space of possible solutions for an application, due to the possibility of implementing a kernel on several hardware supports. This raises the question of choosing the best solutions for a given study case by generating and scoring different variants. Manually programming these variants is time-consuming and error-prone, and naturally leads to design space pruning, leaving apart some non-trivial good candidates. Instead, having an environment to generate them automatically is part of the solution. The core of our framework is a high-level object model of all the kernels of an application and their dependencies. This model is made up of classes that reflect the structure of a SYCL program, seen as a graph whose nodes are the command groups that depend on the data they manipulate. The Data class, which characterizes an accessor, is associated with a variable (type, number of dimensions, size of each dimension) and provides its name and access mode (read, write, read_write). In the ca","PeriodicalId":360830,"journal":{"name":"Proceedings of the 2023 International Workshop on OpenCL","volume":"20 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-04-18","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128264784","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}
引用次数: 0
0
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
确定
请完成安全验证×
相关产品
×
本文献相关产品
联系我们:info@booksci.cn Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。 Copyright © 2023 布克学术 All rights reserved.
京ICP备2023020795号-1
ghs 京公网安备 11010802042870号
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术官方微信