タグ

ブックマーク / w0.hatenablog.com (23)

  • 1文字printfデバッグ - w_o’s diary

    タイミング問題がprintf入れると消えたりする場合、タイミングの影響を最小限に抑えるためにdebug printfの出力を最小にすることが求められ、printf("C"); とかを出したりする。

    1文字printfデバッグ - w_o’s diary
    craf
    craf 2017/05/26
  • x86よくできてる点 - w_o’s diary

    アーキテクチャと実装混ざってるけど 命令dispが32bit届く immも32bit入ることが多い メモリが順序守る(何回も書くが、メモリ順序が緩いことによって得られたCPU時間より失なった人間時間のほうが絶対多いから) ファームウェアがBIOSとUEFIの二種類しかない (ボードごとにカーネルにディレクトリ作るのやめろARM) 周辺デバイスがPCIに統一されててキャッシュの問題が起こりづらい(もうdma_alloc_coherentの挙動調べるの飽きた) キャッシュがソフト的に見れば一階層 (L2の挙動が定義されてないARMとかいう無名CPU) 除算とFPUが付いてる ABIがWin除けば32bitと64bitとx32の3種類しかない。 PCIe がキャッシュスヌープ付けてフルスピード近く出る lock cmpxchg が遅くない *fence が遅くない こういう問題で別のアーキがx8

    x86よくできてる点 - w_o’s diary
    craf
    craf 2017/04/14
  • デバッグprintfの仲間達

    printfは複雑な挙動をするので信頼できないことが多い。おいつめられると以下のようなものをprintfがわりに使う。 デバッグwhile(1) コードが止まるかどうかを判定することでフローを確認する。マシン語数命令で完結するのでかなり信頼できる。OS無し環境でも使えるのが嬉しい。Windows環境下ではプログラムを終了させるのが面倒。副作用が無いので時間かかっているだけなのか判定できない。 デバッグ *(int*)0 = 0; (デバッグSEGV) プログラムが終了するかどうかを判定してフローを確認する。さらにcoreを吐かせたり、JITデバッグしたりしやすい。ライブラリを必要としないので、abortよりも信頼できるしバックトレースもきれいに出る。が、Windows GUIはたまに例外を握り潰してることがある気がする(やめてくれ) デバッグexit(1) プログラムが終了するかどうかでフ

    デバッグprintfの仲間達
    craf
    craf 2015/06/16
    デバッグaはよく使う
  • 並列プログラミングに目覚めた!スレッド起動レイテンシ14.5msec のカスペル先生から受けたひどい仕打ち - J

    今の状況を書いておくと、 https://github.com/tanakamura/waifu2x-converter-cpp/blob/gpu/src/modelHandler_OpenCL.cl いちおう動いている、が、FMA版よりまだ遅い。i7 4700MQ vs GTX 765M でFLOPS値 200 : 80 ぐらい 765M は 1300GFLOPS なので効率6%ぐらい。 FMA 版と同じように、outputplane を最内ループにすると、係数全部ローカルメモリに乗せないといけないのだが、16KBでは全然入らない。(最大576KBになる) 案としては、 occupancy に頼らない。参考:http://www.cs.berkeley.edu/~volkov/volkov10-GTC.pdf SMあたり65536,32768 レジスタあることを考えると、128x9 は余

    並列プログラミングに目覚めた!スレッド起動レイテンシ14.5msec のカスペル先生から受けたひどい仕打ち - J
    craf
    craf 2015/06/15
  • 2014-10-15

    比較と状態遷移が難しい。 年をとるごとに、自分がプログラマとして能力が高まりつつあるのを感じる。 何故、年を取ると能力が高まっていくのかというと、将来への明るい希望が減ってくると、「自分は優秀だ」という勘違いぐらいしかすがるものが無くなるからなのだった。だから、多分俺は今後も年を取るにつれて能力が高まっていくと思う。 さて、そんな優秀な俺なので、処理内容を理解している場合は、プログラムの実装時に困る、ということはほぼ無くなっているという気がする。 (まあ、実装以外の面で、処理わからんとか、アルゴリズムわからんとか、論文全く読めないとかで停止することはよくあるので、別にプログラミング能力の高まりに対応して仕事がサクサク進むというわけでもないのだけど) しかし、それでも、やっぱりプログラム難しいと思う点が、最後に二点残った。これは、 比較が < なのか <= なのか? 状態遷移ちゃんと書けたの

    2014-10-15
    craf
    craf 2014/10/16
  • http://meadowy.org/ 繋がらなくて悲しい - w_o’s diary

    まあ実用上はNTEmacs使えという感じだが、プログラム書き始めた頃からMeadowなのでサイトが無くなったとかいう外部要因で使わないようになるとか心苦しい。 とりあえずミラーはまだ残っているみたいなので、setup.exeをかきかえて、http://int.main.jp/mirrors.lst を見るようにしたsetup.exeを置いておくので同じように悲しい人は使ってください。 http://int.main.jp/setup-intmain.exe

    http://meadowy.org/ 繋がらなくて悲しい - w_o’s diary
    craf
    craf 2014/09/24
  • Windows8 HDD 停止する - 2014-04-16 - J

    なんか初期化時にdenormalを無効にするようにmxcsrが設定されるようになるらしい。 http://scottiestech.info/2012/09/01/windows-8-freezes-or-hangs-the-fix-that-worked-for-me/ Intel RST(Rapid Storage Technology)がなんか良くないからなんとかしてこれを排除しろという感じっぽいな。 排除のしかたは人による。今のWindowsはAHCIドライバ入っているからRSTは必要ない。 現象としては、 HDDアクセス0%なのにHDDのLEDはずっと点灯している スワップとかSuperFetchとかのようにすごく遅くなるとかではなくHDDのアクセスが完全に停止する 数十秒〜数分ぐらい待つとなにごともなく復帰する イベントログを見るとstorahciがRaidPort0をリセット

    Windows8 HDD 停止する - 2014-04-16 - J
  • プログラマが集中してる時に話しかけてあげよう

    プログラマが集中してる時は邪魔すんな、みたいなのって、当然のように語られてるけど、あれ、正しくないこともよくあると思う。 まあ、真面目な話をすると、プログラマの障害の半分くらいはコミュニケーションロスから出てくるのだから、作業効率半分くらいになったとしても、話しかけんなオーラをアピールするのは良くない、とかある。 …が、まあそれはいいとして、寂しいから話しかけて欲しい、という人も、それなりにいると思う。 2ヶ月くらい前になんかの機会に8人ぐらいに聞いたところ、「集中してる時は話しかけんな」派は半分くらいだった。 多分、割合としては、 話しかけんな派 : 50% どっちでもいい派 : 25% 寂しいから話しかけて欲しい派 : 25% くらいなんではないですかね。(超適当) 僕とかは、人に仕事頼まれた直後とかは、承認欲求パワーによりそれなりにやる気あるけど、そこから2時間とか半日とか過ぎると、

    プログラマが集中してる時に話しかけてあげよう
    craf
    craf 2014/01/28
  • 2014-01-26 自分に対してダメとか言ったらいけない - J

    まあ最近のインターネットを活用した研究によると、自分のこと悪く言うのが一番良くないと言われつつあった。 しかし、この点エンジにゃーは若干不利だよな。エンジにゃーは、それなりに、ものごとを悪く考えるのが仕事として有利な場面があって、日頃から物事を悪いほうに考える訓練をしてると言える。 もちろん、仕事で悪く考えるのと、日常のものごとを悪く考えるのは一緒ではないが、人間の精神はそんなにうまく切り離せるものではないので、こうしてエンジにゃーな人々はっていくのだった。 まあ仕事より健全な精神のほうが大事なので、仕事でも悪く考えないようにするのが大事だと思う。 ファイル開けなかったらどうしよう 大丈夫。開けるよ。 ユーザーが操作まちがえたらどうしよう まちがえるやつが悪いよ。僕は悪くないよ SQL文字列が送られてきたらどうしよう その人、SQL送ってデータベース見たかったんだよ。お客の要求に応えた

    2014-01-26 自分に対してダメとか言ったらいけない - J
    craf
    craf 2014/01/27
  • Cell/B.E. - w_o’s diary

    ネットワークレイテンシ縮めるにはどうすればいいか考えてたときにひょっとしたら「CBEならできんじゃね?」とか思って、つまり、NICから直接SPEのLSに入れて、SPEからNICのレジスタ叩けば、DRAMのレイテンシも存在しないTCP/IPアプリケーションが作れるのではないかと思ったんですよね。 まあ、実験環境ないのでそう思った以上のことは無いけど… そのついでに、どのぐらいCBEがよく考えられていたか書いてもいいかなと思ったので書いておく。 (個人的に、Cellという表記/呼びかたはなんかあまり好きではなくて、Cell/B.E.もしくは、CBEと呼ぶので、以下、CBEはそういう意味で読んでほしい) はじめに CBEがあんまり普及しなかったとか、半導体業界の背景とか色々あって、多分新規アーキテクチャで世界制覇目指すとかやるのはCBEが最後になる可能性があるし(狭い部分では新規アーキテクチャと

    Cell/B.E. - w_o’s diary
    craf
    craf 2013/03/12
  • ICFPC2011 - w_o’s diary

    "CopyKawaii"で参加してた。どのカードが一番かわいいか議論になって僕はzombieかわいい派だったが、copyかわいい派がいたので腹いせに名前をそれにした。 ↓submitしたコード http://int.main.jp/files/ltg-opt.d.tar.gz 半分くらい使ってないが。(これも反省だなぁ) 色々反省はあるが、一応時系列で書いておくと、 最初どうしたらいいかわからんかった。 で、とりあえず、 LTGプログラムをもっと簡単に書けるようにする(eval.cppから呼ばれてる関数達) その上でアルゴリズム書く(zombie-help.cpp) という問題かなー、と、思って、 上を僕が、下を @taitai_jp が書いていた。 LTGプログラムは、定数書くのが超めんどくさくて、f (g 10) とかが書けないので、それをコンパイルするコードを書いた。 最初のメモによ

    ICFPC2011 - w_o’s diary
  • Meadow遅くて死にたい 2011-05-28 - J

    なんかメモ書いてたらできた。 MS ゴシックとかのTrueTypeフォント使ってると日語の表示が遅くなる問題 大量にファイルを含むディレクトリで補完すると遅い問題 を修正してます。 download c:/meadow/bin/Meadow.exe とかの、インストールしたディレクトリに入っているMeadow.exe を、上のzipに入っているMeadow.exeでおきかえてください。 meadow-20110528.patch は、Meadow-src-r4261.tar.bz2 との差分です。 Meadowのビルド方法は、 VCのcl.exeを用意してパスが通ったとこに置く makeinfo.exe と、coreutils をパスの通ったところに置く(面倒ならcygwinでもできるかも) cmd.exe から cd src/nt へ入って、configure.meadow.bat を

    Meadow遅くて死にたい 2011-05-28 - J
  • いわゆるマルチスレッド対応した言語が使いものにならないと思う理由 : 2010-12-07 - J

    個人的には、マルチスレッド対応とか並行処理対応とか銘打ってる言語の機能は使いものにならないと思っている。 Javaは、登場当時、マルチスレッド対応を謳っていた。が、登場時の目玉機能であったモニタは、オブジェクトとロックが関連付けられてしまうのと、モニタしかロックする方法が無いという二点で設計に失敗した結果、今はまともにマルチスレッドするなら、java.util.concurrentというライブラリを使いましょう、ということになっており、もはや言語レベルでのマルチスレッド対応は、「volatileがC/C++よりまとも」という点ぐらいになってしまった。 マルチスレッド対応とか、並列対応とかに騙されてはいけない。あれらは全て使いものにならない。以下にそう思う理由を書く。 (以下はCPU性能の為のマルチスレッドの話で、イベントとかIO処理のためのマルチスレッドについては考えてない) メモリ問題に

    いわゆるマルチスレッド対応した言語が使いものにならないと思う理由 : 2010-12-07 - J
    craf
    craf 2010/12/09
  • 2010-01-31

    行ってきた。手元のメモから色々と拾っておくと… キャンセルという単語が出た。そう、キャンセルって結構難しいんだよな…。自分でプログラム書いてると、キャンセルとかどうでもいいと思ってしまいがちだが、svnとか使った瞬間にCtrl-Cで止まらないプログラムは糞!とか考えてしまいがちである。トランザクショナルなものは適用可能な箇所がいくつかありそうだよね… POSIXのmutexは重くない。あとで実測しようと思ってたが、めんどうになった。その昔、EnterCriticalSectionはCPU1個の場合と2個の場合とで挙動が違うよ、どっかのスレで見かけて、それとその周辺の議論が面白かった気がしたが、どこで見たか忘れた。 STMの話で、「デッドロックしないとかインチキだ!」と、id:hayamizさんにイチャモンを付けるだけの簡単なお仕事をした。 STMは、トランザクション開始が入れ子になっていて

    2010-01-31
  • PS3 Hacked!! - J

    例のPS3ハックを理解するために、PPC64およびPS3のメモリ管理と仮想化の仕組みを理解しておこう。目標は、あの解説を読める程度になるレベルで。 (調べながら書いてるので流れが少し変かも) 手元にはPowerPC Operating Environment Architecture Book III Ver2.02(以下Book III)を用意しておいてほしい。 いくつかPPC64用語を解説しておこう。 LPAR PPC64では、x86でいう仮想化みたいなもの…OSの上位にいるプログラムを書く仕組みは、Logical Partitioning(LPAR)と名前が付けられており、アーキテクチャの一部として定義されている。 あと、x86でいう仮想化は、FullVirtualization支援の意味が強いが、PowerPCのLPARはParaVirtualization支援っぽい感じだと思う。

    PS3 Hacked!! - J
  • 絵で見てわかるC言語入門 - 第1章 - J

    そういえば勉強会の時に、「関数ポインタを返す関数はどうやって書くか?」みたいになったが、僕はそういう時は$ man signal して調べる派である。 http://www.linux.or.jp/JM/html/LDP_man-pages/man2/signal.2.html さて、C言語を使い慣れた人には常識ですが、C言語初心者にとって少し難しいのが、変数の宣言です。 例えば、初心者にとって、関数ポインタの配列へのポインタを返す関数の宣言を書くのはあまり簡単ではありません。 C言語の初心者には、以下のようなコードを書くのは少し難しく、また、C言語にあまり慣れていない人は、typedefなどを使ってしまいがちです。 typedef int (*func_t)(int); typedef func_t func_arr_t[10]; extern func_arr_t *x[40]; in

    絵で見てわかるC言語入門 - 第1章 - J
    craf
    craf 2009/10/19
    初心者脱出は大変だなぁ
  • 2007-01-20

    色々あった。そのうち書く。 財布の中の小銭とかの枚数が最小になってる状態を「財布の正規形」と呼ぶ。 よーするに、「1円玉4枚以下、5円玉1枚以下、10円玉4枚以下…」と、いう状態。 google:おつり 最適化と呼ぶかもしれない。 世の中には、財布が正規化されてないと許せないというような人間が存在し…いや、さすがにそれはないか。まあ、なるべくは正規化されるようにがんばってる人達は大勢いることと思う。 難しいのは、1,680円とかの場合。この場合は、2,230円を出すことにより、おつりを550円にできたりする場合があって難しかったりするのだけど、まあ、そういう場合も、即座に計算できると、大変気持ちよく、小さな幸せを得ることができるのだった。 しかし、その幸せは、偽りの幸せであり、あなたは多分二千円札のことを忘れている。(千円札を二枚持ってはいけない)

    2007-01-20
    craf
    craf 2007/01/21
    着眼点良すぎw
  • J - SEA & FSIJ 合同フォーラム 2006年12月

    というわけで、前回の経験を活かして帰ったらすぐ書くのだった。(雑談忘年会のが結局書いてないままだし…) 6人だったという。なんて贅沢な。 とりあえず、単語だけメモったので、それをもとに。 メンテナが増えた Wikiの内容が大変充実 テスト環境が充実してます メモリ使用量も自動でテストし続けてるらしい。たまーに、メモリ使い過ぎるパッチがあるけど、それの早期発見に役立ってるとか。(今見つけた→http://gcc.gnu.org/benchmarks/ 色々ベンチマークしてんだなー) section anchor(http://gcc.gnu.org/wiki/Section%20Anchor%20Optimisations) 複数の変数をまとめて、一個のシンボル + 複数のオフセットにする。GOTのエントリが減る。MIPSとかだとエントリが減ると大変助かる…らしい。 CILを生成するバックエ

    J - SEA & FSIJ 合同フォーラム 2006年12月
    craf
    craf 2007/01/19
  • 2007-01-08

    やすみがおわるよ! 最近このマシンのLinux起動してねーなー、ということで、NTFSにした。もう完全にWindowsマシンだよ!ブートローダーがBSDのやつ。というかXPてfdisk /mbr無くなってるんか。 色んな誘惑に負けてプリンタを買ってしまった。プリンタを使うのはソフト屋としての敗北だと思う(ハードウェアに頼らないと生きていけない現実を認めないといけない)のだけど、まあ、死ぬる。 とりあえず、鶏はむの作りかたを印刷。 タイトルの通り。 オタという称号は、来、常人の知識を遥か越えて必要の無い知識を追い求める人達にそのキモさと偉大さを称えるために与えられるものであったにも関わらず、現代における「オタ」というのは、もはや、キモさも偉大さも失なわれ、「なんとなく、サブカルちっくなものに若干の知識がある人間」を差すようになってしまった! (と、ここまで書いて、どっかで誰かが既にもっと考

    2007-01-08
  • J - C++の素晴らしさ

    SOFSはC++で書いてた。C++といえば、僕の趣味は、ときどき、C++の素晴らしさについて考えることなんだけど、そういう話。 まず、C++に触ったことないのに、どっかの誰かの受け売りで、「C++はキモくてヤバい」というような考えを抱いてる人がいたとすれば、それは、まあ、つまらない人生を送ってるよね、というような話なのである。 確かに、C++の素晴らしさは、大体にして時間の無駄なので、わざわざ時間を割いて勉強するものではないと思うのだけど、C++は、憎むべき点が山のようにあるのと同じように、愛すべき点も他の言語の愛すべき点を++したぐらいはあるのだ! どっかのだれかの受け売りでC++に全く触らないのというのは、非常に正しいのだけど、間違っているのである!STL極めて、Boost極めて、その後で、「やっぱり、まともな構文とまともなコンパイル時間と、まともなエラー表示が欲しいわ」と、そこまで至

    J - C++の素晴らしさ