タグ

ブックマーク / kivantium.hateblo.jp (5)

  • C/C++でのメモリリーク検出方法 〜AddressSanitizer, Valgrind, mtrace〜 - kivantium活動日記

    C/C++でプログラムを書いているときに遭遇する厄介なバグの一つがメモリリークです。 今回はメモリリークを検出するのに使えるツールの使い方について書きます。 AddressSanitizer コンパイルオプションをつけるだけで使えて出力も見やすいのでおすすめです。 AddressSanitizerはGCC 4.8以降かLLVM 3.1以降で使うことができます。 コンパイル時にオプションをつけるだけでメモリリークを検出してくれます。(若干実行時間が長くなります) 以下のメモリリークのあるプログラム leak.cpp を例に使い方を説明します。 int main() { int *a = new int[10]; } newで作った動的配列をdeleteしていないのでメモリリークになります。 g++ -fsanitize=address -fno-omit-frame-pointer -g l

    C/C++でのメモリリーク検出方法 〜AddressSanitizer, Valgrind, mtrace〜 - kivantium活動日記
    advblog
    advblog 2022/12/08
  • アセンブリ言語 その2 - kivantium活動日記

    この記事はkivantium Advent Calendarの19日目です。 前回は最初のCPUの設計に使う命令セットを紹介しました。 今回はこの命令を使っていろいろなプログラムを書いてみます。 SPIM ここではMIPSのシミュレータとして有名なSPIM (MIPSを逆から読んだ名前) を使うことにします。 GUIがついたQtSPIMをダウンロード・インストールします。 QtSPIMはアセンブリで書いたテキストファイルを読み込んで実行します。 実行したいファイルを保存して、File > Reinitialize and Load Fileとすることでファイルが読み込まれます。 再生ボタンのようなRun/Continueを押すと実行されます。 最初のプログラム まずはHello, World代わりに数字の1を表示することにします。 .text # アセンブリ命令がここから始まることを示す

    アセンブリ言語 その2 - kivantium活動日記
    advblog
    advblog 2016/12/30
  • 精度保証付き数値計算(その1) - kivantium活動日記

    コンピュータ上で実数を表現する際には浮動小数点数を使うのですが、浮動小数点数の計算では誤差が発生します。 簡単な例を見てみます。 #include <cstdio> int main(void) { float a = 0.0; for(int i=0; i<10000; ++i) a += 0.01; printf("%.10f\n", a); } という0.01を10000回足すプログラムを実行すると結果は100.0029525757となり、期待される100.000000000に比べて0.003ほどの誤差が発生しています。 浮動小数点数計算での誤差を抑える一番簡単な方法はfloatではなくdoubleなどのより精度の高い型を使って計算精度を上げることですが、どうしても限界はあります。 他にも問題ごとにテクニックは存在しますが、誤差を完全に無くすことはできません。 正確な計算のためには誤

    精度保証付き数値計算(その1) - kivantium活動日記
    advblog
    advblog 2016/08/05
  • C++によるSMOを用いたSVMの実装 - kivantium活動日記

    機械学習の手法にはいろいろありますが、その中でもサポートベクトルマシン(SVM; support vector machine)は高い精度で知られる有名な手法です。 以前C++で多層パーセプトロンを実装したので、今度はSVMをC++で実装してみました。kivantium.hateblo.jp SVMの解説 実装する前にSVMの原理を説明します。PRML下巻7章を参考にしました。 パターン認識と機械学習 下 (ベイズ理論による統計的予測) 作者: C.M.ビショップ,元田浩,栗田多喜夫,樋口知之,松裕治,村田昇出版社/メーカー: 丸善出版発売日: 2012/02/29メディア: 単行購入: 6人 クリック: 14回この商品を含むブログを見る SVMは2値分類に使われる手法で、入力に対してある関数を計算してその値の符号によってクラス分類をします。 入力(ベクトルですが、うまく表記出来ないの

    C++によるSMOを用いたSVMの実装 - kivantium活動日記
    advblog
    advblog 2015/06/24
  • SATをサッと解く 〜乱択アルゴリズムで遊んだ話〜 - kivantium活動日記

    ミレニアム問題と呼ばれる数学の7つの難問がある。各分野で重要かつ難しい問題が選ばれており、解決するとクレイ研究所から100万ドルの賞金を得ることができるということで有名だ。そのうちの1つポアンカレ予想は解決済みだが、残りの6つは未解決である。その中でもコンピュータ科学で非常に重要な問題が「P≠NP予想」である P≠NP予想とは コンピュータで問題を解決するときには一定の手続き(アルゴリズム)に従って問題を処理することになる。例えば数の集合の中からある特定の数字を見つけるという問題を考える。一番単純な解決方法は集合の要素を1つずつ調べていって値が求めたい数字になっているかどうかチェックすることだろう。この場合、集合がN個の数字からなるとすればおおよそNに比例する時間で求めたい数字の検索が終わることが予想できる。このようにだいたいNに比例する時間で終わるようなアルゴリズムについて、計算時間のオ

    SATをサッと解く 〜乱択アルゴリズムで遊んだ話〜 - kivantium活動日記
    advblog
    advblog 2015/06/11
  • 1