リンクフリーを近日中にとりやめる予定です

すでにリンクを貼っていただいている方、ご一報頂きたくお願い申し上げます。


ごく少数ですが、リンクをお断りする場合があります



ブログ内 風景光景カテゴリー

続編記事などをご希望の方は こちらへどうぞ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[未掲載分] 車輪の再発明 (2)

元来、好ましい意味で用いられない「車輪の再発明」。



筆者は、そのような行為を肯定的に捉えている。
なぜならば、新しい技術や文化が芽生えるきっかけは、一見無駄と思われることへの挑戦である・・・


お知らせ
活動休止にともない、この記事を事前に予約投稿してあります。
トップ記事の固定を目的としています


この題目は2012年暮れ頃に掲載しようと下書きし、諸事情により掲載却下とした分です。
前話、「車輪の再発明 (1)」にひきつづき、利用環境を OS はWindows , CPU は Intel 製、いわゆるウィンテル機を前提として綴ります。

いきなり難しいコードを載せるのもアレなので、今回は概論。
コンピュータの中で頻繁に行われる、データの複写 ( コピー ) について。

その前に、
複写と移動の違いが曖昧なヒトもいることでしょう。



場所A、Bがあるとしましょう。
場所Aにあるモノと同じモノを場所Bに作成する。ここまでが「複写」、「コピー」です。
ちなみに、複製を作るに該当する英単語は 「duplicate」。
場所Aにあるモノと同じモノを場所Bに作成し、場所Aにあったモノを消してしまうのが「移動」。
勘の鋭いヒトはお気づきの通り、「場所Aにあったモノを消す」、つまり、かたづける手間が増えます・・・

例えば、ワープロや画像処理アプリ( ソフトウェア )で図形の移動処理を施したとしましょう。図形を移動する前の部分が無になる、つまり、片付けられたように見えます。
「移動」に関して直感的に捉えようとした場合、元の部分 ( ここでは場所A ) がキレイに消えてしまうように想えるでしょう。
コンピュータ内部での処理に限って言えば、元の部分を消さないこともしばしば。
(漠然と綴るとキリが無いので、利用OSをWindows と想定して話を進めています。)

- - - 複写や移動の話から逸れます - - -

アプリで何か処理をしようとした場合
・OSにメモリを割り当ててもらいます。
(ここでは、場所AやBといったメモリの一部を作業場所として借りている状態。)
・ある程度の処理を行い、不要になったメモリを解放することになっています。
(OS から借りていたメモリを返却。)

人間の生活に例えれば、図書館で原本を借りてくる。原本に載っている重要な部分を別のノート等に書き写す、ここまでは複写、コピーです。借りてきた原本はそのまま、すなわち、手を加えずに返却するのがマナー。
いつまでも返却しなかったり、原本に手を加えてしまうのは「お行儀が悪い」。

ただし、資源の再利用として、同じメモリ部分をくり返し利用する例も考えられます。
Windows などのOS 、つまり、複数のアプリを同時に実行できる環境において、ひとつのアプリが「多量にメモリを使いたくても許可されない」事態も発生します。
そのような状況では、不要になった ( 本来ならば OSに返却するのが望ましい ) 部分を再利用するような手法も有効です。
先の図に戻り、「場所Aにあるモノと同じモノを場所Bに作成し・・・」で言うならば、場所Aにあったモノは用済みとなりますので、早めに返却すべきでしょう。が、返却して、再度借りると手間がかかるため、不要になった「場所A」を返却せず別の作業をする場所として使い続けるといった具合に・・・

メモリを作業机に置き換えて考えてみます。
何らかの作業を行いたいとして、作業机が8卓分あると進行がスムーズになるとします。ところが、空いている作業机が2卓しか無い場合どうでしょうか。
その2卓の机の上で、できうる範囲の作業を進め、一度片付け、残りの作業を進めてゆくことでしょう・・・

しばしば、アプリ(ソフトウェア)を組む際には、「データを局所に集ておく」「局所性を高める」ことが良いとされています。広大なメモリ空間を取得して処理するよりも、狭い空間のほうがキャッシュにヒットしやすい傾向にあります。言い換えれば、小回りが効きやすくなります。

- - - 複写や移動の話に戻ります - - -

複写を高速化できるのか???
つまり、
さらに高速にデータを転送できるのか???

まず、誤解を避けるために記しておきます。
USBメモリや外付けHDDを用いてデータをバックアップするのも「データの転送」と呼びます。
今回綴る「データの転送」の主語は「PC 内部において、メモリのある地点から別の地点への・・・」となります。長いので省いています。

少し視野を広げると、古くからのDMA (Direct Memory Access の略) 転送と呼ばれる、データの転送方法もあります。
今回綴るのは、「CPU の演算器を介したデータ転送」。

「演算器」という呼び方は少々堅苦しいかもしれません。別の呼び方では「アキュムレータ」、「レジスタ」などなど。
役割というか、できることを簡単にいえば
・計算するための基の数値データを読み込む、積み込む = ロード
・何らかの演算をする、
・演算結果 ( 数値 ) をどこかへ置く、残す = ストア、セーブ。

しばしば「~~ビットCPU」のような呼び方も用いられます。
例えば、「32ビットCPU」であれば、8ビットが1バイトですので、4バイト分のデータを扱えることになります。
32ビット版のOS を利用しているならば一度に4バイト分、データを積み下ろしができます。
( 64ビット版のOSならば一度に8バイト分 )

ビットとバイトに関しては当ブログ、PCのナゼ!?カテゴリー内、「遅くない除算」中ほどで触れてあります。

ところで、CPU は現在に至るまで、さまざまな機能が拡張、追加されてきました。
( ウィンテル機を前提に綴っています。ここで指しているCPU は Intel 製 の CPU。ただし Itanium シリーズを除く)

浮動小数演算を高速化するための FPU 、マルチメディア処理を高速化しようと MMX や SSE、さらに、SSE2 , SSE3 , SSE4を経て、AVX という拡張機能が追加されてきました。
拡張された機能を用いれば、SSE2 では 16バイト分、AVX では 32バイト分のデータを一度に読み書きすることができます。

本来、SSE2 機能が追加された経緯としては、画像や音声などのデータ処理を効率的に行うためであり、「データ転送の高速化」が主目的ではありません。画像や音声データを加工処理する際、同じような演算が繰り返されます。ベクトル演算や並列化などと呼ばれますが、同じような足し算、乗算を一度に4回分同時実行するなどで高速化を狙うものです。
とはいえ、一度に16バイト分のデータを扱える能力を備えているのに使わないのはモッタイナイ・・・



小難しい用語ばかりで判り辛いかもしれません。
そこで、「データの転送」を「モノを運ぶ」に置き換えて考えてみましょう。

場所は旅館、数百人が集う宴会が催されるとしましょう。
「調理場から宴会場へお食事を運ぶ作業」の効率を図りたいとしましょう。

作業に不慣れな頃、一度に1人分ずつ運んでいました。
その後、作業に慣れてきたのもあり、一度に4人分ずつ運べるようになりました。
これを
「一度に16人分運べるように作業工程を改善してみよう!」
という感じが近いかも。

理屈の上では「一度に運べる量が今までの4倍」に増えます。
さてさて、「作業速度も4倍」となるのでしょうか!?

かつて、「手分けすれば速く済む?」と題し、「同じ量の作業量を手分けすれば速度が向上するのか」を綴ったことがあります。今回はそれとは異なり、「作業員一人当たりの作業効率を向上」がキモとなります・・・

長くなりましたので続きはまた後日・・・

※ これを下書きしたのは2012年暮れです。
2012年暮れ時点で最新の CPU では AVX 機能まで搭載されていました。
AVX 機能を利用するには OS が正式に対応している必要があります。具体的に挙げれば、Windows 7 (SP1 を適用)、Windows 8 以降です。
筆者はAVX 機能を搭載した CPU、対応しているOSを利用しています。当時、この記事の発端となったブロガーさんは Windows XP を利用中とのことでした。Windows XP において、AVX 機能は非対応。よって、AVX 機能ではなく、SSE2 を中心とした話となります。

さらに、下書き時点での AVX は未成熟な部分が残っており、32バイト分を2回に分けてデータを読み書きしているようです。実質、16バイト分転送と大差ない・・・
スポンサーサイト

本日も最後までご覧いただきありがとうございます。

「つまらなかった」「判り辛った」という方もご遠慮なくコメント欄へどうぞ

テーマ : プログラミング
ジャンル : コンピュータ

[未掲載分] 車輪の再発明 (1)

とある若手の方が眠い目をこすりながら、「今までに無い○○を作りあげました」と意気揚々。



側にいた熟練の方々がニヤニヤと・・・


お知らせ
活動休止にともない、この記事を事前に予約投稿してあります。
トップ記事の固定を目的としています


この題目は2012年暮れ頃に掲載しようと下書きし、諸事情により掲載却下とした分です。
当ブログにたびたびお越しいただいたブロガーさんの中で、プログラミング技術の向上を目指している方々もちらほらと。中でも、学生の方々、学業の合間をみて、向上しようという意欲に心を動かされるものがありました。
それらの方々の奮闘にエールを送りたいとの想いを込めて・・・


「Reinventing the wheel」という慣用句がある。日本語では「車輪の再発明」。

意味につての細かい説明は省きます。興味のある方は辞書をひくなり、ネットで検索してください。
以下に検索用のリンクを貼っておきます。
「車輪の再発明」検索へのリンク

さてさて、一見、無駄と思われるような行為、皮肉を込めて「車輪の再発明」と揶揄する場面で用いられるのが多い。
しかし、ドンキホーテ的に何かに猛進する姿、筆者は肯定する。
新しい技術や文化が創られる時、それまでとは異なる手法から派生してゆくものだ・・・

「車輪の再発明」に陥ってしまう要因としては
(1)「既存の (モノゴトの) 存在を知らない」
(2)「既存の (モノゴトの) 意味を誤解している」
が挙げられている。前者は経験不足や勉強不足、後者は学習過程において何らか誤ちが生じるのだ。
現実には、そのスジで詳しいヒトとコミュニケーションするなり、実戦で腕を磨くなり、原因が判ってしまえば解消の道はある。

まず、スムーズに進める、というよりも、手数を減らすためには、「既存の (モノゴトの)」を利用するのが常。
すでに「ライブラリ」や「ひな型」が存在するのであれば、それに従うのが賢明。
たいていの場合、「ライブラリ」や「ひな型」とは多くの先人たちに磨き上げられている。
逆に言えば、使い勝手の悪いモノや、不要なモノは淘汰、つまり排除、廃止されてゆくものだ・・・

ここから少々、冒頭に述べた「プログラミング技術の向上を目指す方々」に対して記します。
ただ漠然とプログラミングを語ってもキリが無いので、
利用環境を OS はWindows , CPU は Intel 製 (いわゆるウィンテル機)と仮定し、開発に用いる言語を C/C++ に絞り込めば、
ライブラリとして「MFC」(Microsoft Foundation Class) や 「ATL」が挙げられる。
また、それらライブラリの軽量化版として「WTL」(Windows Template Library) も有名。

たしかに、暗中模索することも力を養う糧となる。しかし、多くの場合、欲を満たすモノは、これらライブラリの中に含まれている。
(同じような工程を辿っている限りにおいては、同じような探し物をする傾向が強い。)

まずはライブラリをとことん漁り、最終的に見つからなかった段階に至ってから、「一から構築する」「ゼロから構築する」を決意すれば良いのだ。



さらに、話を狭めます。
PC のアプリ ( ソフトウェア ) の中で、利用している際にモタつきを感じる作品もある。利用者としてはストレスを感じる。

視点を替えて、アプリを作成する側に立ってみる。
同じアプリを実行した際、同じ処理に要する時間が短いほど、利用者からの評価が高まる。

同じ処理に要する時間を短縮することを「効果」として捉え、求められるのは効率を上げること。
例えば、何か製造に携わるならば、作業工程の「改善・改良」により、時間の短縮や同じ時間内でより多く生産できるように変わる。
とはいえ、時間短縮やコスト削減にこぎつけたとしても、生み出されるモノの質、精度が下がってしまうのは論外。



数年前まで、( 細かく言えば Pentium4 が主流の間は )「最適化」という言葉がもてはやされていた。
命令の実行順序を手動でチューニングするなどの手法で、ある程度の効果を得ることができた。

ところが、それまで提唱されていた最適化の手法、Core2 Duo , Core2 Quad の登場を境に効果が薄れてきた。
それまでは、プリフェッチ ( データの先読み、下調べ )や命令の実行順序を人間の手で修正することは速度向上、つまり、時間短縮につながった。

※ PC に詳しくないヒト向けに補足。Pentium4 や Core2 Duo と記しているのは CPU の名称。自動車に例えると、CPU はエンジンに相当する。

おおざっぱな言い方をすれば、
Core2 Duo , Quad やそれ以降に登場したCore i7シリーズなどは機械内部である程度の最適化を代行する。
それまで必要だった、「作業効率を向上させるため細々とした指示」を省くことにつながる。
例えば、Hardware prefetcher が強化されたことで、プリフェッチ用のコードを手動で追加しなくとも、先読みしてくれる。
ほかにも、命令の実行順序も機械内部で適切に並び替えて実行する仕組みを備わっている。少し雑に命令の実行順序を与えたとしても遅延が発生する割合が減る。

もちろん、Core2 Duo やそれ以降に登場した CPU においても「最適化済み」のプログラムを実行できる。しかし、「最適化されていない」と「最適化済み」との差が体感できない事例も増えている。

Pentium4 全盛時代にテッパンとされていた最適化手法が、それ以降に登場した CPU では足かせとなることもある。
むしろ、速度向上のための複雑な手法が速度低下をもたらす事例もある・・・

※ Pentium4 シリーズにおいても、終焉近い頃、機能強化されたモデルが発表された。しかし、同時期にCore2 Duo が登場したことにより役割を終えた。



何もかも最適化、効率化すべきか?
答えはノー。頻繁に使われ、時間がかかる部分に絞って最適化すれば、たいてい流れがスムーズになる。

仮に
・プログラミングの学習や
・趣味でのプログラミング
であれば積極的にチャレンジすべきである。
私的な観点で申せば、「最適化作業に要する時間」、言い換えれば、「効率を上げるための準備期間」と、「最適化によって短縮できる時間」を天秤に掛けて決めるのが賢明。

実戦の場、とくに複数人でひとつのアプリを開発する場合は闇雲に最適化すべきではない。
個人で理解している事項が、集団全体、作業に関わる全員に受け入れられないかもしれない。
また、一般的に最適化することは、独自色が濃くなる。
時代を超えて誰かが引き継ぐことを頭に浮かべてみよう。後任者にとっては読解不能になるかもしれない。もしくは、その時点とは異なる効率的な手法が編み出されている可能性もある。

複数で製作に携わる場合、目指すべきは、着実に動くこと。当ブログでは何度も述べてきたことだが、安全と速度は背反二律。新しいモノを取り入れたために、途中で止まってしまう、完走しない等に陥るのは避けたいものだ。

それでも、最適化による改良を施したいのであれば、上長 ( プロジェクトのリーダー )と相談した上での採否が重要・・・

・・・と今回はこの辺までの予定でしたがもう少々。・・・



2013年2月8日分の記事「プログラミングのA・B・C」で述べたように、プログラミング言語は多数ある。

速度を求めるとJava言語 や Basic言語は期待できない。

速度重視で有望な選択肢は機械語、つまりアセンブラ言語。
ただし、64ビットの Windows 環境ではアセンブラ言語を直接扱えない。
それに加え、よほど精通したヒトでない限り、ちょっとしたバグ、不具合を見つけにくい。
( プログラミング時に多かれ少なかれバグ混入は避けられない )

次の候補となるのは C/C++ 言語である。
アセンブラに比べ、32ビット、64ビット間の移植に関しても少し修正を加えるだけで済む。

長くなりましたので続きはまた後日・・・

本日も最後までご覧いただきありがとうございます。

「つまらなかった」「判り辛った」という方もご遠慮なくコメント欄へどうぞ

テーマ : プログラミング
ジャンル : コンピュータ

[未掲載分] ハクセキレイ???

キジを撮る頃によく見かけた鳥。時期は2月下旬。



大きさは15cm ~ 20cmくらい。
ツグミにしては茶色っぽさがない、セキレイにしては胸の黒い模様がはっきりしない。

こちらの鳥も載せていなかった・・・


お知らせ
活動休止にともない、この記事を事前に予約投稿してあります。
トップ記事の固定を目的としています


図鑑などで調べたところ、セキレイの仲間、ハクセキレイ ( 白鶺鴒 ) が一番近い。



背中が黒っぽい、全体が黄色がかっている、目から後頭部にかけての黒い横線が無いなどは、ほかのセキレイ。



ハクセキレイといっても多くの種があるようで、タイリクハクセキレイの一亜種。
おおまかに、「生息地名、生息域名」+「ハクセキレイ」で分類されているようだ。

これは、単なる( 生息地名が何もつかない )「ハクセキレイ」だろう・・・



断定し難い点として、図鑑に載っているハクセキレイは、喉から胸のあたりにかけての黒い模様がハッキリしている。
それに比べ、胸の模様が薄い。
若い、つまり成長途中ゆえのことなのか、はたまた、冬場は模様が薄くなるのか・・・

※ 以下2点は、2013年4月下旬の画像です。



一般的に、鳥たちは人間の気配に敏感。
人間の足音にかぎらず、衣類の擦れる音が聴こえるだけでも逃げてしまうものだ。
それに比べ、セキレイの仲間は人間に対して警戒していないように想える。



キジを撮ろうと準備していたところ、目の前に降りてきて、何かを探すような素振り。
人間が近くにいても気にならないようで、この後、数分歩き回っていた・・・

※ 以下より、2月下旬の画像。



セキレイの仲間は、主に水辺に住み、昆虫を捕えるとのこと。



おおっ、何やら見つけたようです。



満腹になるまで、ごゆっくり~。

本日も最後までご覧いただきありがとうございます。

「つまらなかった」「判り辛った」という方もご遠慮なくコメント欄へどうぞ

テーマ : 野鳥の写真
ジャンル : 写真

検索サイトからお越しの方へ
検索サイトからお越しの方は、ブラウザのアドレス欄vitalaboloveおよび、fc2.comが含まれているかご確認ください。
含まれていない場合、偽サイトを閲覧なされている可能性があります。

偽サイトは、当ブログの文字部分や画像部分が有害サイトへのバナーと置き換わっているようです。
プロフィール

Author:Vitalabolove
ご訪問ありがとうございます。
店長を任されておりますVitalaboloveです。

コメントはお気軽に。
今のところリンクフリーですが、あと数日でとりやめます。

画像データ、文言の引用は事前連絡くださるようお願い申し上げます。事前連絡の際は、左下、メールフォームを経由をご利用ください。

最新記事
カレンダー
03 | 2014/04 | 05
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 - - -
カテゴリ
ランキング
いつも応援いただきありがとうございました。ただいま休養中につきランキングへ参加していません・・・

フリーエリア
内緒話などはおきてがみをご利用ください。
月別アーカイブ
メールフォーム
掲載された記事について、ご不明な点はここからお問い合わせください

名前:
メール:
件名:
本文:

最新コメント
最新トラックバック
スパムと思われるトラックバックは削除しました
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。