タグ

ブックマーク / qiita.com/termoshtt (8)

  • Rustcに付随しているLLVMを使う - Qiita

    注:以下の方法はWindows(*-pc-windows-msvc)では使えません Rustはアセンブラを生成するためにLLVMのライブラリを使います。これはtoolchainに含まれていて、例えばお手元の~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/codegen-backendsを覗いてみてください(ちなみにlibcoreやlibstdもこの辺にあります)。ここにlibrustc_codegen_llvm-llvm.soという共有ファイルがあり、これにLLVMのライブラリが含まれています。 一方、ユーザーがRustでLLVMを使う方法としては、例えば以下の記事でも紹介されていますが、llvm-sysがあります。 RustでLLVMしてみたメモ llvm-

    Rustcに付随しているLLVMを使う - Qiita
  • cc-rs crateでCUDAをコンパイルする - Qiita

    Rustにはccというcrateがあって、build.rs内でC/C++のコードをコンパイルしてリンクするのに便利なのですが、これがCUDAもコンパイルできるらしいので試してみた記録(を発掘したので和訳)したものです。 発掘現場:https://github.com/termoshtt/link_cuda_kernel CUDAサンプルにあるvector_add.cuをkernel.cuとしてコピーしてきます。 /** CUDA Kernel Device code */ __global__ void vectorAdd(const float *A, const float *B, float *C, int numElements) { int i = blockDim.x * blockIdx.x + threadIdx.x; if (i < numElements) { C[i]

    cc-rs crateでCUDAをコンパイルする - Qiita
  • Rustによる数値計算: 線形代数編 - Qiita

    Rust Advent Calendar 12/4の記事です 以前にRustで1次元のNewton法を実装する記事を書きましたが、実際の科学技術計算では多次元のベクトルの扱いが必要になります。 PythonではNumPyで提供されているnumpy.ndarrayが中心的な役割を果たしますが、 今回はRustによる多次元配列の実装であるrust-ndarrayを使用します。 しかしこのcrateにはベクトルの演算と行列xベクトルの演算までしか実装されておらずQR分解や特異値分解、 あるいは高速Fourier変換のような演算は実装されていません。 このままだと自分でアルゴリズムを書くのに支障があるため、基的な部分を実装してきました。 rust-ndarray rust-ndarrayはnumpyのものと同じで一つの連続したメモリとstridesと呼ばれる各インデックス毎のとび幅からなっていま

    Rustによる数値計算: 線形代数編 - Qiita
  • 硬い微分方程式を解く - Qiita

    この記事では硬い線形項が存在する非線形な常微分方程式を数値的に解く方法を解説し、Rustのライブラリであるeomを使用して乱流の自己再帰的なカスケードのモデルであるGOYシェルモデルを数値的に解いてみます。 硬い微分方程式とは 数学において硬い方程式(英: stiff equation)は、近似解を計算するためのある数値的方法が、刻み幅を極めて小さくしない限り、数値的不安定になる微分方程式である。 硬い方程式 - Wikipedia 特に時間一階の微分の初期値問題 $$ \frac{dx}{dt} = f(x(t), t), x(0) = x_0 $$ において「硬い」とは時間方向に1step進める際の増分を十分小さくとるために差分$\Delta t$を非常に小さくとる必要がある問題の事です。簡単のためにオイラー法で考えてみましょう: $$ x(t+ \Delta t) = x(t) +

    硬い微分方程式を解く - Qiita
  • Accel: GPGPU framework for Rust - Qiita

    これはRust Advent Calendar 2017 3日目の記事です 今回は現在開発中であるRustによるGPGPUプログラミングのためのフレームワークAccelを紹介します。 GPUを使った汎用計算の技術(GPGPU)は伝統的なHigh Performance Computing (HPC)業界だけでなく、機械学習等への応用も広がり現代では欠かせない技術です。GPUの利用には大きく分けて3つの段階があります: 高速化されたライブラリを使用する(cuBLAS, cuDNN等) CPU用のコードに僅かな変更を加えてGPUで動くようにする(OpenACC) GPU用のコードを設計・開発する(CUDA) 下に行くほど開発難度が増大します。 最近はOpenACCに力を入ているようで、ごく僅かな変更で大幅な高速化が期待できると宣伝しているのをよく見ます 1。 高速化されたライブラリの使用は基

    Accel: GPGPU framework for Rust - Qiita
  • RustでCUDAカーネルを書く - Qiita

    数値計算をする以上GPUを使用できないというのは現代では致命的だ。 この記事ではCUDA経由でGPURustから使う方法についてまとめる。 特に今回はRustでCUDAカーネルを記述することに挑戦する。 Write CUDA kernel in Rust Rustは2016/12よりNVPTXへのコンパイルに対応している。NVPTXとはLLVMの一部で、nvidia GPU用のアセンブラのようなものである。CUDAで書かれたkernelは一旦NVPTXに変換されて最適化された後、GPUの命令に変換される。 補足(7/3) NVVMとNVPTXを混同している。LLVM IR上に構築されたCUDA用の拡張がNVVM IRで、llvm.nvvm.*の名前空間にマージされている。以下で使用しているアノテーションやレジスタもNVVM IRのものである。一方PTXは"a low-level para

    RustでCUDAカーネルを書く - Qiita
  • RustでNumPyを拡張する - Qiita

    Pythonの利点 対話的にデータの加工、解析、可視化 on Jupyter グルー言語的用法 公式・非公式によってPythonインターフェースはだいたい用意されている pip/wheel、あるいはanacondaによる環境構築の容易さ Pythonの問題点 Python自体の動作が低速 高速化の取り組み Cython コンパイルできるPythonに近いDSLを定義してコンパイルして実行する Numba PythonのコードをLLVMにコンパイルして実行する Theano Python上で埋め込みDSLによって計算を構築して、それを高速なバックエンドで実行する FFI 既に存在する高速に動作するライブラリ(C/Fortran)を呼び出す Pythonの拡張とNumPyの拡張 Python C-API (CPython拡張) http://docs.python.jp/3/c-api/ Cで

    RustでNumPyを拡張する - Qiita
  • C++でPythonを拡張するためのBoost.NumPyチュートリアル(実践編) - Qiita

    C++ Advent Calender 10日目の記事です。 Boost 1.63でBoost.NumPyがBoost.Pythonにマージされます。 それに伴い以下の記述では不具合があるかもしれません。修正記事を書く予定です。 動機 Pythonまじ便利です。 シミュレーションとその結果の解析がメインとなるアカデミア(見習い)である私には、 対話的にデータの加工、解析、可視化がシームレスに実行できるIPython Notebookは必須です。 残念ならがC++だけで同等の機能を提供してくれる環境はありません(たぶん)。 CERNが作ってるROOTのclingはC++を対話的に実行できるそうですが情報が少なくて使ったことありません。 だれかC++で文芸的プログラミングできるIC++ Notebook作ってください(切実)。 しかしながらシミュレーション自体は数日から数週間実行するもので、

    C++でPythonを拡張するためのBoost.NumPyチュートリアル(実践編) - Qiita
  • 1