このサイトは FC2 さんですが、使用できるファイルの拡張子に制限があります(無料で 1MB までやってくれますから…)。
ですから、使用 OK の txt ファイルを使ってソースリストを表現しますので、ご了承ください。
一部アセンブラを使っています。x64 環境ではインラインアセンブラが利用できませんから、アセンブラ用の構成を加えて、3つのプロジェクトにしています。
L1 キャッシュをソートデータとは関係のないデータで埋め尽くすために使っています。速度を計測するときに、環境条件を固定するためです。アセンブラの選択は、もちろん 32 ビット用 MASM です。
全く同じもの意味で、64 ビット用です。アセンブラの選択は、64 ビット用 MASM です。
もし、64 ビット用のアセンブラが選択肢に表示されないというときは、
メインのプロジェクトで、VC++ です。「空のプロジェクト」の状態から作成したものです。筆者は速度が遅い MFC は全く使いません。もし、MFC ファンの方で、このプログラムをお使いになられる方は適当にご自分で移植してください。
ちなみにアイコンファイル
BlackCat.ico
画面項目の変数名は、次のとおりです。
ダイアログそのもの IDD_DIALOG アイコン IDI_ICON データの種類のコンボボックス IDC_DATATYPE ドロップダウンリスト、Sort = False ソートの種類のコンボボックス IDC_SORTTYPE ドロップダウンリスト、Sort = False レコード数のエディットボックス IDC_RECCOUNT Number = True 繰り返しのエディットボックス IDC_REPEATCOUNT Number = True 実行時間表示のエディットボックス IDC_EXECTIME Read Only = True コピーして貼り付けられるようにエディットボックスを使用 実行ボタン IDC_EXEC 中断ボタン IDC_ABORT 閉じる IDC_EXIT
「♪ドレミファソート」の場合のソースリストです。クイックソートを含めて4種類のソートを収録してあります。
DoReMiFaSortCpp.txt DoReMiFaSortH.txt DwordArrayCpp.txt DwordArrayH.txt resource..txt Sample.txt stdafx.txt
DoReMiFaSort の cpp と h が、ソートの部分そのものになります。
DwordArray の cpp と h は、ソートするテストデータを準備します。このうち、Random32 と Random32R ですが、これは VC や VC++ の rand_s 関数で1億3千万個くらいの4バイトデータをファイル名 RandData.bin で用意しておきます。これを、COMMON_APPDATA の場所に格納しておきます。Windows Vista 以降でしたら、ProgramData の直下になりますし、Windows XP であれば、AllUsers の AppData の直下になります。
Sample.cpp がメインのファイルになります。もし、ソートの種類を変えるときは、
という順序で設定します。
繰り返し回数の意味ですが、例えば3回と指定すると、ソートを3回実行し、その3回のなかで実行時間が一番短かったときの値を表示するという意味です。これは、何回か計測しないと、測定値がばらつくので、このようにしています。もちろん、毎回ソートするデータの配列は、きちんと初期設定されます。
バブルソートなのに、間違って5千万件のソートをさせちゃったから中断したい、みたいな中断させる事情ができたときは、中断ボタンを押してください。
この説明画面から抜けるときは、ブラウザの「戻る」のボタンを押してください。