Visual C++ 2022 でも regex の multiline はサポートしない

時が流れるのも早いもので、ADPの開発に使用しているコンパイラをVisual Studio 2012 に変えてから10年が経とうとしています。
途中、一度Visual Studio 2017 C++を試したのですが、regex がboostのモノと挙動が違うらしく($を行末とするにはmultilineサポートが必要とのこと)、この時はVisual Studio 2012に戻した。

最近、OSをWindows 11に変えて、『いい加減コンパイラも変えるか』ということで、Visual Studio 2022 の C++に変えました。
ちなみにVisual Studio 2012 は Professional を購入しましたが、Visual Studio 2022 は Community版 をインストールしました。
まぁ仕事で使うようになったら Professional を購入します。
Visual Studio は 2003、2008、2012と一つ飛ばしで買っていましたが(2012は不本意ながら、2008がWindows8で動かなかったから買った記憶があります)、その後、Visual Studioを使うのも ADP と SQL Server 2012 の開発用となったので、特にバージョンアップをしないで、だらだらとしていたら気が付けば、2013、2015、2017、2019、と結構なスキップとなりました。

気が付けば、Gitに対応していたり、なかなかの変わりっぷりですが、C++の開発関係はあまり変わらずでよかったです。
もっとも、C++言語の方が、C++11、C++14、C++17、C++20 と今迄の停滞はなんだったんだというぐらいに変わっているので如何したものかと思う。
一部、最適化に関わる部分(右辺値参照とか)があるので無視するわけにはいかず、コード自体は今後、変えていこうかと思います。
ちなみに長く止まっていた、C言語の方もC11やらC17やらに対応しているらしく(単にプロジェクトのプロパティを見ただけ)、C言語に徐々に書き換えるのもありかと思う今日この頃です(現実的ではないですが)。

新しい規格への対応で、1点、期待していたものが regex がありました。ADPは boostライブラリの regex を使っていたのですが、そのregex がC++11から規格に入り C++17 ではmultilineをサポートしたものになっていました。あくまでも個人的な趣味もありますが、私的には $ を行末としたいのですが、それまでのC++ の 標準regexは$はあくまでも文字列の最後という扱いでした。multilineで$が行末とみなしてくれるようになります。
ということで、さっそく試してみたのですが、VC 2022 ではどうも、multilineに対応していないようでした。
「なんでやねん」ということで、色々検索してみましたが、以下、Microsoft のDeveloper Communityの投稿を見つけました。

multiline [C++]

同じようなことを感じた人が投稿したらしいのですが、Visual C++の開発者と思われる方のコメントで、要約すると『規格制定で色々あったのですが、現在のところABIの破壊がないようにするために、このような実装となっています。回避策として引き続きBoostのRegexを使ってください、その方が挙動が一貫しているだけでなくパフォーマンスも良いです(意訳)』とのことです。

BoostのセットアップがVisual C++の環境では面倒なのですが、Boostも一緒にバージョンアップし(1.45 → 1.80)Visual C++ 2022の環境に移行しました。ちなみにコンパイラを変えただけではパフォーマンスが変わることは特になかったです(AVX等の命令を使うように変えればまた違うかもしれませんが・・・)。
2022-09-19 | コメント:0件



Intel Turbo Boost Max Technology 3.0 と ハイパバイザー

Intel Turbo Boost Max Technology 3.0(ITBM)とは、Broadwell-E以降のハイエンドCPUに搭載された機能で、要するに「さらにブーストする(クロック周波数が上がる)」機能になっている。
Core i7-6950X(Broadwell-E)の場合、従来のブースト(Intel Turbo Boost Technology 2.0)では、3.5GHzまでの最大周波数となるが、3.0になると、1コアのみであるが4.0GHzまでブーストする。下記タスクマネージャの画面では3.88GHzまで周波数が上がっている。



比較で、下記はIntel Turbo Boost Technology 2.0までが有効のちょうど1世代前のCore i7-5960X(Haswell-E)のタスクマネージャの画面。3.47GHzまで周波数が上がっている。



以前、Core i7-6950Xを入手しましたが、Windows11のセットアップを行い、Intel Turbo Boost Max Technology 3.0(ITBM)のドライバーを入れたが、気が付いたらログイン時に起動時にエラーが出るようになった。

「ITBM Driver Not Available
 Exiting application」

これは、Intel Turbo Boost Max Technology 3.0のコンソール画面の起動時にでていて、結局コンソール画面は出てこなくなった。
クロック周波数を見てみると、下記のように5960Xレベル(Intel Turbo Boost Technology 2.0)まで周波数が落ちていることが解る。



エラーメッセージで調査をしたのですがエラーメッセージの検索では不具合原因にはたどりつかなかった。長らくそのまま放置していたが、最近分かったのが、どうもハイパバイザーをONにしているとダメらしいことが解った。さらに調査をしていくと、

インテルのサポートページ(ページを見るには登録が必要)を見るとTurbo Boost Max Technology 3.0はサポートしているが、Intel® Turbo Boost Max driver solutionはサポートしていないという一見、良くわからん回答があった。

どうやら、driverは動かないということなので、「ITBM Driver Not Available」との整合性がとれる。

結局、Turbo Boost Max Technology 3.0は動作しないのか?という話になるが、Turbo Boost Max Technology 3.0は以下の2つの機能がある。

(1)全コアに負荷がかかってもブーストクロックまでブーストする
(2)1コアだけ、より高クロックにブーストする。

で、どうやらハイパバイザー環境では(1)は有効となるが、(2)が無効になるらしい

ということで、試しにCinebenchで全コアに負荷をかけてみたが、確かに約3.5GHzまで動作した。ちなみにCore i7-5960Xの場合、全コアに負荷をかけると3.3GHzまで周波数が落ちた。

6950Xと5960Xを比べると、ハイパバイザーを使うならコア数が多くさらに最大メモリ搭載量が倍の6950Xが良いが、Turbo Boost Max Technology 3.0の機能に制限が加わるのは痛い。悩ましいところである。

追記:
Vtuneを使おうとするとハイパバイザーを止めなければならず、結局、6950Xのマシンと5960Xのマシンのメモリを入れ替えて5960Xの方をハイパバイザーを使うように変えた。
2022-09-18 | コメント:0件



英語学習と自分自身のデバッグ

コロナ禍ですっかり生活が変わってしまいまして、最近ミラーレス一眼レフカメラを買おうかレンタルしようかと思っています。
写真に凝りだして、SNSも出入りしたりしていますが、最近某SNSで、『ソフトウェア開発の会話を英会話教師に求めるのは無理』とか『TOEICは役に立たない』という趣旨の書き込みを目にしました。

この書き込みがどれぐらい説得力があるのかは不明ですが、私自身も過去に同じようなことを言いたくなる気持ちになったこともないわけではないので、書きたい気持ちはわからない訳ではない。

この発言が自分の劣等感をごまかす為にやっているのなら、これ以上は英語力が伸びないので、捨て台詞的に書き捨てたあとは英語学習から離れた方が精神衛生上は好ましいかもしれない。

『何故英語が伸びないのか?』と自問自答した時に『自分の能力不足』というのを認めたくなくついつい『そこまでする必要はない』と自己防衛的に思うようになる。
または、一向に上達しない状況に対して、本能的に『無駄な努力』と思うようになる訳です。

これにより最初の発言『英会話講師にソフトウェア開発の話は無理』とか『TOEICは役に立たない』という発言に陥ってしまう。

英語学習に限った話ではないが何かのスキルを取得しようとすると、自分自身の出来なさと向き合う必要があり、ものすごい劣等感に苛まれるという話である。これが年単位(5年とか10年とか)で続くことになれば、その苦痛は相当なものである。
何年にもわたって自分の頭をデバッグするようなもので、脳がそれを拒否するような感じになる。

巷ではあまり触れられてないが、これが英語力が伸びない一つの理由になります。つまり年単位の勉強のストレスに耐えられない人が多いということになります。

ちなみに当たり前の話になりますが、英語学習において自身が興味を持っている話題(例えばソフトウェア開発)があることは重要であるが、先生にそれを求めるのは違う話になる。自分でYoutubeを見れば幾らでも動画が転がっているのでそれを見て表現方法を勉強すればよい。または相手にも分かる話題(スマホの話とか)を選択すればよい。

TOEICは、色々問題点を指摘されたりもするが、自身の英語力を測るうえでは意外に使えるテストになる。ほぼ毎月やっており、金額も安く、スコア表示で出るのでわかりやすさがある。
一方で、得点を上げるためには難易度の高い問題を解かなければならず、ただ漫然とやっているだけでは得点が上がらなかったりする。
例えば、600点を超えようと思うと600点用に作られた問題を解かなければならない。
TOEICの問題はリスニング、リーディングそれぞれ100問あるが、初級者用の問題から上級者用の問題がちりばめられている。
つまり、点数を上げようと思ったらレベルを上げる必要があり、何年も点数が上がらず嫌気がでることもある。(記録が残っていないのでうる覚えですが、私は500点台を2年程彷徨った経験をした)。
ちなみに、勉強時間でいうと、レベルを上げようと思ったら1日3時間以上勉強する必要があった。1時間はレベルを維持する最低限の勉強時間だった。

もっともTOEICが完璧かというとそうでもない。
過去の私の点数の推移をみると、アメリカ留学前の最高スコアが855で、留学後に受けたスコアが865と10点しか上がっていない。当たり前ですが留学後の方が明らかにレベルが上がっているのでTOEICで測定できないスキルがあることも事実である。そういう意味では確かに500点台でもコミュニケーションが取れる人もいればダメな人もいる。
また、スピーキングに関しては、私の場合は、仕事の特殊性もあり、ネイティブだけでなく、ノンネイティブ相手に如何に通じるかを実践している関係で平易な文法や単語のチョイスになるのでそいうい意味ではレベルが上がりにくい面があり、試験をやればそこまで高得点とならない。

ということで、テスト得点の絶対値に左右され過ぎるのもよくないので自分がどれだけ英語力を必要としているか目標をはっきりとさせることも大事だったりする。
要するに実践が出来ていればテストの点はあまり関係ないということになる。もっとも『実践が出来ないからテストをやっている』ということもあるかと思いますが、留学する時間が無い場合は、今はYoutubeで興味のあるビデオを見るのも実践の一つかと思う。ネイティブ相手なら英会話もよいかと思う。

と長い話になりましたが、まとめますと

・英語学習は時間がかかる。私の場合TOEIC400→850で10年以上、約5000時間はかかっている。
・週1の英会話学習の場合、予習、復習をしなければ効果はない。
・毎日勉強しなければならない、一日最低3時間。
・勉強をさぼるとレベルも下がる。
・毎日勉強しても少しずつしかレベルは上がらない。
・全く聞き取れず、意味が解らない英語を数年聞き続けなければならない。
・どこまで勉強するか割り切りも必要となる。
・私の場合、今の状態になれば、勉強を止めてもレベルが下がらなくなった。

ということになります。
よく中学、高校で6年間英語をやっても上達しない(喋れない)といいますが、せいぜい年間250時間で6年間でも1500時間では出来なくて当たりまえ(出来る人は才能があるだけ)です。

2022-04-30 | コメント:0件



5950Xの次は、5960Xか6950Xか?

正月もすっかり明けてしまい、確定申告の時期を迎えてバタバタしています。
何気に、サーバーを昨年の年末にWindows 2019に移行し2012は実稼働2年と短命で終わりました。
使っている機能は大きく変わることもなく新機能についてもあまり興味がないので、移行自体もレポートを書くほどではなかったので記事にするのを忘れてしまいました。
ちなみにWindows 11ですが、出だしでRYZENに不具合が出ていて様子見していましてどうしようか悩んでいる今日この頃です。

コロナが長期化していますが、最近PCパーツの断捨離をはじめました、ここで紹介しましたネットブックも出品しています。
で、すっかり綺麗になりつつあり、奥さんも喜んでいるところで終わらせればよいのですが、なんとCPUを”落札”してしまいました。

Haswell-EのCPU、Core i7-5960X

になります。
なぜこのCPUを落札したかですが、昨年あたりにV-Tune(インテル プロファイラ)を無料で使えるようになっていること知り、さっそく試してみたのですが、
Core i7-980XではCPUが古すぎて対応していなく、ノートPC(Haswell)だと動作したので、思わず手を出した次第です。
Core i7-5960Xですが、発売当時は10万円程度だったので、それが数千円程度で手に入るのは時代の流れを感じさせます。

マザーボードについては価格差があるのでトータルでは1万円程高くなるようですが、Core i7 980Xもオークションで8000円程度で売れるので、CPUについては、ほぼ価格差なしで980Xから5960Xに交換できます。

1円からのジャンクということで『ダメもとで』ということで1300円で落札しました。
『CPUの次はマザーボード』ということでX99のマザーボードを落札し、『i7-5960xが動かなかったら』ということで予備のCPU(5930K)を落札し・・・
等々、結局、
マザーボード:3枚
CPU:7個
CPUクーラー:2個
を約5万円で落札しました。で、テストを行い、結局動くのが

マザーボード:2枚
CPU:3個(Core i7-5960X 2個、Core i7-5930K)
CPUクーラー:2個

で、Core i7-5960Xが動く環境、2セット+αを5万円で仕入れたことになります。
高いのか安いのか微妙ですが、外れのCPUとマザーボードはジャンクとして出品しますのでいくらか(多分、CPUは100円、マザーボードは1000円ぐらいか?)回収できそうです(追記:なんやかんやでCPUが1500円、マザーボードは5000円で売れた。稼働品のCore i7-5960Xを5000円で売ったので11000円程回収した)。

Core i7-5960Xですが発売が2014年で8コアのCPUになります。ベースクロックは3GHzでターボブーストで3.5GHzまで回ります。
タスクマネージャでも時折、3.5GHzとレポートしており、このあたりのCPUはターボブーストがきちんと動くようです。
Core i7-980Xは、一応ターボブーストが搭載されているが、上り幅が低いこともあり、ターボブーストを意識していなかった。
もっともRYZEN9 5950xもターボブーストが効いていおり、ベース3.4GHzですが、ちょっと負荷をかけると4GHzまで行きます(コア数によるが)。

CPUウォッチャーの私としては発表当時のニュースやベンチマークも記憶に残っており、プラットホームがSocket 2011-V3で『そろそろ買おうか』と考えていたCPUになります。
その後、様子見をしている間にRYZENの噂を聞きつけてそちらに移ったのですが、そのCPUを手に入れることになるとは感慨深くなります。

Socket 2011-V3ですが、Haswell-EとBroadwell-Eに対応しており、コンシューマー向けCPUでは初の10コアCPUである、Core i7-6950Xが動作します。
こちらはオークションで落札してもよかったのですが、あまり値段が変わらなかったので中古でPCショップで買いました。税込み3万円程になりますが、発売当時が20万円したことを考えるとこちらも時代の流れを感じさせるものがあります。

というわけで5950Xの次は、5960Xと6950Xになり型番はあがりましたが時代に逆行しています。

ちょうどいいタイミングでこんな記事を読みました。6950xを購入してテンションが上がっているところで若干興ざめしてしまいました・・・。

古きプロセッサを温ねて新しきプロセッサを知る
2022-02-23 | コメント:0件
Previous Page | Next Page