zoukankan      html  css  js  c++  java
  • OneAPI

    #!/bin/bash
    
    USE_CUDA=false
    WORK_SPACE=~/xyt/
    
    install_packages() {
    	echo -e "-------------------- Install packages --------------------"
    	sudo apt-get install git
    	sudo apt-get install cmake
    	sudo apt-get install python3
    	sudo apt-get install ninja-build
    	pip install psutil
    }
    
    install_onemkl() {
    	echo -e "-------------------- Install OneMKL --------------------"
    	if [ -d ~/intel/oneapi/mkl/2021.3.0/ ]; then
    		echo "OneMKL found"
    		echo "~/intel/oneapi/mkl/2021.3.0/"
    	else
    		wget https://registrationcenter-download.intel.com/akdlm/irc_nas/17901/l_onemkl_p_2021.3.0.520_offline.sh
    		sh l_onemkl_p_2021.3.0.520_offline.sh
    		rm -rf l_onemkl_p_2021.3.0.520_offline.sh
    	fi
    }
    
    install_dpcpp() {
    	echo -e "-------------------- Install CLANG++ and DPCPP --------------------"
    	export DPCPP_HOME=~/sycl_workspace/
    	if [ -d $DPCPP_HOME ]; then
    		echo "CLANG++ and DPCPP found"
    		echo $DPCPP_HOME
    	else
    		mkdir $DPCPP_HOME
    		cd $DPCPP_HOME
    		git clone https://github.com.cnpmjs.org/intel/llvm -b sycl
    		if [ $USE_CUDA ]; then
    			python $DPCPP_HOME/llvm/buildbot/configure.py --cuda
    		else
    			python $DPCPP_HOME/llvm/buildbot/configure.py
    		fi
    		python $DPCPP_HOME/llvm/buildbot/configure.py
    		python $DPCPP_HOME/llvm/buildbot/compile.py
    		python $DPCPP_HOME/llvm/buildbot/check.py
    	fi
    }
    
    create_env() {
    	echo -e "-------------------- Create OneAPI env --------------------"
            export DPCPP_HOME=~/sycl_workspace/
    	cd $WORK_SPACE
    	rm -rf env_oneapi.sh
    	echo "# TODO: configure DPCPP_ROOT/MKL_DPCPP_ROOT
    export DPCPP_ROOT=${DPCPP_HOME}llvm/build
    export MKL_DPCPP_ROOT=~/intel/oneapi/mkl/2021.3.0
    export LD_LIBRARY_PATH=${DPCPP_ROOT}/lib:${LD_LIBRARY_PATH}
    export LD_LIBRARY_PATH=${MKL_DPCPP_ROOT}/lib/ia32:${MKL_DPCPP_ROOT}/lib/intel64:${LD_LIBRARY_PATH}
    export PATH=${DPCPP_ROOT}/bin:$PATH
    export INTELOCLSDKROOT=${DPCPP_ROOT}
    export SYCLROOT=${DPCPP_ROOT}" >> env_oneapi.sh
    }
    
    runtime_test() {
    	echo -e "-------------------- Runtime test --------------------"
    	cd $WORK_SPACE
    	rm -rf simple-sycl-app.cpp
    	rm -rf simple-sycl-app.exe
    	source env_oneapi.sh
    	echo "
    #include <iostream>
    #include <ctime>
    #include <math.h>
    #include <string>
    #include <CL/sycl.hpp>
    using namespace std;
    using namespace sycl;
    clock_t start;
    const size_t len = 2048*2048*100;
    void output_dev_info( const device& dev, const std::string& selector_name) {
    	std::cout << selector_name << ": Selected device: " <<
    	dev.get_info<info::device::name>() << "
    ";
    	std::cout << " -> Device vendor: " <<
    	dev.get_info<info::device::vendor>() << "
    ";
    }
    int main() {
    	output_dev_info( device{ default_selector{}}, "default_selector" );
    	output_dev_info( device{ host_selector{}}, "host_selector" );
    	output_dev_info( device{ gpu_selector{}}, "gpu_selector" );
    	
    	float *a = new float[len]; memset(a, 123, len*sizeof(float));
    	float *b = new float[len]; memset(b, 22, len*sizeof(float));
    	float *c = new float[len];
    	queue Q(gpu_selector{});
    	float *a_dev = malloc_device<float>(len, Q);
    	float *b_dev = malloc_device<float>(len, Q);
    	float *c_dev = malloc_device<float>(len, Q);
    		
    	start=clock();
    	for(int i=0;i<len;i++) c[i] = sqrt(a[i]) * b[i];
    	long time_cpu = clock() - start;
    	cout << time_cpu << std::endl;
    	
    	start=clock();
    	Q.submit([&](handler &h) {
    		h.parallel_for(len, [=](id<1> i) {
    			c_dev[i] = sqrt(a_dev[i]) * b_dev[i];
    		});
    	}).wait();
    	long time_xpu = clock() - start;
    	cout << time_xpu << std::endl;
    	cout << (float)time_cpu / time_xpu << std::endl;
    	
    	return 0;
    }
    " >> simple-sycl-app.cpp
    	if [ $USE_CUDA ]; then
    		clang++ -fsycl simple-sycl-app.cpp -o simple-sycl-app.exe
    	else
    		clang++ -fsycl -fsycl-targets=nvptx64-nvidia-cuda-sycldevice simple-sycl-app.cpp -o simple-sycl-app.exe
    	fi
    	./simple-sycl-app.exe
    }
    
    
    install_packages
    install_onemkl
    install_dpcpp
    create_env
    runtime_test
    
  • 相关阅读:
    64位Windows2008下插入Oracle中文乱码问题解决
    .net自定义WebService WSDL
    IE8下调用Active控件
    IIS7.5下发布应用程序备忘
    在aws ec2上使用root用户登录
    win2008 服务器文件夹权限配置
    thinkphp3.1 多表联合查询代码
    并发 并行 同步 异步 多线程的区别
    学习ES6生成器(Generator)
    node.js+socket.io配置详解
  • 原文地址:https://www.cnblogs.com/xytpai/p/15049823.html
Copyright © 2011-2022 走看看