(追加:kilifさんの記事を参考にC++でAVX2スクリプト書いてみた)
■ Haswellの立ち位置(あくまでも素人の視点、誤解もあるかもしれない)
Intelは、CPUのデザイン変更と生産工程の微細化(=トランジスタの増加)を交互にやっていて、今回はデザイン(マイクロアーキテクチャ)が変更になる回り。と言っても、大幅な改定じゃなくて部分的なチューニングという感じで、要するにこれからPC市場がどんどんスマホ・タブレットに書き換えられていくため、省電力に向けて最適化しようということなのかな。SandyBridgeからIvyBridgeへの移行ではプロセスルールが32ナノメートルから22ナノメートルになってるけど、微細化された分をそのままトランジスタの増加にあててる訳じゃなくて、ダイ・サイズそのものが小さくなった。だから性能面でもそんなに大きな飛躍じゃなかったのかな。そしてHaswellではIvyBridgeよりダイ・サイズが少し大きくなっていて、プロセスルールが微細化されたことの恩恵をこうむっているように見える(トランジスタ数は14億個でIvyBridgeから変わっていないという情報もある)。
実はIvyBridgeから一番進化したのはGPUなんだけど(Iris Pro 5000系)、それは4770KのようなデスクトップモデルじゃなくてSoCやモバイル版に入ることになってる。因みに、SoCはIntel NUCと同じBGAというパッケージで始めからマザーに貼り付けてあって、自分では交換できない。一方、パフォーマンス用途には所詮内蔵グラフィックなんて使わないから、HD Graphicsで十分でしょというスタンス。それはそれで潔く、分かりやすい進化だ。
HaswellではAVX2(Advanced Vector Extensions 2.0)という新しい命令セットが導入されていて、これらバックエンド(命令実行)側のポート拡張にともなって、これを効率良く動かすために内部バッファを大きくしたり、フロントエンド(命令読み込み)でもL1/L2キャッシュの帯域を倍に拡張したり、いろいろなチューニングが施されていると考えると理解しやすいと思う。
Intel AVX2をまとめると、(1)整数演算の拡張(ALUが3ユニットから4ユニットへ増加、128ビット幅から256ビット幅命令への拡張)、(2)3オペランド積和算命令の拡張(Fused Multiply-Add即ち FMA3ユニットを2つ追加するとともに浮動小数点に拡張)、(3)BMI(Bit Manipulation Instructions)命令の追加を含んでいて、要するに並列度が上がった。それに合わせて、大規模なマルチスレッドタスクでメモリ管理をハードウェアサポートするトランザクションメモリというのも売りの一つらしいけど、これが関係するのは今年後半に出る8コアのHaswell-Eシリーズ以降かな。
それで、「結局AVX2で何を動かすんだ」ということになるんだけど、Intelの公式データシートによれば、「Intel AVX2は、Intel AVXの命令セットから256ビット整数演算、浮動小数点積和演算(FMA)、ギャザー命令(gather operations)を拡張したものになる。256ビット整数ベクトルは計算、コーデック、映像、デジタル信号プロセシングソフトが恩恵を受ける。FMAは顔認証、プロフェッショナル・イメージング、高性能コンピューティング(HPC)のパフォーマンスを改善する。ベクトルギャザー命令は多くのアプリでベクトル化を補助する。ベクトル拡張のほかに、新しく加えられたビット操作命令(Bit Manipulation Instructions)も、圧縮、暗号化、汎用ソフトの役に立つ。」ということらしい。つまり、これらのアプリケーション分野がIntelがHaswellで目指そうとしている世界だ。また、コンパイラでは既にGCC 4.7からHaswell対応になってて、科学計算方面でも今回のチューニングは威力を発揮することが期待できる。。
■ これまでの代表的なベンチマーク
もう散々ベンチマークやられてて、ほんとこれ以上何をベンチしたらいいのっていうくらい。同じことしても二番煎じで面白くないし。
・PC Watch(三門 修太)
・マイナビ(大原雄介)
・ITMedia(石川ひさよし)
・Gamer.net(宮﨑真一)
・Anandtech (Anand Lal Shimpi)
・TechPowerUp (FireKillerGR)
・Tom's Hardware (Chris Angelini)
■ 今回の課題も難しい
マイクロアーキテクチャの変更でどれくらい性能が良くなったかをレポートするという今回の宿題は、これまでのレビューを見ていると一筋縄では行かないようだ。原因の一端は、まだHaswellが出たばかりで、アプリケーションが対応していないということが確実にある。例えば、HaswellのAVX2やFMA3が威力を発揮するビデオエンコーディングでは、リリースの時期を見る限りMediaEspresso 6.7やMediaConverter 8はまだ対応していない。QSVではもうちょっとという印象だったPegasysのTVMW5が6月27日のアップデートで正式にAVX2対応を謳っているのが目を引くくらいだ。このアップデートの前に行われているTVMW5のベンチマークの結果はTVMW5の実力を反映してないから、信用してはいけない。Haswellのマイクロアーキテクチャが、今後どんなCPUを目指して開発されているのかを知るためには、きちんとHaswellに対応したアプリケーションでベンチマークする必要があると思う。
■ ハードウェア構成
今回のレビューに送って頂いたのは、Core i7-4770K。定格で最大3.9GHz、4コア8スレッドという点は、SandyBridge (2700K) やIvyBridge (3770K)と同じ。
マザーボードの方は、初期のレビューからよく使われているAsRockのZ87E-ITX。mSATAソケットを備えるので、 Intel SSD 525がそのまま使える。Z87チップセットを選んだ理由があって、Dynamic Storage Acceleratorが使えるから(下記ベンチマーク)。
メモリは、2000MHzの2GB Corsair CMT4GX3M2A2000C8を2枚。 このITXマザー、3000MHzまでサポートするらしいので、安くなったら入れてみたい。
Windows 7 32ビットを入れて、Windows Experience Indexはこんな感じ。64ビットじゃないところで、少しベンチの足を引っ張ってるところがあるかも知れない。
■ CPUベンチマーク
HaswellはIvyBridgeとソケットが変わったため、違うプラットフォームで比較してもチップセット回りの影響がベンチマークにどう出るか分からないなあということで、Haswellの中でAVX2があるのとないのとでどれだけ差が出るかという観点からいろいろベンチ比較してみた(もちろんプラットフォームを含めた総合性能ということで比べても良いんだけど、それはもうやり尽くされてるから)。
1.SiSoftware Sandra Lite 2013 SP4 19.50
プロセッサ性能で、AVX2とFMA3の設定を有効・無効に切り替えてテストした。
結果を見ると、一番上がMulti-MediaのNativeスコアで、AVX2のスイッチを入れるとIntegerが1.6〜1.7倍に跳ね上がることが分かる。FMA3を入れるとFloatとDoubleに効いて、スコアが約1.25〜1.28倍に伸びる。これは、HaswellのAVX2が整数演算SIMDの拡張であること、Fused Multiply-Addで浮動小数点演算がサポートされたことを反映していて、Haswellの進化を一番忠実に見ることができる。中段の仮想マシン(.NET)におけるMulti-Mediaスコアや、下段のプロセッサ性能(Processor Arithmetic)では、AVX2とFMA3は何の影響も及ぼしていない。因みに、SandyBridge世代のCore i3のスコアは、Integer 95 MPix/s, Float 135 MPix/s, Double 77 MPix/s, Float/Double 102 MPix/sというレベルなので、AVX2とFMA3で活入れしたHaswellはSandy BridgeのCore i3からするとそこそこに速い。
2.TMPGEnc Video Mastering Works 5.4.0.100
アップデートでAVX2に対応したという話を見つけて、早速試してみた。オプションの環境設定を開くと、確かにCPU/GPUにAVX2が追加されている。
(※以下修正済み)
約2分のTVドラマtsファイルをMPEG-4 AVC, 720x480, 29.97fpsに圧縮変換した。 映像エンコーダのプルダウンメニューで、Intel Media SDK Hardware (QSV), Intel Media SDK Software, x264の3つから選択して、変換に要した時間を記録。画質は見てない。
Intel Media SDK Hardwareとx269を使った変換で、AVX2有りとAVX2なし(=AVX)の差が出ている。それぞれ23%と20%の時間短縮になってるから、結構AVX2が効いてるってことだ。Pegasysやるじゃん。Intel Media SDK SoftwareではAVX2の効果が全然見られないから、こっちのエンコーダはまだAVX2に対応したコンパイラを使ってないってことかな。
3.GCC 4.7
GCCは2012年3月にリリースされたバージョン4.7.0で既にAVX2、Haswellに対応している。
完全に対応したのは、4.8かららしい。
Linuxをインスコしようと思っていろいろやってみたけど、インスコまでは進むのに正常にシャットダウン・再起動しなくて、まだ動かせない。もしかすると、Haswellの新しい電源管理とか省電源モードに、まだドライバが対応してないんじゃないかと思う。もしHaswellで64ビットLinuxが動いたら、このベンチマークをやってみたい。
4.Intel C++コンパイラ(体験版)
という訳でGCCが使えないので、代わりに、kilifさんの記事を参考に、32ビットWindowsにIntel C++ Compiler評価版をインスコして、AVX2をベンチマークしてみることにした。
HaswellのAVX2とFAM3の新しい拡張機能の速度を自分で体感したくて、アセンブラはま、無理としても、C++スクリプトなら書けるんじゃないか思って始めてみたんだけど、実はC++はさわったことないくせに甘く見ていた。大昔にかじったことのあるC言語と基本的には違わないだろうと思ってたら、結構ハードル高いっす orz... そもそも、AVX2を動かすためのまとまった(サルでも分かるレベルの)情報が少ない。
IntelのC++コンパイラをインスコすると、MicrosoftのVisual StudioのGUIに組み込まれるようになってるんだけど、これがまた素人には理解不能。何でdefaultのメイン関数がtmainなのって。これは否応もなく、コマンドラインツールを使うしかない。
紆余曲折を経てたどりついた、AVX2の拡張機能を動かすためのポイントは、二つ。
(1)なんだ、組み込み関数(intrinsicという)を使えばいいんじゃん。
__m256 _mm256_add_ps(__m256 a, __m256 b); 単精度加算
__m256 _mm256_mul_ps(__m256 a, __m256 b); 単精度乗算
__m256 _mm256_fmadd_ps(__m256 a, __m256 b, __m256 c); 単精度関和演算
__m256d _mm256_add_pd(__m256d a, __m256d b); 倍精度加算
__m256d _mm256_mul_pd(__m256d a, __m256d b); 倍精度乗算
__m256d _mm256_fmadd_pd(__m256d a, __m256d b, __m256d c); 倍精度積和演算
(2)コンパイラ・オプションでHaswellを指定するやり方が分かった。
icl /O3 /QxCORE-AVX2 main.cpp
/Qxの他のオプション(Sany Bridge: AVX, Ivy Bridge: CORE-AVX-I)
組み込み関数って言うのは、例えば
d = a * b + c;
っていう計算をする代わりに、
d = _m256_fmadd_sd(a, b, c);
っていう風に、ちょっと長い名前の関数がもう用意されてるってこと。しかも、この関数が受け取るのは256ビット幅(32ビットの単精度数なら8個、64ビットの倍精度数なら4個のデータが入る)ベクトルになってて、1個ずつ計算するより8〜4倍速い。あんまり種類が多いので、Intel Intrinsics Guide(組み込み関数ガイド)なんてアプリが配布されてるくらいだ。
kilifさんと同じ要素1000個の1次元配列3つの積和演算を、2x10^7回繰り返して比べてみた。
うーん、AVXとFMA3はスカラーより速いけど、AVXとFMA3の間には差が無い。packed data型に配列要素をロード・ストアするために組み込み関数を使っているのが影響しているのかも知れない。
(※ここから訂正)スカラー演算はコンパイラの自動ベクトル化を抑制すると遅くなったので、全体として理解しやすい結果になった。AVXとFMA演算はデータのロード・ストアをデータ型のキャストで行うより、組み込み関数で明示的に行う方が効率が良さそうだ。ただ、それにしても、コンパイラによってSIMD化されたスカラー演算の方がデータ型をキャストしたFMA3より速くなる理由が謎だ。横軸はミリ秒、Vectorizeとはコンパイラの自動ベクトル化あり、Suppressedはコンパイラの/Qvec-オプションで自動ベクトル化を抑制した場合。コンパイラによるベクトル化については、この辺り(iSUS)が分かりやすい。コンパイラがどこをベクトル化しているかは、/Qvec-report1オプションで表示される。下のコードの場合、データの初期値設定とスカラー乗算・加算のループがそれぞれSIMD化される。
#include <stdio.h>
#include <immintrin.h>
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
static const size_t delay = 20000000; //repeat number
static const size_t n = 1000; //dimension of the data array
static const size_t align = 32;
static const size_t double_size = 4;
static const size_t nd = n / double_size;
static const size_t skip = n / 17;
int main(void){
unsigned long time0, time1;
timeBeginPeriod(1);
double* a = (double *)_mm_malloc(n * sizeof(double), align);
double* b = (double *)_mm_malloc(n * sizeof(double), align);
double* c = (double *)_mm_malloc(n * sizeof(double), align);
double* d = (double *)_mm_malloc(n * sizeof(double), align);
__m256d *va = (__m256d *)a;
__m256d *vb = (__m256d *)b;
__m256d *vc = (__m256d *)c;
__m256d *vd = (__m256d *)d;
for (size_t i=0; i<n; ++i){
a[i] = 2 * i;
b[i] = 2 * i;
c[i] = 3 * i;
}
//Mock
for (size_t i=0; i<n; ++i)
d[i] = 0.0;
time0 = timeGetTime();
for (size_t j=0;j<delay;++j)
for (size_t i=0;i<n;++i){}
time1 = timeGetTime();
printf("\nmock: time = %i msec\n", time1-time0);
for (size_t i = 0; i < n; i += skip)
printf("%.1f ", d[i]);
//Scalar multiply-add
for (size_t i=0; i<n; ++i)
d[i] = 0.0;
time0 = timeGetTime();
for (size_t j=0;j<delay;++j)
for (size_t i=0;i<n;++i)
d[i] = a[i] * b[i] + c[i];
time1 = timeGetTime();
printf("\ndouble, scalar: time = %i msec\n", time1-time0);
for (size_t i = 0; i < n; i += skip)
printf("%.1f ", d[i]);
//Vector multiply-add with data loading/storing by intrinsics
for (size_t i=0; i<n; ++i)
d[i] = 0.0;
time0 = timeGetTime();
for (size_t j=0;j<delay;++j)
for (size_t i= 0;i<n;i += 4){
__m256d a_i = _mm256_load_pd(&a[i]);
__m256d b_i = _mm256_load_pd(&b[i]);
__m256d c_i = _mm256_load_pd(&c[i]);
__m256d d_i = _mm256_add_pd(_mm256_mul_pd(a_i, b_i), c_i);
_mm256_store_pd(&d[i], d_i);
}
time1 = timeGetTime();
printf("\ndouble, vector, intrinsics: time = %i msec\n", time1-time0);
for (size_t i = 0; i < n; i += skip)
printf("%.1f ", d[i]);
//Fused multiply-add with data loading/storing by intrinsics
for (size_t i=0; i<n; ++i)
d[i] = 0.0;
time0 = timeGetTime();
for (size_t j=0;j<delay;++j)
for (size_t i= 0;i<n;i += 4){
__m256d a_i = _mm256_load_pd(&a[i]);
__m256d b_i = _mm256_load_pd(&b[i]);
__m256d c_i = _mm256_load_pd(&c[i]);
__m256d d_i = _mm256_fmadd_pd(a_i, b_i, c_i);
_mm256_store_pd(&d[i], d_i);
}
time1 = timeGetTime();
printf("\ndouble, FMA, intrinsics: time = %i msec\n", time1-time0);
for (size_t i = 0; i < n; i += skip)
printf("%.1f ", d[i]);
//Fused multiply-add with data loading by pointer casting
for (size_t i=0; i<n; ++i)
d[i] = 0.0;
time0 = timeGetTime();
for (size_t j=0;j<delay;++j)
for (size_t i= 0;i<nd; ++i){
vd[i] = _mm256_fmadd_pd(va[i], vb[i], vc[i]);
}
time1 = timeGetTime();
printf("\ndouble, FMA, casting: time = %i msec\n", time1-time0);
for (size_t i = 0; i < n; i += skip)
printf("%.1f ", d[i]);
_mm_free(a);
_mm_free(b);
_mm_free(c);
_mm_free(d);
return 0;
}
(調査中)
■ SATA高速化ツール(ダイナミック・ストレージ・アクセラレータ)
Haswell世代のチップセットとしてZ87を選ぶ理由がこれ。SATAへのアクセス負荷に応じて、I/Oスループットを最大化するというもの。Dynamic Storage Accelerator (DSA)は、Intel Rapid Storage Technology (RST)のバージョン12.0.0.1083でサポートされている。Z87の他、QM87、HM87、Q87の各チップセットでも対応している。H87はダメっぽい。
DSAを利用する手順は、
(1)BIOSのAdvancedメニューからストレージ・コンフィグレーションでDSAをEnabledにする
(2)コンパネの電源オプションで高パフォーマンスに設定する
(3)デスクトップ右下のインジケータ(上三角)内のRSTアイコンを右クリックしてアプリケーションを開き、パフォーマンス・メニューからダイナミック・ストレージ・アクセラレータの有効化をクリック
(4)DSAの設定で、自動または手動の(省電力ギア・バランス・高パフォーマンス)を選択する
期待しつつ、Intel謹製SSD 520 (240GB)をCrystalDiskMark3でベンチマーク。先行記事に依ると25%もの高速化が得られると書いてあったけど、Intel SSD 520 (240GB)で試したところ3−7%程度の伸びだった。ランダムデータでも0Fillでも、またリードもライトも、確かに速度が上がっている。シーケンシャルの方が、ランダムアクセスより効果が出やすいようだ。パフォーマンスと引き換えに電力消費も上がるということだけど、デスクトップなら関係ないよね。
■ ここまでのまとめ
いろいろなレビューでHaswellの進化が限定的だと言われていて、何をベンチマークするか迷ったんだけど、解釈には注意が必要だと思う。Haswellが出てまだまだ日が浅いので、そもそもHaswellの拡張機能に対応してないアプリも多いようだし、また対応していると言っても最適化されているとは限らない(例えば計算アルゴリズムをFused Multiply-Addが使える形にするとかかな)。
簡単なベンチマークで、整数演算SIMDや浮動小数点積和演算の拡張がマルチメディア処理に確かな進化をもたらしていることが見えていると思う。考えてみると文書作成やWebブラウジングには今のCPUは既にオーバースペックなんだから、Intelがマルチメディアにフォーカスするのは理にかなってるんだろう。これが科学計算にも役に立ってくれたらいいなと思う。
4770Kのパフォーマンスについて、不思議と言うか、興味深い現象は、高負荷時の4770Kの消費電力がIvyBridgeより決して低くなっていないということだ。Haswellが低消費電力を目指しているにもかかわらずだ。これは何を意味しているのかというと、Haswellが言うところの低消費電力って、単にCPUを遊ばせてるだけじゃないのかって。Haswellは、使われていないアイドリング時の待機消費電力が圧倒的に低くなってるのは良いとして、負荷がかかってる時もわざとスロットルを絞ってターボブーストが掛からないようにしてるんじゃないだろうか(それでもIvyBridgeなみの性能が出るんだけど)。だって、IvyBridgeと比べてHaswellはマイクロアーキテクチャが拡張されてて、その分ダイ・サイズも大きくなってるんだから、消費電力が下がる方がおかしい。
という訳で、気になってるのがBIOSのAdvancedメニューにあるCPUコンフィグレーションのCPU Thermal Throttling(CPU温度制御)というスイッチ。これは、CPUがオーバーヒートしないように、一定の負荷が掛かるとクロックか電圧を下げるように作ってあるんだと思う。だから、このスイッチをオフにするか、CPUクーラーをいいやつに代えてCPU温度が上がらないようにしてやるだけで、ベンチマークが良くなるんじゃないかと思う。それと、Haswellではターボブーストのアルゴリズムも変わってるようだから(Turbo Boost Technology 2.0)、負荷、消費電力、コア温度とからどういう風にパフォーマンスと消費電力のバランスをとっているかということが、ベンチマークにも影響すると思う。
IvyBridgeまではIntelのターボ・ブースト・テクノロジ・モニタっていうアプリがあって、ぐりぐりブーストが掛かってるのを見ることが出来たんだけど、何故かHaswellには対応してないってことになってる。何で見せてくれないんだろう。(調査中)
■ QSVベンチマーク(調査中)
AVX2の効果を見るためにTVMW5をベンチマークしたので、他の定番ソフトもQSVをチェックしてみた。Haswell世代ではQSVもバージョン2.0と新しくなってるはずなんだけど、何が進化したのか詳しい資料がナカナカ見つからない。
・TMPGEnc Video Mastering Works 5.4.0.100(Pegasys 体験版)
・Media Converter 8.0.016(ArcSoft 体験版)
・MediaEspresso 6.7(Cyberlink 体験版)(アップデート)
15分46秒のTVドラマtsファイル(28374フレーム)を、MPEG-4 AVC 720x480, 29.79 fps, プロファイルMain, Level 4, 4Mpsで変換した結果を、フレーム/秒(fps)で表した。
上から3つは、TVMW5のx264、QSV (Intel Media SDK Hardware)、Intel Media SDK Softwareで、CPUベンチマークで見た通りQSVが一番速い。次のMediaEspresso 6.7は、QSVをオンにして測定。一番下の二つはMediaConverter 8で、どちらもQSVはオンにしてあって、上はGPUを使う、下はGPUを使わないという設定。ただし、ディスクリートGPUは挿してないので、CUDAじゃない。内蔵GPUでもGPGPU出来るってことか。
一番高速だったのは、GPUとQSVを使ったMediaConverter 8だった。僅差でMediaEspresso 6.7が続く。こいつらはTMPGEncと比べて13倍というとてつもない開きがある。画質はまだ見てないので、ブロックノイズとかチェックする必要があるけど、それにしてもMediaConverterもMediaEspressoもHaswellのAVX2には対応してないはずなんだけどな。どうなってるんだ、一体。
■ 謝辞
Intelさん、zigsowさん、最新のCPUを試す機会を頂き有難うございました。いろいろ革新的な技術が詰まっていて、素人なりに理解できる範囲でも大変楽しませて頂きました。
コメント (7)
他4件のコメントを表示ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。
YouTube の動画を挿入
YouTube の URL または動画の ID を入力してください
動画の ID が取得できません。ID もしくは URL を正しく入力してください。
ニコニコ動画の動画を挿入
ニコニコ動画の URL または動画の ID を入力してください
動画の ID が取得できません。ID もしくは URL を正しく入力してください。
ZIGSOWリンク挿入
検索対象とキーワードを入力してください
外部リンクを挿入
リンク先の URL とタイトルを入力してください
URL を正しく入力してください。
ほかのユーザーのレビュー
-
インテル(R) Core(TM) i7-4770K
ノート向けのHaswellは何十分の一の消費電力になる?とか話が出てるけど、デスクトップ用のHaswellは?どうなるんだろう??? Haswellではマザ...
-
インテル(R) Core(TM) i7-4770K
2013/08/06 PowerProducerについて追記2013/10/06 コンパイルオプションについて追記 今回レビューするのは第4世代Corei7プロセッサの倍率可変モデルCo...
-
インテル(R) Core(TM) i7-4770K
intelのCPU開発においては「IntelTick-Tock(チックタック)Model」と呼ばれる手法が採用されています。Tickはプロセスルールの細分化、TockはCPUマイ...
-
インテル(R) Core(TM) i7-4770K
zigsowプレミアムレビュー「4x4RACERUNNER4つの最新テクノロジーで時代の先頭を走れ!!」のレビューです。今回のレビューでは4種類のテーマに分か...
-
インテル(R) Core(TM) i7-4770K
【お詫び】2015/09/23本レビューの中で、CPUごとに電気代のシミュレーションを記載しましたが、明らかな数値の違いをご指摘いただきました。私...
-
インテル(R) Core(TM) i7-4770K
新しいCPU!コードネームはHaswellPC業界はモバイル・タブレット向けとなっていく中「Kモデル」の性能はいかほどか?この目で確かめポテンシャル...
-
インテル(R) Core(TM) i7-4770K
さて今回はintelの最新CPU、第四世代CoreiシリーズであるコードネームHaswell、"Corei74770K"のプレミアムレビューだ。テーマは"新機能3:統合...
-
インテル(R) Core(TM) i7-4770K
2013/07/04アイドル時にクロックが下がらない問題が解決しましたので追記しました 2013/07/15グラフ追加&少し文章見直しましたWattsup?PROで計測した...
-
インテル(R) Core(TM) i7-4770K
-はじめに-この「Corei7-4770K」は、今年の6月2日に発売したばかりインテルの最新CPUです。開発コードネーム「Haswell(ハズウェル)」の名称で知...
-
インテル(R) Core(TM) i7-4770K
インテル(R)Core(TM)i7-4770Kプロセッサー「4×4RACERUNNER40」の新機能1:統合型VR(VoltageRegulator)のレビューです。 第4世代インテルCoreプロセッサーでは、...
-
インテル(R) Core(TM) i7-4770K
ジグソープレミアムレビュー「インテル(R)Core(TM)i7-4770Kプロセッサー」におけるテクノロジーの革命体験として、「新マイクロアーキテクチャ」の...
-
インテル(R) Core(TM) i7-4770K
IntelのCPUは第2世代のSandyBridge、第3世代のIvyBridge、第4世代のHaswellとここ2、3年の間、飛躍的に進化し続けてきた。 自分は、ここzigsowのお陰で...
-
インテル(R) Core(TM) i7-4770K
オーバークロックの自由度というテーマなので…やらないわけにはいかないかなと、事前にいろいろと準備(例のグリスや両面テープ等)していたわ...
-
インテル(R) Core(TM) i7-4770K
今回のレビューテーマは、GPUコア性能の向上。私がやってみたいこととして応募時に記載したのは、代表的なグラフィックベンチマークを行うと...
-
インテル(R) Core(TM) i7-4770K
Nehalem/Westmere,SandyBridge,IvyBridgeにつづく、Intelの 第4世代CoreアーキテクチャHaswellの一部のラインナップが発売されて一ヶ月あまりたちました。 Haswel...
-
インテル(R) Core(TM) i7-4770K
IntelCorei74770kプレミアムレビュー 今回レビューするのは、IntelCorei74770kプロセッサー「4x4RACERUNNER40」新機能73%のグラフィックパフォーマンス向上に...
-
インテル(R) Core(TM) i7-4770K
「新型は旧型と比べてどれぐらい省電力?~統合型VoltageRegulatorの実力~」をテーマに、新型CPUHaswell(i74770K)と、旧型CPUSandyBridge(i72600)、Nehalem(i7870S)...
-
インテル(R) Core(TM) i7-4770K
今までやってたネットゲームではだいたい最高~標準設定でプレイできていたので、これ以上のPC性能要らないだろーと思っていたのですが、最近...
-
インテル(R) Core(TM) i7-4770K
初出:2013/07/10 最終更新日:2013/07/10インテルCorei7-4770Kプロセッサー レビュー[4x4RACERUNNER40]technology3GPUコア性能の向上73%のグラフィックパフォー...
-
インテル(R) Core(TM) i7-4770K
※7/30i7を殻割り第四世代のCPUの変化場所の一つはマイクロアーキテクチャの強化ということでしたねちょっと詳しく書くとALUポートが一つ、StoreAdd...
-
インテル(R) Core(TM) i7-4770K
今回、INTELCorei74770Kのオーバークロックのレビューに選出されました。Corei74770Kは3770Kなどから比べても大幅にRatioやベースクロックを弄ることがで...
-
インテル(R) Core(TM) i7-4770K
第4世代CPU(Haswell)は第3世代(IvyBridge)に比べてどれほどOCの自由度が向上したのか検証を行います。まずIvyBridge(以下Ivy)のオバークッロ方法は...
-
インテル(R) Core(TM) i7-4770K
今回のレビューは、応募時に各自自分が行いたいレビューテーマを記載しています。今回私は「マイクロアーキテクチャの強化」についてで選出...
-
インテル(R) Core(TM) i7-4770K
プレミアムレビュー「インテル(R)Core(TM)i7-4770Kプロセッサー」統合グラフィック部門のレビュアーに選出されました。 仕事を終えて家に着くと...
-
インテル(R) Core(TM) i7-4770K
レビュー課題「オーバークロックの自由度」 現在IntelCorei5-2500Kを使用していますがオーバークロックの経験はありませんでした。オーバークロ...
-
インテル(R) Core(TM) i7-4770K
IntelCorei7-4770Kのプレミアムプレビューです。お題は「統合型VR」。より進化した電圧制御システムにより、パソコンの消費電力はさらに低下し...
-
インテル(R) Core(TM) i7-4770K
最終更新日2013/7/26あれはもう随分昔のことだったと思うにゃ...........
-
インテル(R) Core(TM) i7-4770K
今回、おいらのレビューは、日々デザインワークやWEB制作などに利用しているAdobeアプリケーションでどれくらいのパフォーマンスを...
-
インテル(R) Core(TM) i7-4770K
今回レビューさせていただくのは、開発コードネーム「Haswell」こと、Intelの第4世代Coreiシリーズのi7-4770K(以下4770K)。現在においてのフラッグ...
-
インテル(R) Core(TM) i7-4770K
※画像がリンクされていなかったので、プレビューで見れるようにしました。 ■ジグソープレミアムレビュー今回レビュアーに選出されました、...
-
インテル(R) Core(TM) i7-4770K
この度、「4x4RACERUNNER4つの最新テクノロジーで時代の先頭を走れ!!」で選出させてもらいましたのでcorei74770kのレビューを述べさせて頂きたいと...
-
インテル(R) Core(TM) i7-4770K
以前、統合グラフィックスはゲームをやるためのものではないといわれていました。性能が悪かったからです。 さて、最新型の4770kではどうなっ...
-
インテル(R) Core(TM) i7-4770K
corei7-4770Kの統合グラフィックスレビュー2013/07/02更新最近の暑さでグラボが熱くなったりファンがうるさかったりでうんざりしてました。それほど...
-
インテル(R) Core(TM) i7-4770K
■ジグソープレミアムレビュー今回レビュアーに選出されましたよっちゃんです。自分の担当は「4770Kのオーバークロックの自由度について」...
-
インテル(R) Core(TM) i7-4770K
マザーボードの交換が必要なため、見送る予定でしたがZ87のマザーボードが楽しそう。これを読んだらOCがしてみたくなりました。ちょうど、ドラ...
-
インテル(R) Core(TM) i7-4770K
インテルでは、チックタック・モデルという戦略でCPUの世代が変わっています。 「チック」世代は、CPU内部の回路は大きく変えず、プロセ...
-
インテル(R) Core(TM) i7-4770K
大幅な消費電力低減CPUHaswellの消費電力はいかに? 先頃6月2日に解禁されたINTEL 第4世代CPUの最上位Corei74770Kを検証していきたいと思います。 尚...
kilifさん
2013/07/12
ロード、ストアが怪しいというところですが、sorrowさんのコードだとループ内で4要素ごと__m256d型に代入していると読み取れます。私のコードだとループの前に配列全体を__m256d型にキャストしています。具体的には↓のコードで、aが元のdouble型配列、a2が__m256d型配列です。
__m256d *a2 = (__m256d *)a;
これをやるとループ内を演算だけにできます。ネット上からの見よう見まねですが、ご参考ください。
自信がないので一部しか載せなかったのが本音ですが、帰ったら私のソースコード全体も記事に追加かダウンロードできるようにしようと思います。
VisualStudioについてはプロジェクト作成時に"空のプロジェクト"を選択するとメイン関数のソースファイルだけでコンパイルできます。そうしないと変なヘッダーファイルなどが出てきてややこしいです。よろしかったらお試しください。
sorrowさん
2013/07/12
有難うございます。kilifさんのスクリプトがヒントになって、いろいろ勉強させて頂き、とても楽しかったです。
わりと簡単そうだなと思って始めたのですが、いやいや、現代の高度化されたC++コンパイラは、とても付け焼刃では・・・
ポインタのキャスティングは、きれいな方法なので、はじめそうしていたのですが、どうも挙動不審で、止めました。
一方の組み込み関数を使ってロード・ストアするやり方は、状況によってはコンパイラの動きを明示的に指定するという意味があるのかなと解釈しています。キャスティングした場合でも、データをレジスタにロードしなければならないことは同じなので、コンパイルした後の実際のインストラクション・コードは大差ないのかなと想像してました。実際に計算に掛かった時間は、AVXとFMAで1.3秒程なので、kilifさんの結果とそんなに違わないようです。
Multiply-addを2ステップでやるのと、FMA3を使って1ステップでやるのは、レイテンシが8対5サイクルの違いがあるはずなので、kilifさんのような結果になって欲しかったんですけどね。
kilifさん
2013/07/13
こちらの記事でもひとまずFMA3のコードを載せたのでよろしければご覧ください。
sorrowさんのコードをこちらでもやってみたところ、sorrowさんの記事と同様にほぼ同じ実行時間で、数%程度の差しか出てきませんでした。ですが時間はスカラーが10.5秒程度、AVX,FMAが2.8秒程度とsorrowさんの結果よりも2倍以上遅くなってしまいました。
私の記事のコードだと同じ条件で3.3秒、3秒となりましたが、キャストする方法だと何らかのオーバーヘッドが生じて、明示的にロード・ストアする場合よりも1ステップあたりの差が大きくなったというところでしょうか。キャスト時の挙動が怪しいというのは、配列要素を指定することでロード・ストアがコンパイラ任せになるとのご指摘と併せて的確と思います。
また、ベクトル化ガイドによるとO2以上の最適化では自動ベクトル化が働くそうなので、コンパイル時に/Qvec-のオプションがないとスカラー演算が勝手にベクトル化されそうです。スカラーの差異はそこかと考えます。
こちらは最初のメモリ確保もmm_mallocを使わないで静的にa[1000]のようにやっているのですが、それも問題になるのでしょうか。
当方も普段C++のような細かい言語を使わないので早計な結論だった気がします。ロード・ストアなんかは全く気にしてもいませんでした。アセンブラコードを直接見ると分かるのでしょうが・・・
退会したユーザーさん
2013/07/15
ソースをQSVでデコードさせて、それをそのままエンコーダーに放り込む方法がIntel Media SDKには用意されています。
ただ、この方法だとフィルタリングが出来ないのでTMPGEncは採用していないのかと。
sorrowさん
2013/07/16
コメント有難うございます。仰るとおり、TVMW5にはデコーダの選択肢がないので不思議に思ってました。なるほどです。求めるものが全然違いますから、MC8やME6.7とTVMW5を一列に比べるのはあまり意味が無いかも知れませんね。
それにしても、デコーディングだけでもこれだけの差がつくのは面白いです。また、画質はHaswellが頑張っている点のひとつらしいので、もう少し詳しく見てみたいと思っています。
ちょもさん
2013/07/18
Z87のダイナミック・ストレージ・アクセラレータなる機能、まったく知りませんでした…
早速Enableに設定を変更したところです。
sorrowさん
2013/07/18
有難うございます。SSD 520は始めから爆速なので、もう少し伸びしろのありそうなSSDでも見てみると面白そうだなと思ってます。