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
    
  • 相关阅读:
    关于celery踩坑
    关于git的分批提交pull requests流程
    SymGAN—Exploiting Images for Video Recognition: Heterogeneous Feature Augmentation via Symmetric Adversarial Learning学习笔记
    AFN—Larger Norm More Transferable: An Adaptive Feature Norm Approach for Unsupervised Domain Adaptation学习笔记
    Learning to Transfer Examples for Partial Domain Adaptation学习笔记
    Partial Adversarial Domain Adaptation学习笔记
    Partial Transfer Learning with Selective Adversarial Networks学习笔记
    Importance Weighted Adversarial Nets for Partial Domain Adaptation学习笔记
    Exploiting Images for Video Recognition with Hierarchical Generative Adversarial Networks学习笔记
    improved open set domain adaptation with backpropagation 学习笔记
  • 原文地址:https://www.cnblogs.com/xytpai/p/15049823.html
Copyright © 2011-2022 走看看