タグ

ブックマーク / qiita.com/kaityo256 (12)

  • 線形代数を学ぶ理由 - Qiita

    はじめに 少し前(2019年4月頃)に、「AI人材」という言葉がニュースを賑わせていました。「現在流行っているディープラーニングその他を使いこなせる人材」くらいの意味だと思いますが、こういうバズワードの例の漏れず、人によって意味が異なるようです。併せて「AI人材のために線形代数の教育をどうするか」ということも話題になっています。 線形代数という学問は、来は極めて広く、かつ強力な分野ですが、とりあえずは「行列とベクトルの性質を調べる学問」と思っておけば良いです。理工系の大学生は、まず基礎解析とともに線形代数を学ぶと思います。そして、何に使うのかわからないまま「固有値」や「行列式」などの概念が出てきて、例えば試験で3行3列の行列の固有値、固有ベクトルを求め、4行4列の行列の行列式を求めたりしてイヤになって、そのまま身につかずに卒業してしまい、後で必要になって後悔する人が出てきたりします(例え

    線形代数を学ぶ理由 - Qiita
  • JavaScriptで砂嵐 - Qiita

    はじめに テレビの砂嵐をご存知だろうか。アナログテレビで画像を受信できない時に出るノイズのようなものである。たまに歌のネタなんかにされたりもするが、テレビの地上波がデジタル化されて久しいので、今の若い人は知らないかもしれない。 テレビの砂嵐には有名な都市伝説がある。地方のテレビ局の夜勤の人が、放送終了後の砂嵐の時間帯に会社の機材でAVを見ようとしたら、うっかり公共の電波に乗せてしまい、すぐに数十件のクレームの電話が来たという。 これは、「放送終了後の砂嵐を見続けている人が少なくとも数十人いる」という点が怖い、というオチなのだが、なんとなく砂嵐を見てしまう気持ちもわからないではない。最近、自分の液晶ディスプレイが変な壊れ方をして砂嵐の画面になった時、妙に見入ってしまった。砂嵐画面には人を引きつける何かがあるようだ。 というわけで砂嵐をJavaScriptで再現してみよう。コードは に置いてあ

    JavaScriptで砂嵐 - Qiita
  • LJの力計算のSIMD化ステップ・バイ・ステップ その6 - Qiita

    はじめに そうとうがんばってSIMD化して、もう速くならないだろうと思ってたらkohnakagawaさんから「もう少し高速化しました」というプルリクが来て慌てた話。 その0 その1 その2 その3 その3.5 その4 その5 その6 ←イマココ コードは https://github.com/kaityo256/lj_simdstep においてある。 どこを直したか 一度に256ビット取ってくる命令を使うため、配列をパディングして、(x,y,z,0)という並びにしていた。それを4要素のベクトルとしてロードして、相対座標ベクトルを作るのだが、ループを4倍展開しているので、 (dx_1, dy_1, dz_1, 0)\\ (dx_2, dy_2, dz_2, 0)\\ (dx_3, dy_3, dz_3, 0)\\ (dx_4, dy_4, dz_4, 0)

    LJの力計算のSIMD化ステップ・バイ・ステップ その6 - Qiita
  • LJの力計算のSIMD化ステップ・バイ・ステップ その0 - Qiita

    はじめに SIMD化、してますか?>挨拶 「京」が128bit、現在のx86系の石が256bit、そしてポスト「京」がSIMD幅可変、ハード512bitという話もあって、もはやSIMD化しないといろいろつらいというか、ポスト「京」が走りだす時に、えらいひとたちがSIMD化率を気にしだしたり、アプリケーションごとにSIMD化率を提出させられたりするような未来が見えなくもないので、私もSIMD化してみようと思います。 で、「ステップ・バイ・ステップ」とあるけれど、これは教材という意味ではなくて、単に私がどういう形でSIMD化をしていったかの作業記録を保存しようという試みです。もっとすごい人はもっとスパッとSIMD化しているんだと思います。 背景 これまでのあらすじ。 LJの力計算をフルアセンブラで書いてみる LJの力計算を組み込み関数で書いてみる LJの力計算を組み込み関数で書いて馬鹿SIMD

    LJの力計算のSIMD化ステップ・バイ・ステップ その0 - Qiita
  • LJの力計算のSIMD化(たぶん完結編) - Qiita

    はじめに これまでのあらすじ。 LJの力計算をフルアセンブラで書いてみる LJの力計算を組み込み関数で書いてみる LJの力計算を組み込み関数で書いて馬鹿SIMD化 とりあえずO(N^2)ループでインテルコンパイラより早そうなコードが書けた。しかし、 実用的なMDコードはペアリストによる間接参照、およびカットオフがあるが、それが反映されていない 上記のコードはAoSでやっているが、実はSoAでやったらインテルコンパイラはもっと良いコードを吐くかもしれない という疑念があった。というわけで、 相互作用ペアリストを作成し、間接参照とカットオフがある状態で速度を計測 AoSとSoAの速度差を調べる ということを目的としてベンチマークコードを書いた。ただしペアリストは手抜きでO(N^2)で作っている。 コード コードは長くなったのでhttps://github.com/kaityo256/lj_si

    LJの力計算のSIMD化(たぶん完結編) - Qiita
  • Chainerで学習したモデルをC++で読み込む - Qiita

    はじめに Chainerで学習させたモデルをC++で読み込んで使いたい。しかし、ChainerはPythonライブラリであるため、なんらかのデータ変換が必要となる。普通にChainerのモデルを保存する時はchainer.serializers.save_npzを使うと思う。これはnumpyのnpz形式で、実体はZipアーカイブなので、それをそのままC++から読み込もうとすると、zlibを使ってzipを解析して・・・となると思うが、これはとても面倒くさい。PythonフレンドリーなデータフォーマットをC++から読み込むより、C++フレンドリーなデータフォーマットをPython側から書き出してしまう方が楽だろう。というわけで、 学習させたモデルをchainer.serializers.save_npzで保存する 保存したデータをPythonスクリプトで読み込んで、生floatのバイナリで保存

    Chainerで学習したモデルをC++で読み込む - Qiita
  • Chainer1.16.0での論理演算学習サンプル - Qiita

    はじめに Chainerの公式サンプルは、手書き文字認識のMNISTのデータを学習させるものなんだけど、これを実行しても「Chainerがインストールされ、学習もうまくいっているらしい」ということまでしかわからない。僕は特に 自分でデータセットを用意する時、どうすれば良いのかわからない 学習済みのニューラルネットワークの動作確認方法がわからない というところで詰まった。Chainerで論理演算を学習させるサンプルはウェブにそれなりにあるのだが、Trainerを使った簡単なサンプルが見つからなかったので、データの作り方と動作確認方法をまとめがてら、Chainer 1.16.0におけるミニマルサンプルを作ってみる。基的には公式サンプルを書き換えたもの。 バージョン確認 Chainerはバージョンが上がるとわりとドラスティックに仕様が変わる。まずは自分のChainerのバージョンを確認するのが

    Chainer1.16.0での論理演算学習サンプル - Qiita
  • LJの力計算を組み込み関数で書いてみる - Qiita

    はじめに LJの力計算をフルアセンブラで書いてみるの続き。 思想 フルアセンブラでループ内SIMD化してみたのはいいけど、それでループアンロールとかやりたくない。intrinsicで書けばコンパイラがやってくれないかと期待。 計算環境 Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz icpc (ICC) 16.0.3 g++ (GCC) 4.8.5 コード 長いが全部載せる。それぞれ以下の通り。 calc_intrin intrinsicで書き下したSIMDコード calc_asm アセンブラで書いたコード check ナイーブに書いたコード (icpc向け) check_opt 内側のループで余計なロード/ストアをしなくて良いように明示的に指定したコード (g++向け) //---------------------------------------

    LJの力計算を組み込み関数で書いてみる - Qiita
  • 分子動力学法ステップ・バイ・ステップ その1 - Qiita

    はじめに 古典分子動力学法(Molecular Dynamics Method, MD)は多くの優れた実装があり、もはやゼロから手で書く時代ではないかもしれない。でも、アプリケーションをブラックボックスとして使うのは危険だし、自分が使う手法くらい、一度はフルに自分で書いてみる経験をしておくのも悪くないと思う。 というわけで、MDをゼロから書いてみる。目標は、カットオフのあるLennard-Jones (LJ)ポテンシャルのMDにおいて、アルゴリズムでの高速化を一通り実装すること。具体的には、 ポテンシャルはLJのみ 原子は一種類のみ 系は三次元 シミュレーションボックスは立方体 周期的境界条件 といったMDを組む。実装する高速化アルゴリズムは メッシュによるO(N)隣接粒子探索 Bookkeeping法による相互作用粒子リストの使い回し 相互作用相手でのソート 程度にとどめ、原則としてチュ

    分子動力学法ステップ・バイ・ステップ その1 - Qiita
  • HPCと10年戦ってわかったこと - Qiita

    はじめに 「◯◯と10年戦ってわかったこと」というポエムを書けば、他の人がその「◯◯」についてちゃんとした記事を書いてくれそうな気がしてきた。僕もポエムを書いてみたいが、10年戦ったものなんてあまりない。僕自身は全くHPCの人ではないのだけれど、HPCの人々と関わる仕事を一応10年くらい続けてきたので、HPCに関するポエムを書いてみる。これはあくまでポエムであって、当然だがフィクションで、いかなる実在の人物、現実のスパコン、メーカ、団体とも関係ないことはご留意されたい。 HPCってなに? HPCというのは「High Performance Computing」の略で、日語では「高性能計算」とか言うんですかね。こういう略語にありがちだけれど、HPCが意味する分野は人によって全然違う。データセンターなんかもHPCの分野なんだろうけれど、とりあえずここでは科学技術計算に用いるスパコンと、その周

    HPCと10年戦ってわかったこと - Qiita
  • インテルコンパイラの熱意が空回りする話 - Qiita

    はじめに GCCの最適化がインテルコンパイラより賢くて驚いた話でGCCとインテルコンパイラの比較をしたんだけど、これはちょっとフェアじゃないな、と思って、インテルコンパイラの方が賢くコンパイルできるサンプルを探したつもりが、そっちもGCCの方が早かったので驚いた話のメモ。 ソース 参考にしたのはみんな意外とauto vectorizationとか信用してて愕然とするに掲載されてたコード。ちょっと修正してこんな感じにする。 #include <stdio.h> void f(int *p, int *q, int n); int a[7] ={1,2,3,4,5,6,7}; int b[7] ={7,6,5,4,3,2,1}; void f(int *p, int *q, int n) { int i; for (i=0; i<n; i++) { p[i] *= q[i]; } } int

    インテルコンパイラの熱意が空回りする話 - Qiita
  • GCCの最適化がインテルコンパイラより賢くて驚いた話 - Qiita

    はじめに コンパイラの最適化機能が、どこまで何を見抜くかに興味がある。特に、あるコンパイラができて、他のコンパイラができなかったりすることが見つかると楽しい。そういうのを見つけたのでメモ。 ソース コンパイラにわせるコードはこんなの。

    GCCの最適化がインテルコンパイラより賢くて驚いた話 - Qiita
  • 1