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

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


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



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

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

スポンサーサイト

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

[未掲載分] 「除算が遅い」の補足 (7)

「除算が遅い」の補足 (4)「除算が遅い」の補足 (5)でお手軽に新しく追加された機能を活かすアプリを作る方法を述べた。全てお任せでは物足りないこともある。そこで、前話にて
高速化したい箇所のみ新機能を活かすようなソースコードに書き換えることにより、さらに高速化が狙えるのでは!?!?!?
を触れた。通常アプリを作成すると、新機能が備わっていない PC ( 1990年代中頃の PC ) でも 動く機械語コードが生成される。



生成されたのは fdiv など FPU ( 浮動小数点演算処理装置 ) を介して演算するようなコード。これを、明示的に 新機能を使うように書き換え、さらなる高速化を狙う。



divpd が2命令続いている。divpd 命令ひとつにつき2組の除算を同時に行うことを意味する。
並列、つまり、同時に複数の作業を進めるようなコードが生成される・・・


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


前話の続きとして、整数の除算の話に移りたいところであるが、後に回したい。

先に述べた、
並列実行されるようなコードが生成された・・・ゆえに、高速化されるハズ・・・と安堵できないケースもある。

実生活の場でも、命令を出す側、受ける側の想いが異なることは多々ある。受けた側がどのような手順で遂行するかを気にするよりも、オーダーされた通りの結果が出たかが大事。

前話で、
2組分の除算を行える~~~待ち時間はほぼ一緒。~~~※ 一部のCPUを除く。
という表現を用いた。「一部のCPU」と記しただけでは曖昧なので、実際を挙げます。
かつて、モバイル向けに開発された CPU の中に同時に2組分の処理を行わないモノがリリースされていました。
筆者はかつて、モバイル向け ( ノートPC 向け ) にリリースされていた Pentium M というCPU をデスクトップ PC として使っていました・・・



ひとくちにモバイル向け CPU と書くと紛らわしいので補足。
デスクトップ用の Pentium iii や Pentium 4 を基にノートパソコン向けにチューニングされた CPU もリリースされていました。それらは、Pentium III-M や Mobile Pentium 4 processor や Pentium 4-M と呼ばれていました。これら Pentium III-M や Pentium 4-M がデスクトップ用 CPU を基にノートパソコンで特化させたモノ。

画像で載せたのは、通称 Dothan と呼ばれる Pentium M。こちらはもともと、開発段階からモバイル用途を意識していた、というよりもモバイル専用としてリリースする予定だった。ところが、リリース後、高性能さが受け、やがてこれをデスクトップ用としても使えるように対応マザーボードが出荷されるに至った。
「なぜ、わざわざモバイル向けの CPU をデスクトップ用に???」と不思議に感じるヒトもいることだろう。理由としては、低発熱のモバイル向け CPU は静音化や小型化の面で有利だったから。
同世代の デスクトップ用として流通していた CPU は Pentium 4。



Pentium 4 は消費電力が高いとされ、ひと世代前の Pentium iii と比べ 2 ~ 3倍強。その分、発熱量も増大する。Pentium 4 で消費電力が増大してしまったというよりも、それと引き換えに高速な CPU を投入せざるをえなかった。Pentium 4 が登場した背景を考えると仕方のないことであるが、ひと世代前のPentium iii が全盛の頃、ライバル ( 互換品メーカー ) との間で高クロック競争となり、やがて追い抜かれてしまった。Pentium iii の動作クロックを向上させることも検討されたようだが、限界があり、ある程度の高さから動作不良を起こす。そこで、巻き返しを狙い、燃費が悪くてもライバル製品に対抗できる CPU をとして Pentium 4 がリリースされるに至った。
PC を 自作する者にとって、よりワット数が高い電源ユニットや、発熱対策としてより強力な冷却ファンを用意する必要があった。つまり、静音化や小型化とはかけ離れていった・・・

Pentium 4 が表舞台を賑わせている頃、その裏で Pentium M の開発が行われていました。ひと世代前の Pentium iii に磨きをかけ、Pentium 4 で見過ごされた消費電力を最小に抑えるための工夫も盛り込まれました。それはその後に登場する Core 2 Duo / Quad や Core i7 の礎となってゆきました・・・



Pentium M は Pentium 4 と比べ省電力であるほか、クロックあたりの性能が高く、同じ動作クロックであれば 1.5倍ほど高速といわれていました。しばしば、Pentium M の2GHz、Pentium 4 の2.8 GHz がほぼ互角との記載を見かけます。実際に両者を使っていた上で書くと、Pentium M を搭載したデスクトップ PC の方が静かで迅速と感じたものです・・・

そろそろ、除算のお話に移りましょう。
Pentium M は2組分の演算を同時に行えず、2回に分けて処理していたような感がありました。
「除算を2回行う」と「ひとつの命令で同時に2組の除算」の待ち時間がほぼいっしょ。
※ この記事をアップする際にあたり、手元に残っていた過去に計測した数値も確認しました。

それではかえって遅くなるのでは!?!?!?と誤解が生じるかもしれないので補足。
Pentium M は Pentium 4 と比べ除算の待ち時間が大幅に短縮されています。概ね半分か30%くらい。このことから、本来一度に行う作業を2度に分けて作業しても、既存の CPU と大差無い ( 遅くはならない ) と判断したのでしょう。
たしかに、実行ユニットを多く搭載すれば、同時に複数こなせます。反面、消費電力が増えてしまいます。モバイル専用に省電力な製品として開発を進める以上、実行ユニットを増やさなかったと想像できます・・・
※ Pentium M の後発にあたるCore 2 Duo / Quad や Core i7 では並列に実行されるように改良されています。

新機能を使うようなコードでもそうでないコードで書いても、結果がほぼ同じ。
新機能の命令を受け入れる・理解することはできるが、内部での実行手順が今までと異なる。期待したほど高速化されない環境もあるということだ・・・

ほかにも、似た例として、Core 2 Duo / Quad と 64ビット命令を実行した際の状況が挙げられる。中には32ビット時より落ちてしまうといった記述も見掛けるが、64ビット環境下では本来の実力を発揮できないと表現したほうが近い。
その理由としては、Core 2 Duo / Quad は 32ビット版 CPU としての動作に向けて高度な最適化が加えられていたのに比べ、64ビット版命令対応を急いで加えた感がある。とりあえず動くことが優先されたのだろう。もっとも、Core 2 Duo / Quad が登場したての頃、64ビット版アプリはほとんど無かった。

これを書いていた時点でPC に搭載されている CPU は Core i7 ( Ivy bridge )。Ivy bridge の ひと世代前の CPU ( Sandy bridge ) から Intel AVX 命令が実行できるように拡張された。AVX 命令は256ビット幅の YMM レジスタを扱うことがでる。が、Sandy bridge や Ivy bridge では128ビット分ずつ2回に分けて処理している。これも新機能の命令を受け入れることはできるが実行手順は最適化されていない例。そのため、性能をフルに発揮できない。ちなみに、次世代の Haswell ではこの辺が改良され1回で処理できるとアナウンスされています。

ということで、高速化したい部分を新機能を活かすコードへの書き換えるのはひとつの策です。しかし、将来、ハードウェアレベルで改善されるかもしれません。こまめにハードウェアの先行情報、ロードマップをチェックすることで、その書き換え作業が無駄にならないかの判断材料になることでしょう・・・

C/C++ 言語等を用いたアプリを作るとして、全てのヒトが実行環境の特徴を意識する必要はありません。手の込んだコードや特定の機材や環境に絞ったコードに書き換えてしまうと、汎用性が損われます。
Windows 以外の OS や、違うCPU を搭載したマシンといった異なる環境への移植を考えた場合、足かせとなります。かつての作品のこの部分や考え方を他で活用したくなることは多々あります。その際、機種依存で書いた部分は壁となります。
移植する先にその機能が備わっていない場合、ソフトウェアレベルで補うようなルーティン ( 関数 ) を新たに設けるなど面倒が増えます。
逆に、特定の機材と環境に絞れる状況かつ移植も考えないのであれば、C/C++ 言語等ではなく機械語で書いてしまうのが良いでしょう・・・

そろそろ、整数の除算の話に入りたいところですが、
長くなりましたので今回はこの辺で・・・

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

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

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

コメントの投稿

非公開コメント

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

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

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

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

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

最新記事
カレンダー
04 | 2017/05 | 06
- 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 31 - - -
カテゴリ
ランキング
いつも応援いただきありがとうございました。ただいま休養中につきランキングへ参加していません・・・

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

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

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