9月も最終日・・・・・

abdev 2 Comments »

なんかさびしいですよね。涼しい夕暮れ時、一人で家にいたりすると、なんともいえない空虚な感覚を味わったりします。

今日はバイトが終わってから、な〜んとなく、青木ヶ原樹海をドライブしてしまいました。しかも一人で。しかも、深夜・・・・・

さてさて、明日は休日☆久々に中学時代の先輩とメシ食いに行ってきます。その前に洗車をせねば。あ゛〜、それと髪の毛も切らねば…

朝まで七輪、またもや開催

abdev 27 Comments »

一日中パソコンやってると、精神的にくるものがあります。ってなことで、昨夜も店長、ジョニー先輩、MIC、フカちゃん、オギさんというお決まりのメンバーを呼んで七輪大会をしてしまいましたf(^^;;;

涼しくなった夕暮れ時の七輪はマジで最高です。こんな日が毎日続けばいいのに・・・・・

最近、十分な睡眠をとれずにいるのですが、今回も案の定、明け方の7時まで記憶があります。そんなこんなで今日は頭が働いていないんで、昼間はボーっとしながら、今日こそは早寝をするぞー

レジスタベースの演算コード生成

abdev レジスタベースの演算コード生成 はコメントを受け付けていません。

遅寝早起きで爆進中でございます

今朝は演算コードの生成部分についてのディープな話から…。しかし、この話題はコンパイラの中核を成す部分だといっても過言ではない、と〜っても重要なところなんでやんす。

コンパイラに搭載される演算コードの生成部分。例えば、

Dim a As Long
Dim b As Long
Dim c As Long
b=10
c=20
a=b+c

こういうソースコードをコンパイルすると、下記のようなアセンブルコードが出力されるんですね。

;b=10
push 10
pop eax
mov dword ptr[b],eax

;c=20
push 20
pop eax
mov dword ptr[c],eax

;a=b+c
push dword ptr[c]
push dword ptr[b]
pop eax
pop ebx
add eax,ebx
push eax
pop eax
mov dword ptr[a],eax

なんだか、わかるようなわかんないような・・・・・。とにかくpushとpopばっかやないかぁ〜!というのが正直なプロフェッショナル様方のご意見であって、あまりいいコード生成をしていないことは確かです…。

では、なぜpushとpopばかりになってしまうんでしょうか。そもそも、pushとpopって何か悪いことでもあるんでしょうか。

正直にお答えすると、pushとpopは必要でなければ無くなってほしいというのが本音なんですね。なぜかというと、いちいちメモリにアクセスしなければならないからです。pushという動作は、下記のような動作を行います。

  • espをsizeof(DWORD)分だけ加算
  • レジスタの内容または即値をespが示すメモリへコピー

popも同じく、この反対の動作を行い、メモリの内容をレジスタへコピーしてくれます。メモリにアクセスするのをどうして嫌がるかというと、遅いからなんです。演算を行うたびにいちいちメモリにアクセスしていたら日が暮れてしまいます(ちょい大袈裟!?)。最小限のメモリアクセスで、後はレジスタだけで演算してくれや〜というのがPCの方針であって、pushとpopはレジスタが煮詰まったときの最終手段だぞぃ、というのが本来あるべき姿なんです。

それでは先ほどのソースコード、どのようなアセンブラが出力されればめでたいんでしょう。

;b=10
mov dword ptr[b],10

;c=20
mov dword ptr[c],20

;a=b+c
mov eax,dword ptr[c]
add eax,dword ptr[b]
mov dword ptr[a],eax

う〜ん、マイルドでソフトなコードです。メモリアクセスやコード量を最小限に抑えています。それじゃ、最初からこういうコードを生成してくれるよう、コンパイラを改良してくれよ。と言いたくなるのですが、そうなると話は格段と厄介になってきます。

コンパイラはそもそも、どのようにして演算コードを生成しているんでしょう・・・・・?

まず言えることは、逆ポーランドに則り、コード生成を行っているっつーことです。逆ポーランドは、pushとpopを繰り返すことで演算を実現させているのですが、コンパイラは飽くまでもこの規則に則ってコードを生成しておるんです。

まぁ、おいらがネイティブコンパイラを作り始めたのは2003年の春のことですよ。もう、2年半前の出来事です。プログラミングさえ初心者レベルだというのに、こんなやつが作った演算コード生成部分は逆ポーランドに振り回されてpushとpopを繰り返してしまう、この程度のものです。

しかし、ABはVer5.0で64ビットに対応することになっとります。しかも、64ビットに対応させるためには、既存のコンパイラを作り変えるくらいの勢いが必要なんです。ということは、このような汚いコード生成部分を書き換えるチャンスなんです。レジスタだけでキレイに演算してくれるような、そういう機構を今このタイミングで作ってしまえばいいんです。

しかしですね、そいつを作るのは非常に大変なんですね。機械語というのは、ひとつの命令(例えばmov)であっても、状況に応じて、色々な形に変身するんです。

mov reg32,dword ptr[offset]
機械語 … 1000 1011 00rr r100 0010 0101 [32bit offset]

mov reg32,dword ptr[base_reg+offset]
機械語 … 1000 1011 10rr rbbb [32bit offset]

mov reg32,dword ptr[base_reg1+base_reg2+offset]
機械語 … 1000 1011 10rr r100 00bb bsss [32bit offset]

※機械語は2進数表記、"r" はreg32の識別フラグ、"b" 及び "s" はベースレジスタの識別フラグ

32ビットのmov命令だけをとっても、10種類以上の表現方法があるんではないかというくらいの勢いなんですね。別にアセンブル機構をソースレベルで持っているわけではないんで、こういう多種多様な命令を機械語化したいときは別途、アセンブラ命令→機械語への変換関数のようなものを作ってやる必要があります。

しかも、先ほどの話に戻って、演算の状況に応じて、多種多様なオペランドをそのつど指定していくのは、つらい作業です。それだったら、pushとpopを繰り返してしまったほうが10倍(もしかしたら100倍)くらい楽なんですよ。

まぁ…その…なんだ…

こういうこともありつつ、爆進中でございますので、「対応が遅い」だの、「メール送ったけど返事が無い、または遅い」とかがあっても、あまりお叱りにならないでください。

今がやまばでもあるんで、これを切り抜けられたらもっと面白い企画をDiscoversoftとしてやっていきますんでm(__)m

XMMレジスタが大活躍

abdev 3 Comments »
  • Pentium
  • MMX Pentium
  • Pentium 2
  • Pentium 3
  • Pentium 4
  • K6
  • K6-2
  • Athlon
  • Athlon XP

突然ですが、このリストは皆さんご存知の32ビットCPUの仲間たちですね。色々な技術がてんこ盛りのことだと思いますが、ベースとなるものはx86。特殊命令を除けば、すべて互換性があります。

ところで、VC++やABなどのネイティブコンパイラは浮動少数演算を行うときにFPUという特別なレジスタを利用することになるんですが…。このFPUというものはx86系のCPU、即ち上記リストで示したようなCPUであれば搭載している機構なんです。とすると、FPUに対応するネイティブコードを生成してやれば、ほとんどの32ビットCPUで演算可能になってくるんですね。そういう意味で、昨今までのネイティブコンパイラはFPUを使いまくっておったんだと思います。

しかし、時代は64ビットCPUの世界へと塗り替えられていきます。

  • Pentium 4 (6xx)
  • Athlon 64
  • Opteron

これらは登場して間もない64ビットCPUです(以下AMD64)。もちろん、AMD64もx86と同様にFPUレジスタは積んでいますし、それだけで十分に実数演算を行うことができます。しかし、よ〜く考えてみると、このFPUレジスタってやつはちょっと使いづらいんです。スタックベースだし、128ビットは使えないし(80ビットまで)、本数も8本だし…。まぁ、通常の用途であれば、こんなもんで事足りるんだと思います。

しかし、64ビットCPUは、64ビット演算をフルに行いながらそのポテンシャルを引き出していかなければ意味がありません。せっかく、汎用レジスタが64ビットになったんだから、double型演算なんてのもお手の物であってほしいものです。rdx:raxとレジスタを連結させ、128ビット整数型/128ビット浮動小数型なんてのも使いたいもんです。

そこで登場するのがSSE2です。SSE2は今現在リリースされている64ビットCPUすべてが対応しているハズです。っつーことは、64ビットネイティブコードからはFPUなんか使わなくても、SSE2に対応するコードを吐けば、AMD64上の話では互換性は十分に保てるということになります。

SSE2では、XMM0〜XMM15という16本の128ビットレジスタを利用できます。しかも、スタックベースではないんで、通常の汎用レジスタ感覚で利用することができます。しかもしかも、32ビット値を4つ同時に、64ビット値であれば2つ同時に扱うことができてしまいます。

いいことづくめで互換性もあるSSE2なんで、AMD64対応のネイティブコード、実数演算はこれで決まりですね。

こんな発見をしつつ、64コンパイラの開発は進みます・・・・・

登校日

abdev 登校日 はコメントを受け付けていません。

すっかり忘れていました。自分が大学生だったってこと。8月、9月は夏休みなんで、その生活スタイルはフリーターと変わりないんですよね。そんでもっておいらはバイトに開発と色々と忙しかったんで、いつから学校が始まるかなんて気にも留めていなかったんです。

今朝、PCをつけると友人EarthがIMにログイン。表示された名前に “Earth@登校日” みたいなことが書かれていたんで、まさかと思って聞いてみると・・・・・

そうなんです。今日が登校日なんです。学期始めのガイダンス日で、成績表なんかも今日渡されるんです。そういえば、おいらは大学生だったんだと、改めて実感させられる瞬間です。

いつもは味わっていないキャンパス内での学生気分、今日は満喫してみます。←ガキんちょがいっぱいいるんだろ〜な〜(っておいらもガキんちょですが…)

販売強化期間がスタート

apparel 販売強化期間がスタート はコメントを受け付けていません。

ウチの店は定期的に販売強化期間というものを設けております。接客をいつもより徹底して行い、売り上げを伸ばそうという、名前通りの意味を持つ期間であります。

新店長はやけにやる気満々であり、おいらたちスタッフはその勢いに支えられつつ、行動に移しているといった状況でしょうか…。自分から本気の接客をしてやろうという意気込みを作るには、それなりのスキル、モチベーションが必要です。まぁ、上司に動かされながらことを進めるといった意味合いで、おいらたちはまだまだアマちゃんです。

ここからは閉店後のお話。

店長「やまちゃ〜ん、○○塾、今日開校するけど入る??」

おいら「なんすか、それ?なんかの勉強会っすか?」

店長「新人教育を兼ね合わせた基礎的な講義塾だよ」

おいら「・・・・・。なんかわかんないっすけど、見るだけ見てます」

店長「あ、そ」

いきなり開催された○○塾。その内容は、フロア内での姿勢やお辞儀の角度、挨拶をするときの声のトーンと大きさなど、まぁ言ってみれば体育会系の塾なんです。

「声だせや、おめぇーら」くらいの勢いで、新人スタッフ3人をイジくりまくっとります。おいらは。一応ベテランスタッフなんで、こんな体育会系扱いの講習を受けるなんてたまったもんじゃありません。見てるだけと言って助かりました。

そうはいっても、すみっちょでコソコソしているのもあれなんで、おいらは堂々とその場の中で作業をします。そんなこんなで、おいらもイジくるほうへとまわります。

おいら「そういえば、A君(新人スタッフ)はカラオケでGRAYやラルクをマスターしてるらしいっすよ。もっと声出るんじゃないっすか?」

(ここですかさず、セカンド社員のオギさんがフォローへと回ります)

オギさん「A君はもう少し腹の中から声ださないとダメでしょ」

店長「オレが良いって言うまで、ずっと復唱してろや」

A君「いらっしゃいませ、いらっしゃいませ、いらっしゃいませ・・・・・」

まぁ、こんな感じでいつもとはまた違った雰囲気の閉店後フロア。おいらは新人スタッフじゃないからまだいいものの、こんないじくられたら、辞めそうです/(–)/

明日もバイトは遅番。3連休の中日なんで、混むのかな・・・。ともかくがんばりますわぃ。

x64のAPI関数呼び出し

abdev x64のAPI関数呼び出し はコメントを受け付けていません。

x64対応のEXEファイルのPEヘッダ、基本的な部分は解読できました。そして今日はなんとか、簡単な計算プログラムをコンパイルできる状態へと持っていくことができました〜。コンパイルとはいっても、64ビットモードで動作するめちゃくちゃ簡単なネイティブコードがはけるようになっただけですが…

ところで、x64の関数呼び出し規約って、昔のそれとはちょっと違うんですよ。何が違うかってーと、レジスタ経由が前提条件になっているんです(先日も言いましたね(^^;;;)。詳しく言うと、第1〜第4パラメータがrcx、rdx、r8、r9レジスタで引き渡されるんです。

今現在のABコンパイラは、逆ポーランドに則り、pushとpopを多用することにより、演算部分のコード出力を実現させています。しかし、これではレジスタのみで演算が事足りる場合でも、いちいちメモリアクセスを必要としてしまうため、効率的であるとはいえません。コード最適化の面から言えば、「最悪」という評価が下されることでしょう。

しかし、「x64関数はレジスタ経由でのパラメータ引渡しが前提条件になっている」このような機会は逆にチャンスです。このタイミングでコンパイラの演算部分を改良し、適切なレジスタ同士で演算が行われるようなコードを吐けるよう、改修作業を進めようと思います。

まぁ、このレジスタを効率的に利用するってのがコンパイラ設計者の真の悩みだったりするんで、一筋縄ではいかなさそうです…。ボチボチやってきます

寝不足出勤

apparel 寝不足出勤 はコメントを受け付けていません。

街中の飲み屋で行われた新店長の歓迎会、夜中の3時まで続きました(汗)。いつもの調子で、おいらも飲ませられ、限界ギリギリ。朝っぱらから寝不足モードでバイト先へと向かいます。

仕事が始まってしまえば、お客さんもくるので、スイッチを切り替えねばなりません。スイッチさえ入ってしまえば、なんとかなるってもんで、皆さんちゃんと仕事をしはじめます。

まぁ、ダルイダルイ言いながらやってはいるんですが、皆さん懲りてないんです。というのも、明日の夜、ウチでメンズ会(男スタッフだけで色濃〜い内容を語る会 ※極秘資料有り)が開催されることになったのです…。

どうなることやら、ジョニー先輩、MIC、おいらと、立て続けに店を辞めていく連中に、新人スタッフが加わり、めちゃくちゃ色濃いサミットが開かれそうなこの会。涼しくなってきたところにお馴染の七輪が活躍しそうな予感も…(^^;;;

まぁね、バイトばかりでまわっているお店というのは、常に変貌を迎えているということで、その移り変わりについて行くのは意外と大変なことなんです。イケ面新店長が加わったり、ベテランスタッフが辞めようとしているこの時期は面白い衝突が起こったりするんです。おいらは社会勉強の一環として、観戦(時々参戦)させてもらうことにします。

そんなことより、新店長が「水曜どうでしょう」の鈴井さんにめちゃ似てるんですよ(特にしゃべり方)。本人に「鈴井さんに似てますねぇ〜カメラまわせるんじゃないっすかぁ??」といってみたら、案の定、どうでしょうを知っとりました。こいつは確信犯かもしれません(^^;;;

消費税総額表示について、客キレる

apparel 消費税総額表示について、客キレる はコメントを受け付けていません。

午前中のことです。いつものように出勤後、朝の客を迎えます。今日は月曜日なのですが、敬老の日ってなことで祝日です。客数もちょっとは多いのかなと思ったら、案の定、朝から店内は賑わいました。

ちょうどお昼ころですがね…。雑用でレジの中へ行くと、ミカねーさんが対応しているお客のじーさんが怒っているではありませんか。こりゃ大変、おいらはレジ内で作業をしていると見せかけながら、耳を傾けます。

ミカねーさん「一点のお買い上げで、3045円になります。」

じーさん「あ!?こっちは2900円の商品を買ったんだよ。なんで3000円以上はらわなくちゃなんないの」

ミカねーさん「税込みでこの価格(¥3045)になります。」

じーさん「あんた、総額表示って知ってるよね。最初から税込み価格じゃなくちゃいけなくなったんでしょ」

ミカねーさん「(一度袋へ入れた商品をまた取り出して)こちらのタグには、本体価格と税込み価格の両方を表示させていただいておりますが」

ここでちょっと補足を入れますと、ウチの店は

本体 ¥2900

(税込 ¥3045)

というふうに表示されているんですよね。税込み表示はキッチリされているものの、消費者にとって本体価格が目立つと言われるとそのとおりです。いい機会なので、ちょっと調べてみました。

総額表示Q&A:

http://www.mof.go.jp/jouhou/syuzei/siryou/sougakuhyoji/a_001.htm#6

どうやら、法的にはスレスレ(一概に悪いとはいえない)ようですが、消費者に誤認を与えてしまった場合は要対応のようです。ウチの店よ、キチンとした企業なんだから、ここらへんの問題、ちゃんとしてくれよ。総額表示が始まってから早半年が過ぎようとしていますが、よくモメゴトが起きなかったものです。

で、その後もじーさんは引き下がりはしませんでした。ミカねーさんが困り果てたのを察知してか、店長が対応を変わり、じーさんの説得に回ったのですが、まぁ、そんなに騒ぎ立てることでもないじゃろっつーのが一般人の意見なワケで、後ろに並んでいた客も「ウザイじーさんだな」みたいなオーラを発しておりました。

このじーさんも、数十円を払いたくないがため、というんではなく、店全体の雰囲気やサービスの行き届きを総合的に判断して怒られたことなんでしょう。雰囲気作りをしなくちゃならないおいらたちの責任もあるかもしれないんで、こういう問題には要注意です。

IPAの第4回事業化情報交換会に出席

abdev IPAの第4回事業化情報交換会に出席 はコメントを受け付けていません。

またまた東京です。午前中は実家酒屋の配達を手伝い、正午ギリギリに東京へと出かけます(新幹線に乗り遅れそうになりました。アブナイアブナイ)

IPAからの事業化情報交換会のお誘いメールは先日届いたのですが、無知なおいらはその内容を知らないまま、参加申し込みをしてしまったんですね。

事業化情報交換会ってのは、ITベンチャー企業の投資、融資に関する情報提供の会のようなもので、まだちょっと敷居が高かったかも…。でもでも、とても参考になるお話は聞けたんです。起業してみたいという野望を持つものとして、事前勉強会が受けられたと思えばお安いもんです。普通の学生がいけないような場所へ行くことができたんですから。しかも、後半はあの元日本オラクル社長、アレン・マイナーさんの講演を聴くことができたんです。もうおいらにとってこれほど刺激を受けることはありません。「成功」ってなに、自分にとってどんなもの?ウーン、深く考えさせられます。

それにしても、「ベンチャーキャピタル」。なんて良い響きなんでしょ。数年後はぜひともお世話になりたいってもんです。とにかく、目の前にある仕事、がんばります。

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン