プログラミング全般

CPUとアセンブリ

言語としてのx86アセンブリ(gasとかnasmとか)は微妙に分かってるけど、CPUの動きには詳しくないので、書いてみたもののあまりよい結果にならないことが多い。素人的には計算数が減ればその分速くなるだろうと思っていたけど、ぜんぜんそうでもない。ある程度…

VC++コンパイラのSSE最適化結果をすこしみた

ディスアセンブルしてみたけど、C側の単精度の計算が遅いのは倍精度用の演算命令を単精度をコンバートしながら行っているからっぽい。 4つ同時にできるはずの演算を変換かけつつ2つ同時にしかしていないので、単精度用の演算を使って書いた側と差がある。…

SSE.浮動小数点演算手動最適化は本当に効果的なのか

ちょっと試したので、結果をコピペ。 概要とたてまえ SSEは、x86のSIMD命令セットに含まれる浮動小数点演算の複数同時実行を行う命令セットです。単精度(float)で4つ、倍精度(double)で2つの演算を1命令で実行できるため、うまく使うと繰り返し同じ演算のパ…

OpenMPでの最適なスレッド数 (2)

CPU4コアマシンがきたので。 環境 CPU Intel Core 2 Quad Q9550 @2.8GHz RAM 1GB x 4 コード OpenMPでの最適なスレッド数 - デー と同じもの。 結果 // シングル/マルチ[スレッド数]: 完了時間ms: (素数数 @並列化がバグっていると変な値になる) S : 5078 (6…

OpenMPでの最適なスレッド数

コア数に依存する数値があると思って調べたけど分からなかったので計測した。 環境 CPU Intel Core 2 Duo T7200 @2.2GHz 2.2GHz RAM 1GB x 2 コンパイラ VC++ 2008 Expressについているもの OpenMP Windows SDKを入れたら使えた コード ひたすら素数を数える…

タブ幅の標準化

タブ幅を設定したいディレクトリに.tabというファイルを作って tabsize 4とか書いておいて、TABを表示するソフトはブラウザがfaviconを探すのと同じ要領で.tabファイルを探していって、ファイルと一番近い位置にある.tabのタブ幅で表示するみたいな仕様があ…

ソースコードのインデントはタブかスペースか

自分はタブ派です。TAB。0x09。移動が楽だし。 スペース派の人はエディタによって表示違うから云々言いますが、それは『このプロジェクトではソースコードのインデントはタブとし、タブ幅は4とする』と決めて、それに従えばいいだけでしょ、と思っていました…

ファイルの全比較とHASH値比較 (2)

ファイルはデータサイズが大きい可能性があるというのが、HASH比較をオススメできない一番の理由かな。 先頭1バイトが違う10000000000000000000TBのファイル2つだと全比較で1byte比較するだけすむ。

ファイルの全比較とHASH値比較

同一ファイルかどうかを調べるのにMD5を使うというのは、比較するファイルが両方手元にある場合はおすすめ出来ません。 その一番の理由は、コストです。 ファイルどおしの単純比較の倍以上します。 という話があり、 MD5比較は先にファイル数分だけHASH計算…

ファイルの全比較とHASH値比較 (5)

自分で書いて気づいたのですが、ファイルの比較用ハッシュ値も別にファイル全体のハッシュ値を完全に計算する必要なんてなくて、例えば先頭10KBだけを使うとした場合でも十分平均速度向上の効果があると思います。どうせ、ハッシュ値が一致したら全体比較す…

ファイルの全比較とHASH値比較 (4)

はっきりしないと気持ちが悪い原因は、人間の意志が介入しなければ完全にうまくいかないプログラムしか作れないからなので、そこから考えると試行なりコスト計算なりして最適なアルゴリズムを動的に選択するような機能まで含めてしまえばいいのだと思いまし…

ファイルの全比較とHASH値比較 (3)

知人から、まじめに計算してみって言われた。 でも結局、なんパーセントのファイルがどうこうだった場合に、どちらが速いという境が出る程度で、実際にディレクトリ内のファイルがそうである確率が統計から見て半分より低いか高いなら、あっちにしたらいいん…

二次元配列

int ar2[y][x]; int ar2[row][column]; Cではコレが世の中の標準だと思っていたけど、逆なプログラムもあった。ライブラリからの応答がどうも変なのでパラメーターが違うのかとか移植に失敗しているのかとか調べていたら、ただ回転しているだけだった。

includeはむつかしい

C言語でもっとも難しいのはincludeじゃないだろうか、と思った。 どういう感じでやるかきちんと方向性を決めておかないとほんと悩む。 プログラムが動くとか動かないとかじゃなくて、「コレとコレは結局のところ同じ結果になるんだけどどっちがいいかな?」…

画像形式にハマる (2)

PNGの機能についてよく調べることにした。 わりと多機能。

setjmpとlongjmpはC言語の標準ライブラリ関数

libpngではsetjmp(3)とlongjmp(3)が多用されている。エラー処理に使っているようだ。わりとすばらしい。 setjmp/longjmpというと、ユーザーレベルスレッドの実装でコンテキストスイッチに使ったり、Cからレジスタへのマニアックなアクセスをするときに使った…

画像形式にハマる

ちょっとしたビットマップデータ(二次元配列)から画像を作ろうとする libpngを使ってpng形式にしてみた ソースデータがちっさいのに画像データにこんなサイズいらないでしょ? うまくやれば1/64以下になるよ(キレる) XBM形式にしてgzip圧縮してみる IE7(or…

else if、elsif、elif

else if C/C++、D、Javaなど elsif Perl elif Cのマクロ、Pythonなど なにかこだわりがあるんでしょうか。 半年に一回くらい迷います。 短所とか、長所が気になる。

チャットや掲示板におけるログ表示と個人の識別について

新月でもログの保存についての議論が行われているようですが、自分もここ最近似たようなことについて毎日5分程度考えていました。ちょっと違うのですが。 その内容というのは、掲示板やチャットのようなコミュニティサイトの環境を作るとして、ログの表示機…

本当にあったパケットロス

UDP(IP)はパケットロスや順序の入れ替わりがあるといわれています。 私は、表面的にはそのことを注意しつつも、数年前にTFTPのサーバとクライアントを作ったときにパケットは全く入れ替わってなかったしロスもなかったという経験から、それは大げさな都市伝…

どのプログラミング言語を使ったらいいのか分からぬ

もうJavaやるかな。Java。 Signed Appletにして、ブラウザから使えるようにするとかさ。 C#もライブラリが充実していてよさそう。 でも、JavaもC#もフリーソフトで使うとユーザから嫌がられるんですよね。このあたり、開発者同士で固まって、プログラムが書…

自分用ライブラリ

スレッド間でイベントのやり取りをしたいと思った。それの必要性はポエニーのときもあったので、自分でスレッド間でのメッセージとイベントを扱うライブラリを作っていたのだが、「アレは使いたくないな・・」と思ってしまった。 そんなものを作った自分がなん…

メモリデータベース 1

今後スレで謎の海外勢が教えてくれたことのメモ。SQLite3では、メモリ内データベースというのがあって、ファイルではなくメモリ上にテーブル作ることが可能らしい。これによって、小さなテーブルへ頻繁にアクセスするような場合にハードディスクへのI/Oが激…

OLE ActiveX COM とかいうもの

OLE、ActiveX、COM。 Windowsのなんだかよくわからないが、ややこしそうなそうなやつという認識だったが、必要になったので調べた。 OLE(Object Linking and Embedding)とは、アプリケーション間でデータを転送や共有する仕組みである。ActiveXとは、OLEをイ…

スクリプト言語作成について

WizardBibleでid:KenjiAikoさんが、『スクリプト言語を作ってみよう』という記事を書かれています。 私もポエニーを始める半年ほど前にスクリプト言語にチャレンジしていました。 コンパイラの場合は、マシンコードを作ったり、OSの実行形式を作ったり、それ…

はてなのキーワード機能はすばらしい

用語が「誰か」によって、既に登録されていれば、わざわざ用語に対してのコメントや注釈を書く必要がない。 日記という、新語や流行語、専門用語やキャラクター名や今ちょうどやっているドラマのタイトルなど、読者が知らない言葉が多数が使われる可能性が高…

Win32 SetAttributesでは、圧縮属性を変更できない

はまったのでメモ。Win32のAPIである、SetAttributesではNTFSの圧縮属性を変更できない。 私は、PerlのWin32::File::SetAttributesを使って、圧縮属性を変更しようとしたができなかった。しかも、エラーとならずに成功する。 ということは、互換性のために残…

多対多の非同期なコマンド処理とデータグラムソケットの相性が良すぎる件

なぜか今頃になって、データグラムソケットのすばらしさに気づいた。 多対多の非同期であいまいな(1つ1つのコマンドにあまり重要性を持たせない)コマンド処理にぴったし。1コマンドセットを1データグラムにのせる。 今はまだプログラム内だけの仮想的なネ…

自分で使いながら作る開発方法について

細いAirH"回線でジャッカルをDLしつつ、気になる点に手を入れていくという開発方法を試し始めました。@ 使いながら作るよい点 めんどくさ!とか、なんでこんなこともできないんだ!と思ったら、すぐその機能を追加できる。機能追加後は、その部分については…

 ノンブロッキングソケットでの送信エラー

ポエニーでは、ノンブロッキングソケットを使って、接続時、受信時にタイムアウトを設けているのですが、送信に関しては、なにも考えていませんでした。 どうやら、ノンブロッキングソケットでのsend()は、送信完了前に戻ってくるので、送信可能状態になるま…