サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
proc-cpuinfo.fixstars.com
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 はじめに こんにちは、エンジニアの高木です。 私は現在、adaskitという社内の自動運転関連のオープンソースプロジェクトに携わっており、プロジェクトの成果としてこれまでlibSGMやcuda-bundle-adjustmentなどを公開しています。 今回はVisual SLAMやSfM(Structure from Motion)で行われる局所特徴量計算について、CUDAによる高速化に取り組んだ話を紹介します。また、そのソースコードをcuda-efficient-featuresという名前でGitHubに公開しました。 fixstars/cuda-efficient-features 背景 局所特徴量計算 Visual SLAMやSfMでは、2つの視点間の相対的なカメラ姿勢を推定する
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 この記事はC++ Advent Calendar 2022の9日目の記事です。 皆さまこんにちは。今日もソフトウェア高速化してますか? 私も相変わらず色々と高速化している日々ですが、最近、私が書いたループ展開のコードを見て「どういう仕組みで展開されるんですか?」と社内で聞かれたことがあったので、せっかくなので共有しておきたいと思います。 TL;DR: N段ループ展開コードは、最近のC++機能を使えば以下のように簡潔に書けます。 template<std::size_t... unrollIndices> void vectoradd(double z[], const double x[], const double y[], const std::size_t n, std::ind
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 TL;DR: Issue, PR ソリューション第二事業部の今泉です。 先日東京大学の松井先生と共同でFacebook AI Research(以下FAIR)が公開している近似最近傍探索ライブラリFaissの4bit PQアルゴリズムのARM CPU(aarch64)上での動作を60倍程度高速化しました。 本稿ではまず近似最近傍探索やFaissについて軽く紹介した後、その高速化内容について解説を行います。 近似最近傍探索について まず最近傍探索とは、「複数のベクトルからなる集合 \( \mathit{Vs} \) が存在し、あるベクトル \( \boldsymbol{x} \) に対して最も近い要素 \( \boldsymbol{v} \in \mathit{Vs} \) を求める」と
はじめに こんにちは、エンジニアの高木です。 私は現在、adaskitという社内の自動運転関連のオープンソースプロジェクトに携わっており、プロジェクトのこれまでの成果としてlibSGMやsegmentation-sgm、「Visual OdometryをCUDAで高速化した話」等を紹介しました。 今回はVisual SLAM等で用いられるバンドル調整について、CUDAによる高速化に取り組んだ話を紹介します。結果だけ先に言うと、CPUで約12秒かかる規模のバンドル調整に対し、GPUで約1.2秒まで短縮することができました。 また、そのソースコードをGithubに公開しましたので、興味があれば是非覗いてみてください。 fixstars/cuda-bundle-adjustment 背景 バンドル調整(Bundle Adjustment)とは、画像からの3次元復元において3次元点群とカメラ姿勢を
XGMIIの制御信号 XGMIIではEthernetのフレームをSTARTからTERMINATEで囲まれた区間で表します。 また、START は必ずD[7:0]、つまり0番目のオクテットに現れることが規定されています。ただし、これは32bit PCSの場合で、64bit PCSの場合は0番目及び4番目のオクテットにSTARTが現れることに注意が必要です。 STARTの出現位置 Ethernetフレーム送受信中に何かしら異常が発生した場合は、TERMINATEではなく ERROR でフレームを終了します。 正常フレームと異常フレーム 以上より、XGMII経由でEthernetフレームを受信するには、Startを検出して、TerminateかErrorが来るまで間のデータを読み出しつづければよいことがわかります。ただし、前述の通りStartの位置が0オクテット目か4オクテット目か変化するので、
※本記事の内容は、2020年2月の約1か月間のインターンシップにおける成果です。 Unikernelについて知っていますか? 私は知っています。 Unikernelとは、アプリケーションをライブラリOSの必要最小限の機能のみとリンクさせ、単一アドレス空間で、直接ハードウェア上やハイパーバイザ上にて動作するようにしたマシンイメージのことです。 本記事では、車載向けのマイコンなどの組み込みシステム上において、最小サイズのマシンイメージで目的の機能を実現することができる手段として、Unikernelという方向性に可能性を見出し、その概要と、2020年2月現在に現存しているUnikernelのプロジェクトについて調査しました。 Unikernelとは Unikernelという呼称は、2013年に発表された論文 Unikernels: Library Operating Systems for th
アルバイトの西田です。 IntelのC for Metal(以前はC for Mediaという名前だったもの、略してC4MまたはCM)を、7月中はインターンとして、8月からはアルバイトとしてその使い方や性能を調べていました。 この記事はその成果をまとめたものです。 C for Metalとは 一般的なGPUプログラミング言語で、Intel GPU上でアセンブリに近いパフォーマンスを発揮する(らしいです)。プログラミングモデルはSIMDを利用しています(SIMDはシンプルなのでデータ並列プログラムを比較的簡単に書くことができる上に殆どの使用事例を満たすことができます)。HW実行ユニット(EU)のビューをユーザーに公開するため、IntelGPUの潜在的な能力を最大限に活用することができます。Intel GPUで動く画像処理技術の開発のためにインテル社内で使われていたものが、今回オープンソース化
メモリからの読み書き ベクトルレジスタに何かしらの値を持ってくるために、メモリから読み書きする必要があります。RV32Vでは、以下3種類のメモリアクセスが可能です 通常の連続アクセス:vl/vs命令 ストライドアクセス:vls/vss命令 インデックスアクセス:vlx/vsx命令 ※vlがvector lengthのレジスタと、vector loadの読み込み命令の両方の意味が使われるので注意 これらは、機械語レベルでは1つのオペコード0000111(load)と0100111(store)が割り当てられており、フィールドの値を変えることで切り替えられます。 連続アクセス 通常の連続アクセスは簡単で、指定したアドレスからvl個の要素をLMUL個のレジスタを使って読み込みます vlb.v vd, (rs1), vm # rs1のアドレスから、vdへ、b(08bit)を、連続で、読み込む vl
実行毎に数十msはブレるので、元のC++実装に対しての時間で比較して見ると、最適化オプションと配列境界チェックの除去が効いているように見えます。 そして先述の通り、RustとC++で実行順を入れ替えたり何度か実行しても、最終的に必ず(わずかに)Rustの方が時間短かったので、(2019/09/20:45追記)「計測誤差ではないの?」という問い合わせを内外から多数受けたので、(先述の通り経験的に計測誤差でないことは明らかではあるんですが経験者でない人向けの)分かりやすい証拠としてC++とRustそれぞれ単体を100回ずつ計測した結果を置いておきます。分布から分かる通り、検定などするまでもなく有意にRustの方が時間が短いことが分かります。また、C++側は元のナイーブな実装のままなので、高速化の余地(例えばrestrict)は十分にあります。ここでは「手軽にやった時に」を想定しており、その条件
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 はじめに こんにちは、Fixstars Autonomous Technologiesの吉村です。 NVIDIA GPUを搭載しているArm開発ボードとして様々な分野で活躍しているNVIDIA Jetsonですが開発環境のセットアップが色々大変です。このセットアップのわずらわしさから少しでも解放されるようDocker上に環境を隔離してセットアップを試みてみました。 NVIDIA SDK Managerとは NVIDIA SDK Managerは、NVIDIA Jetsonプラットフォーム、NVIDIA DRIVEプラットフォームの開発環境をセットアップするツールです。かつてはプラットフォーム毎に以下のツールに分かれていましたが、あるタイミングでNVIDIA SDK Managerに共通
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 以前から何度かブログにも登場している通り、フィックスターズでは社内有志で勉強会を半年区切りぐらいで開催しています。 そして今期は「RISC-V勉強会」になりまして、早速『RISC-V原典』の輪読をしているのですが、「やっぱり実機もほしいよね」ということで、HiFive Unleashedを会社で購入しました。 この記事は、そのHiFive UnleashedでDebianを動かしてみるところまでの軌跡という名の手順のご紹介です。 RISC-Vとは RISC-Vとは、近年とても注目されている命令セット・アーキテクチャー(ISA)で、詳細な説明は先述の『RISC-V原典』に譲るとして、ここでは簡単な特徴を紹介しておきます 比較的最近作られたISAであり、従来のプロセッサーが抱えていた問題を
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 メモリ事業部のoshioです。 普段は次世代SSDの開発に関わっていて、Write/Readのピーク性能やFTL(Flash Translation Layer)について興味があります。 今回はNVMe ver. 1.2で追加された少し変わった機能、HMBについて紹介します。 HMBって何? 最近のSSDは内部にDRAMを積んでおり、Write/Readのバッファに使ったり、FTLのデータを置いたりして高速にデータの読み書きができるようになっています。 しかし、スマートフォンやタブレット、ラップトップ向けのSSDはChipサイズやコストを優先し、DRAMを積んでいないモデルもあります。DRAM-lessのSSDは内部のわずかなSRAMと、アクセスが遅いNAND Flashでやりくりする
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 最初に こんにちは、フィックスターズ新規事業推進室の大澤です。 新規事業推進室では、Halide と呼ばれるドメイン固有言語のコンパイラに関する研究開発を行っています。FPGA 向けのバックエンドを独自に開発しており、Halide で記述した IP を Xilinx の FPGA 開発ボード上で動作させたりしています。 この度、Ultra96 と MIPI 拡張ボードを組み合わせ、イメージセンサで取得した画像を FPGA で処理してから CPU 側で取得することができるようになりましたので、ソースコードを公開し、セットアップ方法の説明、簡単な解説を行いたいと思います。特定ボード、特定カメラでの情報ではありますが、少しでも皆様のお役に立てれば幸いです。 まず、今回はセットアップ方法につい
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 アルバイトの大友です。 TensorコアのWMMA APIを使っている人があまりいなかったため、6月中はインターンとして、7月からはアルバイトとしてその使い方や性能を調べていました。 この記事はその成果をまとめたものです。 Tensorコアを使うことでFP16のSIMD計算(f16x2)に比べ密行列積を5倍程度高速化できました。 Tensorコアとは NVIDIA Voltaアーキテクチャから採用されたTensorコアは2つの$4 \times 4$のFP16行列の積を1サイクルで計算し、その累積和をFP16/FP32で取ることができる計算ユニットです。 cuBLAS, cuDNNなどのライブラリではCUDA 9からTensorコアを利用できます。 WMMA APIを用いた行列積計算
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 特徴空間上に分布した $n$個のパターン $x_1, x_2, …, x_n$ を、いくつかの塊に分割することを考えます。いくつの塊 (クラスタ) に分割すべきなのか?は分かっていません。このような状況でパターンを適切にクラスタに分割する方法、即ちクラスタリングについて考えます。 ここでは、ディリクレ過程混合モデルによるクラスタリングについて考えてみます。ディリクレ過程混合モデルによるクラスタリングは、事前にクラスタがいくつあるか知らなくても、適切に分割できる優れた方法です。k-means 法などでは、あらかじめクラスタがいくつなのか、指定する必要があります。ただ、ディリクレ過程混合モデルによるクラスタリングは、全体像を捉えるのが難しいです。そこで、この記事では細部を適当に省略しつつ、
本日、フィックスターズは、PythonからNVIDIA GPUを使うためのライブラリCuPyをOpenCLでも使えるようにしたClPyをGitHubにて公開しました! ClPyを使えば、例えばChainerのようなニューラルネットを用いた機械学習を、OpenCLが動くデバイス(例えばAMD Radeonなど)でも動作させることができるようになります。 詳細 CuPyとは、Python上での数値計算におけるで事実上の標準となっているNumPy互換でCUDAを使ったGPGPUが利用できるようにするためのライブラリです。もともとCuPyは、Preferred Networksさんが作っているChainerというニューラルネット用フレームワークをCUDAで動かすためのバックエンドとして統合されていました。現在では分離・独立して、Preferred Networksさん主体で「NumPy互換で動く」
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 遠藤です。 先日、ニューラルネットワークをフレームワーク間でやり取りするフォーマットである NNEF と ONNX を紹介いたしました。今回のブログ記事では、それらのうちの ONNX を実際に利用してみて、実際の使用感をレポートしたいと思います。 使用したコードについて 今回の実験で使用したコードは、すべて以下のリポジトリにコミットされています。 fixstars / blog / source / onnx_sample / onnx – Bitbucket null 上記のコードを実行する際に使用した Docker コンテナのビルドスクリプトは、以下のとおりです。nvidia-docker を使って実行してください。 fixstars / blog / source / onnx
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 遠藤です。 ニューラルネット界隈では、Caffe、TensorFlow、Chainer をはじめ、数々のフレームワークが群雄割拠の様相を呈しております。弊社でも、プロジェクトに応じて適宜フレームワークを使い分け、日々の業務にあたっております。 多数のフレームワークを扱っていると「あっちのフレームワークで学習したモデルを、こっちのフレームワークで使いたい!」といった、フレームワーク間をまたいでモデルを共有したいというニーズが出てきます。そのために、フレームワーク間で共通して使える交換フォーマットが開発されるようになりました。 そこで、今回はニューラルネットの共通フォーマットとして NNEF と ONNX の2つをご紹介したいと思います。 NNEF とは? 概要 NNEF – Neural
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 メモリ事業部の Tomo です。 私は普段、NAND FLASH を使用した SSD の開発に携わっているのですが、昨年、 SSD の中の人にとっては驚異的な製品、3D Xpoint を使用した「 Intel Optane SSD 900P 」が発売されました。メモリ事業部としては発売と同時に購入し、驚異的な数字を目の当たりにしていたのですが、今回はそのポイントについて記事を書かせていただきます。 1.とりあえず性能を見てみる Crystal Disk Mark や PC Mark 系で測定が手っ取り早いですが、今回は 3D Xpoint の驚異的な点の Latency について語りたいと思うので自分で作った測定ソフトをベースにしたいと思います。 【測定環境】 ・OS:Windows
まず、おさらいとして量子リバーシのルールを説明しておきます。 6×6マスの盤上で黒白交互に量子石2個を古典石が置かれていないマスに別々に置いていく 同じ手番に置いた量子石同士および同じマスにある量子石同士は繋がっているとみなし、それらが循環するように繋がれば循環エンタングルメントが発生して古典石に変化する 古典石に変化する際、リバーシのルールが適用され、相手の古典石を自分の古典石で挟み込むことができたら相手の古典石が自分の古典石に変わる 1~3を繰り返し、すべてのマスが古典石となったら終了し、より多くの石を取った方を勝ちとする 詳細については、以前のブログ記事「第6回 社内プログラミングコンテスト『量子リバーシ』開催」をご覧ください。
[2018/01/10 アップデート] 社内プロコン説明書を第1.06版に更新しました。 こんにちは。エンジニアの二木です。 毎年開催しているフィックスターズ社内プログラミングコンテストですが、今年も開催されました。今回のお題は『量子リバーシ』です。開催期間は、今年の11月30日から来年の2月2日となっており、約2ヶ月ありますので、余裕をもって取り組めるのではないでしょうか。 詳しい内容については社内プログラミングコンテストの説明(PDF)をご覧ください。 量子リバーシとは、今回のコンテストのために作ったオリジナルのゲームのことです。弊社では今年から量子コンピューティングに力を入れていることもあり、量子をモチーフとして取り入れてみました。 量子三目並べというゲームが既に存在するのですが、その量子に関するルールをリバーシ(オセロ)に取り入れて拡張したゲームになっています。単純な三目並べでも量
ご覧の通り、時間あたり300円前後で借りることができます。時間課金というと例えばAWSでも借りることができますが、AWSはサービスの選択肢が多く設定も少し難しい部分があります。 一方、高火力であれば、先述の通りノード1つをまるっと渡してもらえるので、普段作業しているワークステーションと遜色ない使い勝手になります。 また、日本語ヘルプも充実しており、例えばNVIDIAドライバのインストール方法なども丁寧に解説されているため、日本で活動する人たちにとってはとてもありがたいです。 ということで、今回は、分散機械学習するためのフレームワークとしてChainerおよびChainerMNを使い、GPU環境では高火力コンピューティング(時間課金)を使うことにしました。 動かし方 というわけで、さっそく動かし方を説明していきます。動かすためには、以下の5ステップが必要です。 高火力(時間課金)を契約&準備
Fixstars Tech Blog /proc/cpuinfo » 未分類 » 論文「Unsupervised Monocular Depth Estimation with Left-Right Consistency」を読んでみました (1):動作確認編 はじめに 昨年、Unsupervised Monocular Depth Estimation with Left-Right Consistencyという「単眼画像から視差を推定する」という論文がarxivで公開されたことを知り気になっていたのですが、数か月「ソースコード公開準備中」状態が続いていてモヤモヤした日々を過ごしていました。・・・が、ついに先日GitHubで公開されたこともあり動作確認してみました。 ということで、本記事ではmonodepthセットアップから推論までの一連の手順と別シーンでの検証結果について紹介します。ま
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 先日、GeForce GTX 1080 Tiを2枚積んだマシンを計算サーバとして追加導入しました。 新しいマシンで意気揚々と学習を回していたのですが、時間がたつにつれて学習速度が低下していったり、マルチGPU化しても性能が伸びなかったりかえって遅くなったりしてしまっていました。 このような症状を聞くと熱問題だろうと気づく方も多いかと思いますが、せっかくなので冷却が不十分なGPUがどういった挙動を示すか少し実験してみました。 実験内容 アプリケーション・計測方法 GPUに負荷をかけるためのアプリケーションとして、ひたすらcuBLASのSGEMM (n=m=k=8192) を実行し続けるプログラムを用意しました。 また、各種メトリクスの取得にはNVMLを使用し、およそ10-20ms程度ごと
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 今日も楽しくC++しているみなさま、こんにちは!C++勉強会を開催したり、wandboxのスポンサーになったり、もちろん業務でも使ったりと、日頃からC++に触れることの多いフィックスターズですが、今日はそんなC++の高速化(?)技法を一つ紹介したいと思います。それは記事題の通り部分特殊化された非型引数においても、部分特殊化のテンプレート引数を使った演算できるようにする方法です。 TL;DR:非型引数をラップする型を使えば良い 問題の要約は以下の通りです(wandboxでの実行結果)。 // こんなテンプレートがあった時に template<int V1, int V2> struct Foo; // 部分特殊化したい場合、 template<int V> // 部分特殊化のテンプレート
Techブログではお初です、エンジニアの遠藤です。 この度、社内有志を募って「機械学習論文セミナー」を開催しました。 今回は、論文セミナーそのものについてと、第1回で発表した論文について簡単にご紹介致します。 機械学習論文セミナーとは 機械学習輪講セミナーは、その名の通り機械学習の論文をお互いに持ち寄って輪講をする回です。 社内 Slack に #share_ml_papers という機械学習の論文を紹介するチャネルがあり、そこからアイディアを得ました。 Slack では各自論文のリンクをチャネルに貼って、そこからディスカッションを広げていくという形を取っています。 論文が少ないうちは良かったのですが、数が増えてくるとどうしても流れが追いづらいと個人的に感じていました。 また、それぞれの論文についてどこがいいか、どのように活用できるかなど、face to face で議論できるとより効果的
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 QEMUをカーネルの開発に使うことのメリットの1つとして、GDBによるデバッグが簡単にできることがあります。これは、GDBのリモートデバッグ機能を使用します。リモートデバッグ機能は、もとをたどれば、別のマシンで動いている(主に)組込みシステムをデバッグするために開発された機能で、対象システムにGDBと通信するためのスタブを組み込み、シリアルラインを介して通信してデバッグするというものでした。現在では、TCP/IPでの通信もサポートされており、QEMUにはそのスタブが組み込まれており、QEMU上で実行するプログラムをGDBでデバッグできるようになっています。 GDBでのLinuxカーネルのデバッグについては、今は以下にしっかりとした情報がまとまっていました。 https://www.ke
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 FFmpeg APIの使い方を解説してみます。FFmpegは、様々な動画の変換に対応したツールです。コマンドラインからバイナリを叩くのもいいですが、ライブラリAPIを使えば、もっと色々なことができるようになります。ただ、チュートリアル的なものがなかったり、あったとしても古いAPIで書かれていたりしていて、とっつきにくいところがあります。長年開発されてきたOSSなだけあって、APIとしては洗練されているので、分かってしまえば使い方は簡単です。 他の記事 FFmpeg APIの使い方(2): シークやAVFrameなど FFmpeg APIの使い方(3): エンコードしてみる FFmpeg APIの使い方(4): エンコード他 FFmpegは現時点で最新の3.3.3を使っていきます。開発環
このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。 前回の続きから 前回、前々回でディリクレ過程混合モデルによるクラスタリングの手法について見てみました。今回は、実際にデータを使ってクラスタリングしてみたいと思います。前回の最後にクラスタリングの具体的手順を記載したのですが、具体的と言いつつコードに落とし込めるレベルにはなっていなかったので、今回はコーディングできるレベルでの手順を示したいと思います。 実データで実験を行うためには、$G_0$ の形を具体的に決める必要があります。$G_0$ はクラスタパラメータ $\boldsymbol{\theta}$ を生成する確率密度関数です。クラスタに所属するデータは正規分布に従うものとしましょう。そうすると、クラスタパラメータは正規分布の平均 $\boldsymbol{\mu}$ と共分散 $
次のページ
このページを最初にブックマークしてみませんか?
『Fixstars Tech Blog /proc/cpuinfo』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く