阅读 115

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/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 --------------------"
	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 
#include 
#include 
#include 
#include 
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() << \"\n\";
	std::cout << \" -> Device vendor: \" <<
	dev.get_info() << \"\n\";
}
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(len, Q);
	float *b_dev = malloc_device(len, Q);
	float *c_dev = malloc_device(len, Q);
		
	start=clock();
	for(int i=0;i 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

原文:https://www.cnblogs.com/xytpai/p/15049823.html

文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐