タグ

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

  • JITアセンブラXbyakを使ってみる(その1) - Qiita

    その1:Xbyakの概要←イマココ その2:数値計算屋のハマりどころ その3:AAarch64向けの環境構築 その4:Xbyakからの関数呼び出し その5:Xbyakにおけるデバッグ はじめに Xbyak(カイビャック)は、光成滋生さんによるJITアセンブラです。Intelによる深層学習ライブラリoneDNNのエンジン部分の実装に使われたり、AArch64版のXbyakであるXbyak_aarch64が富士通のリポジトリとして公開されたりと、ベンダーによる公式採用が増えています。なんかすごそうなので使ってみましょう、という記事です。 Xbyakの準備 Xbyakは、JITアセンブラです。C++ヘッダオンリーなので、インクルードするだけで使えます。git submoduleとして使うのが良いと思います。 まずは適当なリポジトリxbyak_testを作りましょう。

    JITアセンブラXbyakを使ってみる(その1) - Qiita
  • Dockerファイルがビルドできなかったのでコンパイラをいじめる - Qiita

    TL;DR ある環境でビルドできたDockerfileが別の環境でビルドできなかったのは、メモリ制限のせいだった はじめに 理研シミュレータというシミュレータがあります。 RIKEN-RCCS/riken_simulator これは、「京」の次のスーパーコンピュータ「富岳」が採用しているアーキテクチャ「Fujitsu A64FX」のシミュレータです。Gem5というアーキテクチャシミュレータがあり、それにARM AArch64を実装したものです。 これを使うと、AArch64のプロセッサレベルでのシミュレートができるのですが、ビルドに結構手間がかかります。なので、その「手間」をまとめたDockerファイルを作りました。 kaityo256/aarch64env Dockerファイルはこんな感じです。 FROM ubuntu:18.04 MAINTAINER kaityo256 ENV USE

    Dockerファイルがビルドできなかったのでコンパイラをいじめる - Qiita
  • printfに4285個アスタリスクをつけるとclang++が死ぬ - Qiita

    def check(n) s = "*"*n f = open("test.cpp","w") f.puts <<EOS #include <cstdio> int main(){ (#{s}printf)("Hello World\\n"); } EOS f.close() return system("clang++ test.cpp") end check(ARGV[0].to_i) $ ruby check.rb 10000 clang: error: unable to execute command: Illegal instruction: 4 clang: error: clang frontend command failed due to signal (use -v to see invocation) Apple LLVM version 10.0.1 (clang

    printfに4285個アスタリスクをつけるとclang++が死ぬ - Qiita
  • 定数配列がからんだ定数畳み込み最適化 - Qiita

    はじめに 配列を定数(const)として宣言した場合や、事実上定数とみなせる場合、コンパイラが定数畳み込み最適化をできるか確認する。 定数畳み込みについて コンパイラの最適化には様々なものがあるが、その最も簡単なものに「定数畳み込み」がある。これは、コンパイル時に定数であることがわかっている式を単純化するものだ。 例えば、こんなコードを見てみる。 const double G = 9.8; const double dt = 0.01; const int N = 10000; void func(double v[N]) { for (int i = 0; i < N; i++) { v[i] += G * dt; } } 速度の配列vを受け取り、そのすべての要素に重力定数Gと時間刻みdtの積G*dtを加算するコードだ。このコードを見て、「毎回メモリからGとdtの値を取ってきて、掛け算し

    定数配列がからんだ定数畳み込み最適化 - Qiita
  • オーバーライドされた仮想関数にまつわる最適化 - Qiita

    はじめに あるクラスから派生したクラスで、基底クラスのメソッドをオーバーライドしたとする。この時、派生クラスがコンパイル時にわかっているときに、コンパイラはそれを認識して最適化できるか試してみた。 使うコンパイラは以下の通り。 g++ (Homebrew GCC 7.3.0_1) 7.3.0 clang++ Apple LLVM version 9.1.0 (clang-902.0.39.2) icpc (ICC) 18.0.1 20171018 ただし、インテルコンパイラについては最後でちょっと触れるだけにする。 ケース1: 静的な宣言 こんなコードを考える。

    オーバーライドされた仮想関数にまつわる最適化 - Qiita
  • C++でアスタリスクをつけすぎると端末が落ちる - Qiita

    ならint *型へのポインタになります。 これ、int *****pといくらでも付けられるわけですが、いったいいくつまでつけられるんでしょうか。これってトリビアになりませんかね。 実際に調べてみた。 スクリプト こんな適当なスクリプトを書く。 n = 100 if ARGV.size > 0 n = ARGV[0].to_i end puts "#include <cstdio>" puts "int main(void){" puts "int #{"*"*n}a;" n.times do |i| puts "#{"*"*i}a = new (int#{"*"*(n-i-1)});" end puts <<EOS printf("%x\\n",a); } EOS

    C++でアスタリスクをつけすぎると端末が落ちる - Qiita
  • a/(b+c)+b/(c+a)+c/(a+b)=4の自然数解(a,b,c)を求める - Qiita

    はじめに ちょっと前に、こんな問題が話題になった。 ネタ元はどこか知らないが、僕は以下のサイトで知った。 適当に和訳してみた。 元の出題は果物とか使ってて「数学パズルです〜」みたいな顔をしているが、これは典型的ディオファントス方程式で、途中で楕円曲線が出てくるガチな問題になっている。解説は先のサイトに書いてあるが、いくつか天下りな箇所があるので、そこをちょっと丁寧に解説しつつ、Rubyで解を探してみる。 方針 問題は以下の通り。 上記を満たす「自然数」の組(a,b,c)を求める。すぐに分かる通り、もしひとつの解の組(a,b,c)が求まったら、それぞれ定数倍した(ta, tb, tc)も解となる。従って、大事なのは(a,b,c)の比であり、例えば$c=1$に固定して、(a,b)の有理数解を求める、という問題と等価である。従って、この問題の自由度(実質的な変数の数)は2となる。 さっきの式の分

    a/(b+c)+b/(c+a)+c/(a+b)=4の自然数解(a,b,c)を求める - Qiita
  • SVN脳患者から見たGit - Qiita

    はじめに 僕はSVN脳患者である。SVN脳とは、SubversionのポリシーでGitを理解しようとしたり、使おうとしたりする病気で、中年プログラマに発症例が多い(気がする)。それまでSubversionを使ったことがない人がGitを使う場合には問題にならなかったことが、SVN脳患者がGitを使おうとすると問題になることが多い。特に、SVN脳を発症したプログラマは、そうでない人に比べてGit学習コストが爆発的に増大する。最初からGitに触れた人は、なぜSVN脳患者がGitを理解できないのかを理解できないだろう。 これは、SVN脳患者である僕1が、なぜGitを長いこと理解できなかったかをつらつら書くポエムである。病人の書いたポエムであるからして、所謂マサカリの類はほどほどにしていただきたい。 以下、「SVN脳患者」という大きな主語を多用するが、要するにこれは僕のことであり、言うまでもなくSu

    SVN脳患者から見たGit - Qiita
  • 1