数値計算をする以上GPUを使用できないというのは現代では致命的だ。 この記事ではCUDA経由でGPUをRustから使う方法についてまとめる。 特に今回は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
T/O マルチスレッド・プログラミングの文脈では、「データ競合(data race)」と「競合状態(race condition)」は直交した異なる概念を表す1。両者ともに回避すべき事象だが、問題を取り扱うレイヤは明確に区別されるべき。 データ競合(data race)は、マルチスレッド・プログラム実装上の問題である。 競合状態(race condition)は、並行処理システム設計上の問題である。 ここではJava, C#, C++あたりのマルチスレッド対応手続き型ベースのプログラミング言語を取り上げるが、言語パラダイムによらずマルチスレッド処理(共有メモリ型の並行処理機構)ならば広範に適用可能である。また言語仕様として両者を明確に区別するRust言語も取り上げる。 「データ競合(data race)」が何であるかは、それぞれのプログラミング言語仕様にて定義される。競合状態(race c
概要: 「クロージャを boxせずに 返したい」という欲求は人類の四大欲求のひとつと言われている。 conservative_impl_trait という機能を使うことでこれをスパッと解決できるが、これは単なる構文糖衣にとどまらずRustの型システムに食い込むこともあってかまだ安定版入りしていない。なぜこの機能が必要で、なぜこの機能が問題かを説明する。 クロージャをboxせずに返したい話 Rustではクロージャに異なる型がつく OCamlやHaskellのような言語では、外の環境を引き継ぐ無名関数 (クロージャ) を次のように作ることができるのであった。 let mult_curry x = fun y -> x * y この関数は x を受け取り、「y を受けとってx * yを返す関数」を返す。この「y を受けとって x * y を返す関数」は、 y というデータを引き連れている。そして
κeenです。少し前の話になりますがRustの関連型を駆使してHigher Kinded type Trait(高階型トレイト)を実現してしまったものが出回ってたのでそれについて。 本来RustはHKTをサポートしていませんが不思議なことに実装出来てしまっているのです。 HKTについて微塵も知らない方にも分かるように解説していきます。 map 可能なトレイト Option、Result、etc 色々なトレイトが map メソッドを実装しています。 それぞれ型シグネチャを抜き出してみましょう。 Option: map<U, F: FnOnce(T) -> U>(self, f: F) -> Option<U> Result: map<U, F: FnOnce(T) -> U>(self, op: F) -> Result<U, E> 驚く程似てますね。これを抽象化して「mapメソッドを持つ」
underscore-rust underscore-rust 作った。名前から分かる通り、underscore.js の機能を rust にしたもの。 https://github.com/gong023/underscore-rust ライブラリ自体のドキュメントは上記に入れたつもりなので、必要であれば参照して欲しい。ポイントとしてはオリジナルの underscore.js のように _ の構造体みたいなものを用意するのではなく、標準の struct(Vec, TreeMap, HashMap)にそのまま underscore 系の関数を追加した点。use すれば普通の API と同じ感覚で使うことができる。 作ったみたが、インターフェイスについては結構後悔している部分が多い。例えば HashMap の拡張は fn invert(self) -> HashMap<V, K>; とかにし
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く