win10 + vs2017 + cuda11.1 + pycuda + boostインストールチュートリアル

1はじめに

Anacondaとcudaはデフォルトでインストールされています。このブログ投稿では、関連する環境の構成について簡単に説明しています。

2.VS2017

vs2017をダウンロードし、c ++およびpython開発ツールを選択し
ここに画像の説明を挿入
て環境変数追加します。変数Pathに、cl.exeのフルパスを追加します。フルパスは、「C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ VC \ Tools \ MSVC \ 14.16.27023 \ bin \ Hostx64 \ x64 \ cl.exe "
ここに画像の説明を挿入
チェック
ここに画像の説明を挿入

3. cuda11

CUDA公式ウェブサイトにアクセスしてCUDAをダウンロードし、自動的に追加されたパスに加えて、新しいパスを追加します

CUDA_PATH = C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v11.1
CUDA_SDK_PATH = C:\ ProgramData \ NVIDIA Corporation \ CUDA Samples \ v11.1
CUDA_LIB_PATH =%CUDA_PATH%\ lib \ x64
CUDA_BIN_PATH =%CUDA_PATH%\ bin
CUDA_SDK_BIN_PATH =%CUDA_SDK_PATH%\ bin \ win64
CUDA_SDK_LIB_PATH =%CUDA_SDK_PATH%\ common \ lib \ x64

4.pycuda

インストール

pip install pycuda

テスト


import pycuda.autoinit
import pycuda.driver as drv
import numpy
 
from pycuda.compiler import SourceModule
mod = SourceModule("""
__global__ void multiply_them(float *dest, float *a, float *b)
{
  const int i = threadIdx.x;
  dest[i] = a[i] * b[i];
}
""")
 
multiply_them = mod.get_function("multiply_them")
 
a = numpy.random.randn(400).astype(numpy.float32)
b = numpy.random.randn(400).astype(numpy.float32)
 
dest = numpy.zeros_like(a)
multiply_them(
        drv.Out(dest), drv.In(a), drv.In(b),
        block=(400,1,1), grid=(1,1))
 
print ( dest-a*b )

ここに画像の説明を挿入

5.ブースト

vs2017のx64コマンドラインを開き、
ここに画像の説明を挿入
ブースト解凍パスに切り替え、
ここに画像の説明を挿入
bootstrap.batを
ここに画像の説明を挿入
実行し、bjam.exeを実行して
ここに画像の説明を挿入
、正常に動作した後に表示します
ここに画像の説明を挿入

6.テストブースト

  • VS2019を開き、新しい空のC ++プロジェクトを作成して、main.cppファイルを作成します。プロジェクトのプロパティをクリックします。
  • .vc ++ディレクトリで、ブーストパスD:\ aboost \ boost_1_73_0をvc ++ディレクトリに追加し、
    D:\ aboost \ boost_1_73_0 \ stage \ libをライブラリディレクトリに追加します。それを保存。
    ここに画像の説明を挿入

テストコード

#include <iostream>
#include <boost/sort/sort.hpp>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
    
    
    vector<int> arr;
    while (arr.size() < 100) arr.push_back(std::rand());
    boost::sort::block_indirect_sort(std::begin(arr), std::end(arr));
    for_each(std::begin(arr), std::end(arr), [](int& a) {
    
    
        cout << a << "\t";
        });
    return 0;

}

テスト結果
ここに画像の説明を挿入
注:ここで実行するには、コマンドラインで以前に選択したバージョンを選択する必要があります。そうしないと、ブーストが含まれず、エラーが発生します。ここでの私の選択はここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_42990464/article/details/110918096