SyncMaster 2333SWを買ってみた

まえおき

PDFなどの資料を参照しながら作業(プログラミングや文章作成)するのに、17inchディスプレイでは手狭になってきたので、大き目のディスプレイを追加することに。
作業用と割り切って、安さを優先で、解像度が高いものを選びました。
レビューがあまり見当たらなかったので、一ヶ月ほど使ってみた感想をココにまとめておきたいと思います。

スペック概略

23inch・1920x1080 (FullHD)・DVI(HDCP対応)、RGBの2系統
詳しくは、公式サイトで。

総評

○良かったこと
安い・広い
×悪かったこと
特になし

外観

筐体全体プラスチックで、支柱までプラスチックオンリーなので強度が低く、力が加わると簡単にグラグラします。製造コストを切り詰めてる感がヒシヒシと・・・。ただ、表面が光沢処理されており一見すると安っぽく見えないです。

ワイングラスをモチーフに、曲面を用いたデザインは、可もなく不可もなく。フラットなデザインのものに比べて場所をとるかなと思っていたのですが、意外とスリムでした。電源を入れると、画面下部が青く光ります。これに関しては眩しすぎず、ふんわりとした明るさで綺麗だと思いました。

縦方向解像度がSXGAと近いことに加え、ドットピッチが17inch(SXGA)とほぼ同じなので2つ並べたときに違和感なく使えました。

調整項目など

輝度

デフォルトの100では案の定まぶし過ぎましたが、0まで落とすと十分すぎるほど暗くなります。自分の場合、40まで落とせば、長時間の使用でも疲れない程度になりました。

色ムラ

正面から見る分には、画面上下左右で、ほとんど色ムラを感じませんでした。作業に使う分にはまったく問題なしだと思います。
とはいえ、TN液晶なので、見る位置が正面からハズレてくると、結構色が変わります。下から見上げた場合、ほとんどまともに見えません。

調整項目

色温度・色調に加えガンマ値の設定など、一通りの画質調整項目が用意されています(写真参照)。デフォルトの設定では今まで使っていたディスプレイと色合いが異なっていたのですが、細かくいじれるため容易に色を合わせることが出来ました。

MagicBrightやMagicColorなどの項目に、コントラスト・彩度を、見かけ上、大幅に引き上げる機能がありますが、使ってみると極端に色の再現性がおかしくなる*1ので、これに関しては個人的には使えないなと思いました。

使用感

ここ一ヶ月作業に使ってみて全然アリかなと。画面が大きくなって良かったこととしては、撮った写真を細部まで見渡せるので、見直してて思わぬ発見があったりと、見るのがちょっと楽しくなりました。あと、HD画質の動画を全画面で見たときには、ちょっとした満足感があります。

応答速度

ゲーム用途でも別に使えないことはないと思います。格闘ゲーム・シューティングで遊んでみて、ちょっとばかり残像が気になるかなぁって程度でした。

補足

応答速度や色域などに関して、定量的に測定されたデータが
http://www.hardware.info/en-US/productdb/bGdkbZiVmJbKaMg/viewproduct/Samsung_SyncMaster_2333SW/
のSpec欄にまとめてありました。結構細かくデータがとられています。

*1:Skypeのアイコンが蛍光色に見えたり・・・。

ForceKnQ 0.3.1d

0.3.1cからの変更点

  • 起動時に、プロセスAffinityMaskを全コア有効に設定するように
  • MSR読み書き時、スレッドAffinityMaskを、WinRing0の機能を使わずに自前(kernel32経由)で設定するように
ForceKnQ 0.3.1d
http://hp.vector.co.jp/authors/VA049259/ForceKnQ_debug.zip

エラーに関して

『Core*: AffinityMaskの設定に失敗』って出た場合、エラーの出たコアは周波数・電圧は変動していないと思われます。エラーが出なかったコアに関しては、変動しているはず。
まぁエラー出ちゃう時点でアレゲなんですが。エラーが表示された場合、メニューからExitを選択して終了して下さい。

独り言

あとは、WindowsXP入れてVC#2008で作ってみる→Phenomを買ってくる、ぐらいしか出来ること無いかなぁ。。。てか、手元のWindows2000+.NET 2.0では、WinRing0の関数、kernel32の関数、.NET標準クラスの何れの方法でもAffinityMaskの切り替えが出来てるのは確認できたのに、他の環境では正常に動かないのはナゼなんだぜ?
現状解決の糸口が見えず・・・orz 自分以外で正常に動いてる人いないのかなぁ。。。

配列は参照渡し

メソッドの引数の扱いは、

参照渡し
クラス
値渡し
構造体と組み込みの数値*1

で覚えてて、いや、まぁこれはたぶんあってるんだけど、それはさておき。組み込みの数値が値渡しなので、数値の配列も値渡しだろうって思ってコード書いてたらドツボにはまった。というわけで、自戒の念をこめてメモ。
念のためMSDNを引いたら

配列型は、抽象基本型 Array から派生した参照型です。この型は IEnumerable と IEnumerable<(Of <(T>)>) を実装するので、C# のすべての配列で foreach 反復処理を使用できます。

http://msdn.microsoft.com/ja-jp/library/9b9dty7d.aspx

って、わざわざ『参照型』ですって強調して書いてあった・・・orz

参照型であることと、参照渡しされることの間には関係はないようです。
詳しくはコメント欄のbleis-tift様のコメントにて。
bleis-tift様、ご指摘ありがとうございます。

*1:てか、これも構造体だけど

[work] 簡易ベンチマークを作ってみた

気晴らしに、研究で使ってる計算ルーチンを使って、ベンチマークっぽいものを仕上げてみた。内部で計算してるのは、フレネル・キルヒホッフ積分っていう計算なんですが、まぁ細かいことは補足で。プログラムに関しては、添付のReadmeで。
コア数の分だけリニアに速くなるので、1threadでの計算時間と、最適なthread数のときの計算時間を比べてニヤニヤできたらいいねー、みたいな。

おおまかな概要

内部で何かを計算して、その実行時間を表示します。

特徴

  • CPUコアの性能のみでほとんど結果が決まる (同じコア・同一周波数の場合、PentiumCeleronで同じ結果に)
  • CPUコア数にリニアに反応 (ex. 2コアなら、ほぼ半分の時間で終了)
  • HTが結構利く (ex. Core i7やPentium4HTで1コアあたり、だいたい1.4コア分の働き)
  • 計測時間の精度があんまり高くないのでアバウトな人向け
  • この計算が速く出来たからって特に意味はなし

補足ていうか余談

にまとめています。

[C#] プロセス・スレッドを実行させるCPUコアを制限する

まえおき

C#で書いたプログラム中で、コードの一部を実行させるCPUコアを制限させたい場面に遭遇したので、方法を調べてみた。以前に同内容を調べた際、C/C++ではSetThreadAffinityMask(),SetProcessAffinityMask()を呼び出せば可能*1ってのは分かったので、今回はそれ以外の方法も探してみた。

現在実行中のスレッドにAffinityMaskをかける

現在実行中のハードスレッドを調べる方法が見つからなかった*2ので、P/Invokeを利用してC/C++と同様の方法を採用。Win32 APIの宣言部分は、PINVOKE.NETに載ってのをそのまま流用しました。

SetThreadAffinityMask
http://www.pinvoke.net/default.aspx/kernel32/SetThreadAffinityMask.html
GetCurrentThread
http://www.pinvoke.net/default.aspx/kernel32/GetCurrentThread.html

話は脱線するけど、このサイト、Win32 APIの宣言部分を大量に網羅してる上、直で宣言部分を呼び出せるVS用のアドインも配布してるのでめちゃくちゃ便利かも。

で、実際のコードは、

[DllImport("kernel32.dll")]
static extern UIntPtr SetThreadAffinityMask(IntPtr hThread, UIntPtr dwThreadAffinityMask);

[DllImport("kernel32.dll")]
static extern IntPtr GetCurrentThread();

を適当な場所に書いて、

SetThreadAffinityMask(GetCurrentThread(),(UIntPtr)1);

ってやればOKでした。お手軽。

現在実行中のプロセスにAffinityMaskをかける

System.Diagnostics.Processクラスに、プロセスを扱う手段が用意されていたのでそれを利用しました。

System.Diagnostics.Process process = System.Diagnostics.Process.GetCurrentProcess();
process.ProcessorAffinity = (IntPtr)1;

とか書いてやればOK。やっぱり標準で用意された方法で済ませられるってのは便利だなぁとか思った。

*1:http://d.hatena.ne.jp/kaminarioyaji/20081206/1228551389

*2:ProcessThread.ProcessorAffinityを使えばスレッドにAffinityMaskをかけれるので、現在実行中のスレッドを取得する方法も探せばあるような・・・。

ForceKnQ 0.3.1b

WinRing0の新Ver.(1.3.0?)のテスト版がリリースされたので、それに合わせて一部コードの書き換え。動作テスト&デバッグ用Ver.って位置づけなので、動作(エラー)報告頂けると幸いです。

ForceKnQ 0.3.1b
公開終了

エラー表示に関して

想定しているのは、以下の3タイプになります。(*はコアの番号)

  1. 何も表示されない
  2. 『Core*: WrmsrTxの実行に失敗しました』とだけ表示される
  3. 『Core*: WrmsrTxの実行に失敗しました』の後
    『Core*: WrmsrPxの実行に失敗しました』って表示される

1,2の場合、AMD PowerMoniterなどで各コアの周波数・電圧が指定通り変動しているかについても確認頂けると幸いです。

超人ウタダ 第5話

主役の塚地さん(ドランクドラゴン)と、サブの片桐さん(ラーメンズ)がいい演技してるなぁと思ってたけど…。

初見は予想外に面白く、すっげー話の続きが気になる!って感じだったので、原作(全6巻)を読んでみました。
上司の命令に従って組織に都合のいいように仕事をしていた警察官(主人公)が、ある日、黒服のわけわかんないやつに『お前は人を殺しても裁かれない"超人"なんだ』って宣言されて、周りを巻き込みながら変わっていく…、っていうエキセントリックな物語設定が面白いなぁとか。いや、ま、そんなことはどうでも良くて、原作は、ドラマより一層濃い内容でけっこう楽しめました(後半、話が一気に広がり過ぎてちょっと微妙な気もするけど…*1)。

で、原作読んで今回の5話を見たのですが、原作読んだ後だとドラマが色褪せて見えたり…。原作の持つ、善悪の両面性や、人が抱えている黒い部分(狂気)とか、カオスでグロテスクな部分が、ドラマでは(原作に比べれば)単純すぎる善悪、常識的な(マイルドな)範囲の残虐性におさまってしまってるのが目について萎えた…。まぁR18指定されてるわけでもない、ふつうのTV番組だから、仕方ないと言えば仕方ないのですが…。うーん。。。
加えて、脳内で、原作のキャラと片桐さんを比べてしまって、シリアスな場面すらなんだかシュールなギャグに見えてしまったり…orz

*1:打ち切りになって、一気に畳んだのかなぁ