探検


【C++】高速化手法【SSE】2 [転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2015/05/21(木) 01:53:58.15ID:ZhKmhhGS
C++やインラインアセンブラ、SSEなどによる高速化の手法
について語りましょう。

前スレ
【C++】高速化手法【SSE】
http://peace.2ch.net/test/read.cgi/tech/1130349336/
2015/05/21(木) 01:55:23.61ID:taYfOZ7g
>>1乙。

10年の時を経て2スレ目に突入、おめでとう。
2015/05/21(木) 02:00:37.40ID:ZhKmhhGS
1スレ10年も掛かったのかwww

compiler intrinsicsの普及と、x64ではインラインアセンブラが使えなくなったのが
またSIMDの再普及に繋がる気がする

SSE3、SSE4、AVX、AVX2、FMAと言った新しい命令も増えているのも理由の一つか
2015/05/21(木) 02:02:04.95ID:ZhKmhhGS
それとこれテンプレに入れるか
次スレ今度いつになるか分からないしなww

http://www.officedaytime.com/tips/simd.html
2015/05/21(木) 02:07:04.14ID:ZhKmhhGS
あと面白そうなところはここか

https://github.com/herumi/x86opti
2015/05/21(木) 03:57:50.11ID:OGLmDH5r
10年wwww
2015/05/21(木) 13:51:48.66ID:Jx6BJl3J
マルチコアによるマルチスレッド化の方がずっと楽だから、難しいSIMDプログラミングはいまいち
はやらないのかな
2015/05/21(木) 19:18:14.97ID:taVQHAdz
SIMDは作るのは難しいが、一度作ってしまうと、関数の中に封じ込めることが出来るので、
後からの使い勝手自体はマルチスレッドよりも良いんだがな。ライブラリ化もただの関数なので問題ない。
マルチスレッドだと関数の中だけで閉じなくて、アプリ全体の設計の部分まで話が広がるので、
機能単位でライブラリ化するのが難しく、簡単に使いまわせない。
ま、SIMDはライブラリ化しやすいから、多くのものが既にライブラリ化されてて、
ほとんどの人はそれを使うだけですむので、自分で書く必要性が少なくて、
故に過疎りやすいってのもあると思うがね。
2015/05/21(木) 19:30:58.21ID:Ao5A+4wF
SIMD化はコンパイラに任せるのが得策。
アルゴリズム改善がどこもできなくなってからでいい。
2015/05/21(木) 20:29:21.14ID:taYfOZ7g
前スレの8bit単位の乗算とか、そういう頻繁にありそうなケースに対応した命令を用意してくれないと、
間口広がんないよ・・・。
2015/05/21(木) 20:45:29.77ID:2/488D5d
8/16bitぐらいのIndex範囲でテーブル引きしれくれる命令がほしいわ

8bit演算するにも無駄なシャッフルしなくても良い命令がそろったのがSSE4辺りで
さらにAMDが未対応みたいな期間長すぎたな
2015/05/22(金) 01:51:48.18ID:pqX01hMi
命令に対応してたってそれを実行するユニットがそれ相応に強化されてなければ大して効果ないよ
2015/05/23(土) 18:03:12.07ID:1SFlVJvM
並列計算が実装されてないか、使っても遅いとき、通常の演算で並列できないか?

(a0 + a1X + a2X^2 + a3X^3) ( s + tX) のXの1乗、3乗を取り出すことで、
2015/05/23(土) 18:08:24.46ID:1SFlVJvM
途中送信した。
上のXの項は、t a0 + s a1
上のX^3の項は、t a2 + s a3

Xをたとえば2^10や2^16と取り、下位からの桁上りがないとすると、ビット演算でデータ取り出せる。
2015/05/23(土) 19:52:22.42ID:1SFlVJvM
>>13>>14を実装して並列計算の叩き台を作った。微妙に速度アップした。結果が正しくないが計算量は正しいはず。

#include <iostream>
#include <time.h>
using namespace std;
#define N (1<<18)
void initdata(unsigned char *a, int range){ for(int n=0; n<2*range; n+=2) { a[n]=rand()%256; a[n+1]=rand()%256; }}

#define cal(x,y,s) {x=(x*s + y*(255-s))&255; y=(y*s + x*(255-s))&255;}
void test(unsigned char *a) {
for(int n=0; n<2*N; n+=2) {
unsigned char x=a[n], y=a[n+1];
for(int s=1; s<255; s++) cal(x,y,s); for(int s=1; s<255; s++) cal(x,y,s); for(int s=1; s<255; s++) cal(x,y,s); for(int s=1; s<255; s++) cal(x,y,s);
a[n]=x; a[n+1]=y; }}

// (a0 + a1X + a2X^2 + a3X^3) ( 255-s + sX) Xの項は、s*a0 + (255-s)*a1 X^3の項は、s*a2 + (255-s)*a3
#define dset(x,y) (x) + ((y)<<8) + ((y)<<16) + ((x)<<24);
#define cal2(x,s) { x *= ( s + ((255-s)<<8) ); unsigned char c=(x>>8)&255, d=(x>>24)&255; x = dset(c,d); }
void test2(unsigned char *a) {
for(int n=0; n<2*N; n+=2) {
unsigned int x = dset(a[n], a[n+1]);
for(int s=1; s<255; s++) cal2(x,s); for(int s=1; s<255; s++) cal2(x,s); for(int s=1; s<255; s++) cal2(x,s); for(int s=1; s<255; s++) cal2(x,s);
a[n]=(x>>8)&255; a[n+1]=(x>>24)&255; }}

int main() {
unsigned char *a = new unsigned char [2*N],*b = new unsigned char [2*N];
initdata(a, N); memcpy(b,a,2*N);
cout<<"memcmp(a,b):"<<(memcmp(a,b,2*N)?"false":"true")<<endl;
unsigned long t=clock(); test(a); t=clock()-t; cout<<t<<endl;
t=clock(); test2(b); t=clock()-t; cout<<t<<endl;
cout<<"memcmp(a,b):"<<(memcmp(a,b,2*N)?"false":"true")<<endl;
return 0; }
2015/05/27(水) 11:09:42.07ID:f/0uemgN
前スレ終わりごろのビットマップ合成の話だが、結果的にはスカラ版と比較して
5倍程度に収まっていたが、初期はスカラ版より遅い結果しか出せていなかった。
スカラ版と等速なら話はわかるが、
なぜ遅くなるのか?
俺も似たようなこと遭遇した記憶はあるが
詳細が思い出せない。
2015/05/27(水) 13:45:50.89ID:2yaRNWB+
SIMD関連はまず命令の実行に都合のいいようにデータを作成するのと
結果を取り出すのに時間がかかるからじゃね?
それとSSEレジスタは128bitなので1処理当たり32bit使うと4並列にしかならない
AVX/AVX2なら256bitなのでこちらの方が速度が上がると思う
18デフォルトの名無しさん
垢版 |
2015/05/27(水) 15:22:12.59ID:TYkQbksz
>>16
構造体へのコピーをスカラで何倍もの時間かけてやってたから
本体処理が4秒が1秒に縮まったところでセットアップに5秒かかってたら意味がない

ボトルネックを解消するつもりでSIMDを使ったつもりが新たな別のボトルネックを作ってました
しかもなんで遅くなったのか使った本人が認識してないというの。
2015/05/27(水) 18:10:04.45ID:1+NR3ImF
つまりSIMDレジスタで計算する為に
スカラ以上に命令を使った為
遅くなったということか。
前スレの968では見直ししたが2倍ほど遅いと言っていた。
本来4倍になるはずが1/2倍、
8倍も遅くなるなんてありえるか?
根本的に何か問題があるとしか
思えん。
20デフォルトの名無しさん
垢版 |
2015/05/27(水) 19:09:25.21ID:VZ6+fhUn
あんなのソースコード見ればボトルネックがどこにあるか一発でわかるだろ
見ただけでわからんやつは向いてないよ
21デフォルトの名無しさん
垢版 |
2015/05/27(水) 19:11:41.34ID:VZ6+fhUn
「ハッカーのたのしみ」とかの良著をよく読むことをすすめるよ
並列化アルゴリズムに理解のないやつがいきなりSSEやAVX使っても不幸にしかならない
2015/05/27(水) 19:52:40.39ID:21LcoVTJ
然しものSIMDも、まったくオーバーヘッドがないわけじゃぁない。
SIMDに演算させるためのデータ構造整えなんかの命令分がオーバーヘッドになる。
これを最小に抑えつつ、SIMDの並列演算性能を活かすのが腕の見せ所よ。
2015/05/29(金) 18:33:22.93ID:5gPBcsmJ
メモリクソ余ってんだから最初からSIMD前提なデータ構造強制できりゃいいのになぁ
2015/06/08(月) 22:06:48.16ID:XUgdS8pG
すいません。以下のようなことがやりたいのですがどうするのが一番いいですか。

void up_index(short a[16],short b[16])
{
2015/06/08(月) 22:12:29.64ID:XUgdS8pG
すいません。途中で書き込みました。
avx2でお願いします。

void up_index(short a[16],short b[16])
{
for(int i=0;i<15;i++)
{
b[i]=a[i+1];
}
b[15]=0;
}

void down_index(short a[16],short b[16])
{
b[0]=0;
for(int i=1;i<16;i++)
{
b[i]=a[i-1];
}
}
2015/06/08(月) 22:54:29.21ID:GQ7FFrMa
void up_index(short a[16],short b[16])
{
__m256i mask = _mm256_setr_epi16(
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF,
0xFFFF, 0xFFFF, 0xFFFF, 0x0000
);
__m256i x = _mm256_loadu_si256((__m256i*)a[1])
x = _mm256_and_si256(x, mask);
_mm256_storeu_si256((__m256i*)b, x);
}

あとわかるよな?
2015/06/08(月) 22:55:00.93ID:GQ7FFrMa
ミスった
__m256i x = _mm256_loadu_si256((__m256i*)&a[1]);
2015/06/08(月) 23:02:02.79ID:XUgdS8pG
>>__m256i x = _mm256_loadu_si256((__m256i*)a[1])
領域外(a[16])を参照してるような…
ゴミが入るだけだから気にしなくていいってことですか?
2015/06/08(月) 23:58:10.30ID:XUgdS8pG
うごいてるっぽいので気にしないことにします。
ありがとうございました。
2015/06/09(火) 00:11:30.65ID:2cA2PMHO
ページ境界跨がなきゃ平気
3125
垢版 |
2015/06/09(火) 00:47:54.26ID:8QWNG3PG
>>ページ境界跨がなきゃ平気
跨ぐとどうなるんでしょうか。
突然プログラムがあぼーんすることも覚悟しなきゃいけないってことですか?
2015/06/09(火) 02:10:05.37ID:btE8Rt5a
アクセス違反例外で停止するわな
2015/06/09(火) 02:26:12.65ID:+xTmfGgc
https://software.intel.com/sites/products/documentation/doclib/iss/2013/compiler/cpp-lin/GUID-F4DA723A-DEB9-42D8-82FF-72553EB24273.htm

ここによるとアラインされてなくてもいけるcompiler intrinsicsだわな
アラインが必要なのは

https://software.intel.com/sites/products/documentation/doclib/iss/2013/compiler/cpp-lin/GUID-29CB35FA-F50D-4F6E-88B6-D3A1D83BE311.htm

こっちの方だ
_mm256_load_si256()

ただ当然境界がズレている所は2回ほど読むだろうから速度を気にするのなら
最初から_mm256_load_si256()を使ってデータの配置もアライメント通りにしとくのに限る

配列だと__attribute__((aligned(16)))を付けて置くといいわな
2015/06/09(火) 02:26:58.58ID:+xTmfGgc
おっと間違えた

__attribute__((aligned(32)))
2015/06/09(火) 08:01:24.58ID:uvrBn2pL
別にアライメントの話じゃないし。
つうか領域外読み込んでも
落ちないからOKとか
それはないから
2015/06/09(火) 10:18:10.60ID:hpY+QnAE
上下128ビット跨いだシフトが簡単にできないから
ミスアラインロード使わないとめんどくさいんだよねー

void up_index(short a[16],short b[16])
{
  __m256i x = _mm256_load_si256((__m256i*)a);
  __m128i u = mm_mm256_extracti128_si256(x, 1);
  x = _mm256_alignr_epi8( x, _mm256_castsi128_si256(u), 14);
  _mm256_store_si256((__m256i*)b, x);
}
2015/06/09(火) 10:19:22.92ID:hpY+QnAE
 __m128i u = _mm256_extractf128_si256(x, 1);

みすった
3825
垢版 |
2015/06/09(火) 21:40:12.66ID:8QWNG3PG
16 x 16 だと結構オーバヘッド覚悟しなきゃいけないみたいですね。
11 x 11 なら128ビットに納まるから上下左右1ビットシフト高速にできますかね?
2015/06/09(火) 21:47:54.51ID:X9YqiuVE
ビットボードでも作ってるの?

11ビットとかかえって扱いづらいからやめとき?pslldq/psrldqは8ビット単位だからいろいろ面倒だぞ
16x16でもvextractf128+vpalignrの2命令ですむんんだからそれが一番無難
2のべき乗のほうが扱いやすい
2015/06/09(火) 21:51:07.26ID:8QWNG3PG
11 x 11 だと右端と左端がつながっちゃうか。
2015/06/09(火) 21:55:17.24ID:8QWNG3PG
>>39
はい、まさにビットボードです。
9 x 9 あれば囲碁9路盤が作れます。
やっぱ2のべき乗ですかね〜。
2015/06/09(火) 22:00:22.26ID:uvrBn2pL
SIMDとか並列プログラムは
各要素間の関連が薄けりゃ薄いほど良い
相関ゼロなら100%の性能が出せるが
逆なら劣化する。
要はお前のプランはSIMD向きじゃねえんだよ。
スカラで組めカス。
2015/06/09(火) 22:11:17.04ID:8QWNG3PG
なんでよ、ビットボードにSIMD使おうと考えるのは自然だろ。
2015/06/09(火) 22:34:23.52ID:ftbXeVKR
上下128ビットの入れ替えが面倒なら、1レジスタで1ボードじゃなくて2レジスタで2ボードみたいな割り当てもアリかな
2015/06/11(木) 06:33:32.55ID:PTMql3il
19x19は?
2015/06/11(木) 17:55:12.67ID:6lVnkCXZ
1レジスタに1ボードのらないで2レジスタに2ボードのる状況が想像できない。
2015/06/11(木) 21:11:39.78ID:ucI+50Qq
me too

碁盤の19x19なら1列32ビットに割り当てて128ビットの4x5レジスタじゃいかんのか?
256ビットなら3レジスタか。ちと苦しいな
2015/06/11(木) 21:17:03.34ID:ucI+50Qq
64ビットごとに19x3という割り当てもありか
2015/06/13(土) 04:02:16.52ID:0MXVYW8Q
さて、そろそろ団子が実験結果を公開してくれる頃だと思うんだが……
ソース書けた?
2015/06/13(土) 06:50:53.32ID:eCUflYbk
俺囲碁のルールすら知らんが?
2015/06/22(月) 09:21:43.06ID:0p5/VSpX
結局SSEとかの機械語でやる以外にC++には高速化の手段がないの?(´・ω・`)
後、変なclassを使わないとか?(´・ω・`)
52デフォルトの名無しさん
垢版 |
2015/06/22(月) 16:45:31.61ID:BEzC3Nfs
クラスで遅くなるとか迷信でしょ
2015/06/22(月) 16:51:45.79ID:cpn0Yuio
今はSIMDがあるから
かろうじてC++使ってるけど
他で行けるようになったら
捨てると思う
2015/06/22(月) 16:56:25.34ID:h2li5DGU
クラスを使うから遅くなるんじゃなくて、動的なポリモーフィズムを実現するための仮想関数テーブルや
あるいは過剰にコンストラクタ呼び出しで遅くなる。
2015/06/22(月) 19:26:36.11ID:468RGWDu
>>53
C++と同程度の速度がでる言語って何よ?
2015/06/22(月) 19:59:05.05ID:cpn0Yuio
いやーそんなん無いけどさー
己が納得出来れば良い訳よ
vector4クラスとかあって
最適化コンパイルでSIMD使いますよ〜
で良い。所詮趣味だし俺はそれで乗り換え出来る。
今はfortranやC++以外にはそれすらも無いからな
2015/06/22(月) 20:04:38.95ID:L2Qxnu5O
過度なオブジェクト指向(笑)やめればC++でもアセンブラに迫る高効率のコード書けますよ
2015/06/22(月) 21:19:49.22ID:468RGWDu
最近はCとアセンブラを比較することも少なくなったろうな。
数学ライブラリなんかはまだアセンブラで書いてんのかねぇ。
2015/06/22(月) 23:07:11.77ID:R1+ZwB88
>>57
おっさんおっさん、それってCとして使うってのとほぼ同じ意味なんじゃ……?
2015/06/22(月) 23:15:07.42ID:OAaA5v1W
演算子オーバーロードやテンプレートがCにあるならそうだね
どの程度の抽象化までならオーバーヘッドが生じないかはdvec.hあたりのIntel謹製クラスライブラリ見ればわかるでしょ
2015/06/23(火) 23:58:04.32ID:bwjeXC/X
スレ立てるまででもない質問じゃない質問ってどんなの?
2015/06/26(金) 04:43:42.68ID:1ST1aZRQ
え?そこらへん使ってもアセンブラに迫る高効率のコード吐き出してくれるの?
2015/06/26(金) 09:20:27.34ID:gBS6mhz7
コンパイラ舐めんなw
2015/06/26(金) 13:07:25.04ID:KiE+sAI+
>>62
C にはない C++ のオーバーヘッドは、例外と仮想関数呼び出しのための関数テーブルアクセスと dynamic_cast<>()。
それらを使わなければ、型チェックの厳しい C として使える。
演算子オーバーロードは変な名前の関数を呼び出してるだけ。
コンストラクタとか(非仮想)デストラクタは C で同じ作法で作ったのと一緒。

最適化で言うと、俺の環境だと this を restrict として扱わないので、
this->func() を func( this ) にするとか人力で最適化されやすくしないといけないことがある。
2015/06/26(金) 18:56:22.95ID:1eqFY8pT
>this->func() を func( this ) にするとか

まじで?
2015/06/26(金) 23:08:38.05ID:Tf/lkRBh
あとはMSVCだとthisポインタをECXで渡すけどSSE*ってECXを暗黙にdestinationとして扱う命令あるじゃん
2015/07/04(土) 19:14:20.94ID:g1Tiw5j6
みんgwでsse2つかってみたけど全然早くならないorz
何か間違ってんのかな?
2015/07/04(土) 20:06:47.25ID:4GC84Q0p
github晒しておくと構いたがりがどこがおかしいのか指摘してくれるよ
2015/07/04(土) 20:23:55.16ID:g1Tiw5j6
githubってよく知らないんだよなぁ。
イケてるギークはつかってるらしいが。
これを機にやってみるか…
2015/07/04(土) 22:33:31.72ID:g1Tiw5j6
http://www.age2.tv/rd05/src/up9736.zip.html

githubはとりあえず置いといて、ソースうpします。
物は囲連星というゲームの9路盤のAIです。

makefileが入ってるのでbenchmark.exeをmakeしてみてください。
うちのPC(core i7 4790)で40秒くらいで終わるベンチマークができます。
ベンチの内容はAIが3手プレイします。

SSE2で最適化したいクラスはPointSetというクラスで、
128bitつかって 10 x 10 のビットボードを実装しています。

SSE2化してみましたが速くなりませんでした。

スレの皆さん最適化よろしくお願いします。
2015/07/04(土) 22:42:47.73ID:YeWNQkLW
SSEって最適化できてもせいぜい20%アップ程度の気がするな。
アルゴリズムの見直しとか、CPU演算以外とかはやりきってるか?
2015/07/04(土) 22:49:03.16ID:g1Tiw5j6
ちなみにmakefileは依存関係全然考慮してないので毎回クリーンしてくださいw
コンパイラは64bit MinGWです。
2015/07/04(土) 22:51:51.53ID:g1Tiw5j6
オッとリロードしてなかった。
>>71
アルゴリズム見直しで速くなるのが一番いいんですけどね〜
なかなかアイディアが湧かないのでとりあえず手っ取り早いSSEを試してみたいです。
2015/07/04(土) 23:13:48.96ID:+CPi2s1F
>>73
i7 4790ならAVX2やiGPGPUで速くしたほうがいいんじゃないのか?
データ並列に適していないのにSIMDにしてもたいして速くならないと思うけど
いまの適している?
2015/07/04(土) 23:23:18.20ID:g1Tiw5j6
128bitで一つのビットボードになっていてもろandとかorとかandnotとかさせるので
SSE2で速くなるかなと思ったんですが。
AVX2は256bitですよね?どうやって適応させるか難しいです。
iGPGPUは使い方しらないorz
2015/07/04(土) 23:28:34.72ID:Ika70OGI
iGPGPUとか全然ダメ。
並列処理向きな処理でも激遅。
最低でもメモリ空間共有がサポートされなきゃゴミ。
2015/07/05(日) 01:38:21.45ID:U8xf2vl9
>>70はピンポイントでSSE化したい所、出来そうな所だけピックアップしてくれよ。
これでは解析が手間。
2015/07/05(日) 06:57:39.74ID:5Fixj9dP
ボトルネックがピンポイントで分かってないからこそ遅いのでは?
2015/07/05(日) 08:14:07.41ID:rj88vDKP
>>77
SSE化できそうなところはPointSetというクラスですが、
じつはもうSSE化してます。
でも速くなんなかった。

なぜ速くならなかったか教えていただけると助かります。

>>78
PointSetボトルネックになってないんですかね。
結構使ってるはずなんですが。
2015/07/05(日) 08:44:17.99ID:5Fixj9dP
関数ごとのプロファイルとってみて総実行時間を見てみるといいよ
並列化できない(と思ってる)ところが最大のボトルネックになってるなら他をいじってもどうしようもない
2015/07/05(日) 09:42:48.10ID:pEwkWnHA
最適化ってのはボトルネックになってるところ測定してからやるもんだぞ
2015/07/05(日) 10:22:22.43ID:rj88vDKP
なんか性能測りたい関数がインライン展開されちゃって測れないっぽいT△T
2015/07/05(日) 10:47:06.39ID:7niimHYF
だから計測しろって
2015/07/05(日) 10:50:19.25ID:rj88vDKP
ビットフィールドの立ってるビット数える関数をSSE4.2のpopcnt使ったらえらい速くなったんだが?
2015/07/05(日) 10:59:07.88ID:rj88vDKP
ちょっと出かけます。
夕方には帰ってくる。
2015/07/05(日) 11:07:32.33ID:7niimHYF
気を付けてな
2015/07/05(日) 11:49:59.66ID:pEwkWnHA
ちょっと伺いたいんですがavxまでで8bit(1byte)の中で上半分、下半分を取り出すのはありますか?
avx2までいくとpextというmaskをとった部分のビットだけ抽出するのはあるようなんですが・・・
2015/07/05(日) 13:52:49.93ID:TGTnUn4r
pextというとBMI2かね
汎用レジスタでの話ならシフトとandじゃダメな理由があるのかね
連続したnビットを取り出したいだけならレイテンシの長い(3clk)pextを使う価値があまりない

mov eax, 0fh
mov edx, f0h
pext eax, esi, eax
pext edx, esi, edx
5クロック

mov eax, esi
mov edx, esi
shr edx, 4
and eax, 0fh
and edx, 0fh
3クロック、movが消えるなら2クロック
2015/07/05(日) 13:55:24.70ID:pEwkWnHA
>>88
なるほど!ありがとうございます
2015/07/05(日) 14:06:01.88ID:3mytObGh
どういう並びにしたいの?
こういう意味?
http://stackoverflow.com/questions/12795462/how-do-i-extract-32-x-4-bit-from-16-x-8-bit-m128i-value
2015/07/05(日) 14:43:20.51ID:pEwkWnHA
>>90
ちょうどこんな感じです!
このソースみたいにlowerとupperを取り出して返す関数つくろうと思ってました

下4bitはそのまま0xfでmaskして、上4bitは4bitシフトしてからmaskなのでこのコードで行けそうです
ありがとうございます
2015/07/05(日) 15:10:55.88ID:5Fixj9dP
え?

movzx eax, al
shr eax, 4

じゃいかんのか?
2015/07/05(日) 15:14:44.70ID:IoTdVT02
どうしてもSIMD使いたいんだとさ
クロック数がかえって増えようとも
2015/07/05(日) 16:55:23.92ID:pEwkWnHA
いえアセンブリがわからないだけです!
>>92でいけるのならやってみます!ありがとうございます!
2015/07/05(日) 17:09:15.78ID:rj88vDKP
gprofの結果ビットボードを座標のベクタに変換する関数PointSet::toVector()が時間かかってることが分かった。
すまん、ちょっと飯食ってくる。
2015/07/05(日) 17:14:58.64ID:7niimHYF
大概は思わぬところでサイクルを食ってるもんだ。
食うのは飯だけにしたいものだな。
2015/07/05(日) 19:12:24.15ID:rj88vDKP
PointSet::toVector()は一回最適化試みた箇所なんだよなぁ
正直これ以上アイディアうかばん。
2015/07/05(日) 19:48:59.00ID:U8xf2vl9
なにをしてるか知らないがここが時間食ってる。
8ビットや16ビットで区切って計算結果を配列に入れといて利用するとかできないか?


int size()const
{
int res=0;
unsigned long long i;
i = u.table[0];
while (i)
{
++res;
i = (i - 1)&i;
}
i = u.table[1];
while (i)
{
++res;
i = (i - 1)&i;
}
return res;
}
2015/07/05(日) 19:54:28.58ID:U8xf2vl9
あとここも。
32bitでの実行だが。


int get(Point p)const
{
// return !((*this) & x_line[p.x()] & y_line[p.y()]).empty();
return (table[p.y() & 1] >> (p.x() + (p.y() >> 1) * 10)) & 1;
}
2015/07/05(日) 19:58:51.19ID:13erbQHH
立ってるビット数が多いときはその数え方だと時間喰いそう
2015/07/05(日) 20:02:29.73ID:rj88vDKP
>>98
レスありがとうございます。
そこはビットボードのビットが立ってる数を数えています。
SSE4.2のpopcntに置き換えたら大分速くなりました。

>>99
そこはビットボードの座標pのビットが立ってるかどうか返す関数ですね。
正直そこはそれ以上最適化できないと思ってますが、うまい手ありますかね。
2015/07/05(日) 22:27:19.60ID:HlvO5/Ro
ちなみに>>92は
(unsigned char)n >> 4
でいける
2015/07/05(日) 23:55:30.55ID:pEwkWnHA
>>102
なるほど!
ちなみにシフト操作て5bitシフトならCPUのサイクル数5倍になるとかあるんですか?
2015/07/06(月) 00:06:48.57ID:MmNHQVlS
8ビット時代じゃねそれ
別にシフトの変量でサイクル数は変わらんよ
2015/07/06(月) 00:08:37.50ID:obJwiAn/
>>104
ありがとうございます
では積極的に使っていきます!
2015/07/06(月) 00:15:26.05ID:1z10P7tP
今のCPUはバレルシフタで1クロックじゃね
2015/07/06(月) 09:26:17.06ID:9h3CM3fP
386からは一発だな
その代わりマスクがかかる

286ま命令はあったがマイクロコード
8086はCLで回数指定以外、多ビットシフト命令が無かった

はず
2015/07/06(月) 17:03:51.46ID:obJwiAn/
cpuの命令セットて全部アセンブラに還元されるんですか?
もしそうなら命令セットてアセンブラで作ったライブラリみたいなものですよね?
2015/07/06(月) 17:18:20.33ID:hLGIY9Ls
アセンブラとCPU命令と機械語は一対一対応で見かけだけの違いだろ。
より人間よりの記法がアセンブラ。
110デフォルトの名無しさん
垢版 |
2015/07/06(月) 17:19:36.84ID:g1ABbiM2
ライブラリ?
2015/07/06(月) 18:59:39.73ID:K/ajJWQg
アセンブラに、1語で複数インストラクションに対応する組み込み済みマクロはよくあるね。
ユーザーにとっては見かけ上機械語のニモニックと変わらん
2015/07/07(火) 12:45:53.44ID:cmwJTquu
マイクロコードからビルドされた
ライブラリだな。
113デフォルトの名無しさん
垢版 |
2015/07/16(木) 18:53:32.86ID:l6l+0TT5
シフト命令がサイクル数変わらずって事は
もしや乗算命令も……?
2015/07/17(金) 00:15:18.58ID:c113lVsF
乗算も1クロックだよ。かくして除算の遅さが際立つ。
2015/07/17(金) 03:37:00.44ID:Gq3JBEl3
3くらいじゃなかったか?
2015/07/20(月) 17:52:21.46ID:rBoKIpMh
乗算回路って素朴な筆算より効率的な回路存在するの?
2015/07/21(火) 08:40:49.05ID:JVfLP5Iv
効率て何?
回路規模?
速度とアルゴリズムのシンプルさなら表引きだけどな。
118デフォルトの名無しさん
垢版 |
2015/07/21(火) 12:54:25.50ID:KUd+SBCt
表引きて何バイトの表用意するつもり?
119デフォルトの名無しさん
垢版 |
2015/07/21(火) 13:57:35.38ID:tQ/auOKg
>>109
ニーモニックとオペコードは一対一とは限らないよ。
2015/07/21(火) 23:36:30.91ID:cKSGyEK/
>>76
http://blogs.msdn.com/b/nativeconcurrency/archive/2013/07/08/shared-memory-support-in-c-amp-introduction.aspx
2015/07/22(水) 01:54:32.08ID:Vve5AGCV
>>116
まあ筆算は筆算だけどね、boothのアルゴリズムとかwallace treeとか調べてみるといいと思うよ
2015/07/29(水) 01:28:21.81ID:OiAbEds4
>>76は今の時点だとあたってるように思えるなあ
CPUと頻繁にデータやり取りしたり、十分長い時間計算させるのでなければオーバーヘッド大きすぎるし
123デフォルトの名無しさん
垢版 |
2015/10/01(木) 15:36:21.06ID:X8BXmh6N
pcooがいいかboostがいいかって話もここでいいの?
2015/10/01(木) 16:47:08.19ID:l3udI6g3
高速化手法の話でなければ、
C/C++のライブラリ総合スレ
http://peace.2ch.net/test/read.cgi/tech/1312906327/
2015/10/01(木) 18:32:50.19ID:X8BXmh6N
どもです
2015/10/03(土) 22:48:54.48ID:QjNm5BqA
>>109
嘘こけ。
アドレッシングモード一つとっても一意には対応していない。
127デフォルトの名無しさん
垢版 |
2015/10/23(金) 09:29:13.47ID:I0uni5nx
☆ 日本の核武装は早急に必須ですわ。☆
総務省の『憲法改正国民投票法』、でググってみてください。
日本国民の皆様方、2016年7月の『第24回 参議院選挙』で、日本人の悲願である
改憲の成就が決まります。皆様方、必ず投票に自ら足を運んでください。お願い致します。
128デフォルトの名無しさん
垢版 |
2015/11/18(水) 22:46:47.01ID:LC5LQUuD
>>116
いろいろとある
筆算方式だと桁数が倍になれば計算時間や回路規模が4倍になるけど、
3倍で済む方法もあるし、
2倍ちょっとで済む方法もある。
2015/11/23(月) 15:07:59.69ID:ZNmYnLez
>>127
「米国におしつけられた憲法」「日本人悲願の」といいつつ
米の意向による改憲だけどな
さすが米国の金で設立された米の利益代表団体自民党、国民を騙すのに躊躇ないぜ
2015/11/23(月) 17:35:17.53ID:OK+rBFmG
intelの乗算がスループットが1clock、レイテンシが3clock。
どうやったら3clockで計算が終わるん?
2015/11/23(月) 17:50:28.72ID:+Ddm9172
むしろどうやって乗算を3clockに分割しているのかが気になる
2015/11/24(火) 13:23:40.31ID:GksIIF6P
Load
Multiply
Store
2015/11/24(火) 15:12:53.74ID:iQw5GwIi
そこまでやるんかい
134デフォルトの名無しさん
垢版 |
2015/11/24(火) 19:32:05.64ID:4kZfiltG
テーブル参照で済ませてんのかな?
教えて、だんごの人!
135デフォルトの名無しさん
垢版 |
2015/11/24(火) 21:52:15.52ID:VivS0v9A
Load, Storeは別でしょ
乗算は
53bit x 53bit の整数乗算
106bitから53bitへの丸め
指数部分の計算
などが必要
この中で53bit x 53bitが一番時間がかかる

3つに分けるとしたらたとえば
1. 53bit x 20bit
2. 前の結果 + 53bit x 20bit
3. 前の結果 + 53bit x 13bit, 丸め, 指数計算
とか
136デフォルトの名無しさん
垢版 |
2015/11/24(火) 21:53:14.32ID:VivS0v9A
テーブルは割り算では使うけど、掛け算は使わないと思う
2015/11/25(水) 02:03:47.62ID:45GjjvYt
運転手が自動車のエンジンの内部構造を知る必要はない
車を動かすだけの最低限の知識さえあればいい
2015/11/25(水) 04:32:17.38ID:eJijZLoL
内部構造を知る事による運転技術の向上の可能性を否定出来ない。 (英訳せよ
2015/11/25(水) 08:50:00.26ID:s9hTLLjK
速いレーシングドライバーやライダーというものは、エンジンの内部構造だけではなく、
フレームの特性から、タイヤマネージメント、そしてメンタルをコントロールするための心理学まで詳しい。
2015/11/25(水) 11:35:26.47ID:Sra0FKsR
そりゃメカニックに指示を出さなきゃならないからな
2015/11/25(水) 16:07:40.71ID:9VrR2D9e
>>139
ペーパーテストでリアウイングを立てる効果を問われて
スポンサーロゴがよく見えるって答えたF1ドライバーが
ワールドチャンピオンになったぞ。
2015/11/25(水) 16:08:46.62ID:rHMnfdo0
これマジ?

65 名前:Socket774[sage] 投稿日:2015/11/22(日) 00:16:33.62 ID:0X8V8J8N [1/2]
>>16 の続き

調べたらいろいろとわかってきました。
非常に長い間(2ms程度でばらつきあり)書き換えていないレジスタを使用すると
レイテンシが1増加するようです

以下は私の予想
2msといえばWindowsのスレッドのタイムスライス値のオーダーなので、
XSAVE/XRSTORあたりにエラッタがあると予想
XRSTOR以降値を更新してないレジスタを使用するとレイテンシが1増えてしまう
通常2msも同じ値を保持することはマレなので特に大きな問題とはとらえられていない
が、Broadwellで直っているのでintelはこの問題を認識はしているのでしょう

----
発生することを確認した命令
vaddpd, vsubpd, vaddsubpd, vmulpd, fma***pd
vaddps, vsubps, vaddsubps, vmulps, fma***ps
(128bitでも256bitでも)

発生しないことを確認した命令 :
addpd, subpd, addsubpd, mulpd
addps, subps, addsubps, mulps
vandpd, vorpd, vpand, vpor

発生することを確認したプロセッサ : Haswell
発生しないことを確認したプロセッサ : SandyBridge, IvyBridge, Broadwell
2015/11/25(水) 20:25:16.25ID:pv6cEe5k
>>141
マジか!w
2015/11/25(水) 23:05:14.13ID:6PwtIsKT
頭のいい人はユーモアのセンスもあるってことか
2015/11/26(木) 00:37:39.38ID:4Zv1RZyd
ぶんぶ〜ん
2015/11/26(木) 11:16:56.37ID:anPORYOg
haswellはほんとエラッタが多くしかも不安定。
2015/11/26(木) 21:49:54.17ID:FNrtCodv
恥well
2015/11/27(金) 00:11:49.01ID:k1otT5p2
haswellってなーに
2015/11/27(金) 00:58:51.08ID:B/NYVAdM
電源回路の一部をCPUに乗っけてノイズ乗りまくり不安定になった馬鹿設計のCPU。
2015/11/27(金) 01:32:59.31ID:k1otT5p2
させん 理解出来ませんw これでも工学部卒orz
暫くROMります。
2015/11/29(日) 17:12:51.03ID:U49gaUJj
intel の主力 CPU製品の世代・バージョンを表すコード名だよ
セレロンとか Core7 とか商品名に隠れて見えにくくされてる
ちなみに現行最新は broadwell に替わってるらしい
2015/11/30(月) 05:38:13.03ID:McAnpNWD
最新は第6世代のSkylakeだよ
Broadwellは第5世代
2015/11/30(月) 06:10:56.08ID:VD56T+vD
みなさんHWもつおいんですね
2015/11/30(月) 13:05:08.68ID:KChypJW3
しかしインテルの話題ばかりですね
AMDがかわいそう
2015/11/30(月) 14:57:41.28ID:Ee9Jt/HC
単にAMD64が素晴らしすぎて、最適化の必要がないからです。
2015/12/01(火) 09:29:42.23ID:euK/mxZa
素晴らしいかどうかは兎も角、最適化の必要がないのは同意。
だってみかけねぇもんw
2015/12/01(火) 09:39:53.24ID:WgVnPdZx
haswell、amd64知らないっておまえらゆとりすぎだろ、おい。
and64っていわゆるx64命令セットのことだ。AMDのCPUのことじゃない。
2015/12/01(火) 13:04:48.47ID:1tGEKGVm
AMD64って3DNowのことだが(失笑)
2015/12/01(火) 13:06:30.50ID:xuYieJrT
そうかそうか、Intelは3DNowの後追いをしたのか
情けないな
2015/12/01(火) 13:22:36.19ID:BYRY3bxz
AMDはx86互換の64bitCPUを早い段階で提唱したのが最大の功績
MSもそれに乗っかった
Intelまかせだったら64bit環境のコンシューマへの普及が遅れていたか
満足なものにならなかった可能性がある
IntelはItaniumとかいう普通の人からしたらゴミな物を売りたかっただろうし
将来的にはIA-64に置き換えるつもりだったらしいが
未だに32bitアプリが溢れていることを考えると互換を切るのは良くなかった
一応激遅のx86エミュレーションは付いていたが
互換で食っていた会社の癖に互換を切り捨てるとは何事ぞ
161デフォルトの名無しさん
垢版 |
2015/12/01(火) 16:31:29.60ID:xuYieJrT
互換切っちゃいけねえのは当然かもしんないけど
未だに4bitだか8bitのCPUに由来する制限や設計の歪みを引き継ぎ続けるのもなぁ……
カウンタレジスタとしてはRCXしか使えませんとかあまりにもウンコすぎる
2015/12/01(火) 17:19:11.09ID:yW8K+bhB
そんなん先読みやら最適化の都合じゃないの?

それに互換ぶっ壊していいのなら ARM にしちゃいなよ
2015/12/01(火) 20:49:07.03ID:DqfiEd0O
64bit化の時が、唯一のx86系命令のエンコードを変えるチャンスだった
汎用レジスタは16個に増えたけど、それ以外はしょぼいまま継ぎ足し継ぎ足しのエンコード
命令が複雑すぎるし効率的じゃないし汎用整数命令が2オペランドのままだし

汎用レジスタ数増大
2SRC, 1DEST の非破壊演算
3オペランドの自由論理演算
アドレス計算用の簡易で高速な積和命令追加 (いまだLEAが重要命令って異常だろ)
乗算除算命令のレジスタ縛り削除
フラグ未使用の演算増加 or フラグの多重化

一応ちまちまは増えてるけどそんなんじゃダメ
一気に増やさないと使われないから意味がない
2015/12/01(火) 21:11:09.22ID:lfUAYGEe
一切のしがらみを解き放って、ゼロベースで命令セットを設計したら、
どれくらいの性能を叩きだせるんだろうか?
2015/12/01(火) 21:16:38.38ID:woh9g3Fk
>>163の発想で出来上がったのがItanium
2015/12/01(火) 21:23:08.46ID:DqfiEd0O
メニーコア系だな
GPUとCPUとDSPの良いところ取り
GPUとCPUは区別がなくなる
デコーダーやスケジューラーは極力小さく、
演算器と入出力に大きく回路を割く
2015/12/01(火) 21:26:16.98ID:DqfiEd0O
Itaniumの失敗は、
x86を軽視した
コンパイル時最適化がCPUの進化に合わなかった
こんな感じか?
2015/12/01(火) 21:27:03.93ID:DqfiEd0O
どっちかというとマーケティング的要因の方が大きかったかと
2015/12/01(火) 21:28:26.40ID:woh9g3Fk
並列化は並列化できないクリティカルパスで行き詰る
パンの製造ラインをいくら増やそうが1つのパンの一次発酵と二次発酵を同時にできないのと同じ。
2015/12/01(火) 21:39:52.86ID:DqfiEd0O
その為に非対称メニーコアとかいう考えもあるけど...
今ある重い処理の多くは並列化可能でしょ
2015/12/01(火) 21:44:54.96ID:DqfiEd0O
で団子の案は?
2015/12/01(火) 21:47:11.88ID:WgVnPdZx
skylakeでipc伸びたで
2015/12/01(火) 21:47:21.62ID:woh9g3Fk
決して順序が決まってる処理を同時並列化することはできない
2015/12/01(火) 21:48:08.42ID:lfUAYGEe
>>166
Cellやララビの方向性かな?
いずれにせよ、プログラマがどこまでしんどい重いするかも重要やね。
2015/12/01(火) 21:49:36.60ID:WgVnPdZx
条件分岐あるからクリティカルパスも変動するから、消費電力を対価に投棄実行できなくもないよ。
2015/12/01(火) 22:00:04.59ID:DqfiEd0O
>>172
超微妙にな
VADDPDはなぜかレイテンシーが増えたけど
2015/12/01(火) 22:01:37.59ID:DqfiEd0O
>>173
順序が決まっている処理は順序が決まっている
あたりまえじゃん
2015/12/01(火) 22:21:53.65ID:woh9g3Fk
ハードの設計の努力を知らない下衆が偉そうに語ることは何一つないのよ
与えられたものをうまく使う方法だけ考えればいい
2015/12/01(火) 22:22:38.64ID:M545w8lo
クリティカルパスってそんな問題になるかなぁ。
コア数が1万とかになったら大問題かもしれんが、
コア数4とかじゃあんまり問題に成らなくね。
2015/12/01(火) 22:27:59.76ID:BYRY3bxz
最近の事情は良く知らないんだけど
IntelのCPUでGPU内臓じゃないのってあるの?
サーバー用じゃなく
2015/12/01(火) 22:30:35.15ID:woh9g3Fk
>>180
http://ark.intel.com/ja/compare/82930,82931,82932
2015/12/01(火) 22:57:39.27ID:BYRY3bxz
ちょっと一般向けとは言いがたいね
しかもHaswellだし
個人的にGPUはグラボ刺すからCPUに内蔵してほしくないんだよなぁ
GPU無しで、その分値段を落としたモデルがほしい
2015/12/01(火) 23:21:24.20ID:BYRY3bxz
ちなみに今どきのGPU内臓CPUの、CPU対GPUのダイ比ってどれぐらいなんだろう
http://pc.watch.impress.co.jp/img/pcw/docs/726/778/html/05.jpg.html
を見る限り左のほうにあるの、全部GPU関係でしょ
必要ないんだけどなぁ
2015/12/02(水) 00:01:13.31ID:lLZXeX9n
>>178
一番偉そうな下衆がなんか書いてるwww
2015/12/02(水) 00:34:39.84ID:0XpBrEKR
GPUユニットは並列演算に利用できるのにそれが必要ない用途ねぇ。
Xeonでいいはずなのにキャッシュもメモリ帯域もコア数も必要ないってことですよねぇ。
結局、内臓GPU必要ないってことはゲーム用途でしょうねぇ。
2015/12/02(水) 04:57:08.43ID:rypJABRF
>>179
クリティカルパスってコア数が少ない方がループ回数が増えるから影響が大きくなると思うけどな
クリティカルセクションと勘違いしてない?

この話の流れでクリティカルパスがでてくるのがおかしいんだよ
アウトオブオーダにしろ、VLIWやメイニーコアにしろ、クリティカルパスの問題は一緒
違いがあるのは並列化の粒度でしょ
小さい粒度のはOoO、大きなのはメイニーコアが適していて、静的な並列化は中途半端だったということ
2015/12/02(水) 06:15:06.45ID:LTVoUgjb
ディスパッチ&リダクションのコストを軽視してるな
2015/12/02(水) 06:21:53.98ID:LTVoUgjb
同じコア性能なら多いほうが多い、それは当たり前だ
しかし低性能なコアを複数並べれば高機能なコアより常に速いというのは幻想

KNCのボトルネックがまさにイニシャル処理で、KNC側でやると遅いから大体ホスト側にやらせることになる
2015/12/02(水) 12:21:50.26ID:rypJABRF
また的外れなこと言ってる
団子って周りから人の話聞いてないって言われないか?

OoOはCPU内でディスパッチやリダクションしてる為に熱的に限界を迎えて
性能があげられなくなったからメイニーコアやGPUの方向性が出てきたんでしょ
用途によって向き不向きがあるから棲み分けするようになって、今はその匙加減を
調整してる状況なんだろうな
CELLみたいにバランスの悪いのは結局は残れないってことなんだろうね
2015/12/02(水) 12:27:00.90ID:rypJABRF
リダクションは変だったな、リタイアメントだわ
2015/12/02(水) 14:17:02.16ID:aHX8DqFu
GPUユニットより柔軟性の高いSIMD演算器を高速なローカルストレージと一緒にCPUに内蔵させたい
GPGPU無駄多すぎ
2015/12/02(水) 15:49:04.71ID:tY3PsYOb
個人的にはSIMDが1024-wayとかになったら面白いんだが
サーバー用としてはメニーコアの方が相性が良いので
そういう流れにはならないだろうが
2015/12/02(水) 19:05:39.75ID:lLZXeX9n
ベクトルコンピューターがそんな感じだった
ベクトル化出来ない処理は急激に遅くなるから、
今はコア数とバランス良くって方向になってる

AVXが8way
AVX512が16way
Geforceが32way
Radeonが64way
最高でも64wayあたりに落ち着くのでは?
2015/12/02(水) 19:13:57.66ID:lSgAR6hy
>>191
SIMD、柔軟性高いかなぁ?
データの並びとか気を付けないといけないし、プレディケーションもプログラマが書かないとできない。
非アライメントのペナルティが軽減されたのは有難いけど、
せめてプレディケーションくらいはGPUのようにHWでサポートしてほしいなぁ。
2015/12/02(水) 20:17:39.20ID:rypJABRF
コストの掛かるOoOでもSIMDにすれば相対的にコストが下がるというのもあるし
マスク演算ができるようになればプリディケードとブランチをプログラマが選べるようになる
インテルが目指してる方向は手堅いものだと思うな
2015/12/02(水) 20:53:25.97ID:73uUfhWJ
早く1024bit SIMD実装してほしいぜ。
囲碁の処理が速くなりそう。
碁盤は19 x 19だから512bitだと微妙なんだよな。
2015/12/02(水) 21:01:41.94ID:OrMGyZIC
ハードウェアベクタをあまり長くしても大半のアプリケーションで無駄が出るだけだろ。
GPUのやりかたが落としどころとしてベストだと思うがな。
2015/12/02(水) 21:24:30.33ID:N4pdKraK
ここはC++の高速手法でよろしいのですよね・・・
2015/12/02(水) 21:29:46.57ID:lSgAR6hy
いや、C++に限らないんじゃない?
スレタイの【C++】や【SSE】ってのは主な手段であって、
GPUやFPGAだって立派な高速化手段だ。
200デフォルトの名無しさん
垢版 |
2015/12/02(水) 21:52:10.30ID:lLZXeX9n
>>197
GPUで速くなる処理はベクタ長アップでも確実に速くなるよ
2015/12/02(水) 22:03:19.40ID:N4pdKraK
失礼しました かなり低レベルのスレだったのですね。
2015/12/02(水) 22:14:48.90ID:ky2179yM
(技術力が)
2015/12/02(水) 22:20:01.73ID:ky2179yM
>>189-190
みたいな頓珍漢なこというお前の言うことははなから聞く気はない
2015/12/02(水) 22:32:44.25ID:lSgAR6hy
>>201
上位の高速化も該当するから是非話題振ってね。
JITなんかもOK!
2015/12/02(水) 23:16:28.02ID:rypJABRF
>>203
命令レベルの並列化にしろマルチプロセッサでの並列化にしろ
クリティカルパスじゃない部分を見つけて並列化してるという点では一緒で
並列化のアプローチの仕方が違ってるだけなのは理解してるんでしょ?
命令レベルの並列化であるOoOの方が直接的にクリティカルパスの影響を受けて
並列化が並列化が制限されるようになったからハイパースレッディングが投入されたのに
メイニーコアでクリティカルパスが問題になるって言い方は引っかかるんだよ
206デフォルトの名無しさん
垢版 |
2015/12/03(木) 05:09:10.56ID:Yx1WEMuy
【 オンラインTCGエディター 】 >>1

デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。

例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
バトスピ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、ガンダム・ウォー、ライブオン、ディメンション・ゼロ、カードヒーロー、シャーマン・キングなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書いて。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストして。
WEB通信での対戦は、個vs個、多数乱戦、チームvsチーム、個vsチームを可能な仕様とする方針。

設計思想は 《 RPGツクール 》 が良いかな?  他に、優れたエディター有ったら挙げてみて。

個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。
↓
エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。
↓
遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
なるべく前述3つで可能な再現は全て実装させる方向を目指す。 まぁ努力する・・・
バトスピ、ヴァンガ、バディ、デュエマなど発売済みゲームソフトが存在してるケースはベンダーに研究させる。
↓
各社TCGを再現するテストプレイ ⇒ 更に改良や修正。
↓
機能制限した下位版を5万円以上で発売 + デュエリ−グ用に改造した上位版でサーバー稼動=営業開始。
↑
下位版の改造および商用利用には、別途で当社との契約が必要。

さ〜て、製作ベンダー見つけよっと!ww(クス
http://wc2014.2ch.net/test/read.cgi/entrance2/1449039272/-18
2015/12/03(木) 19:46:04.23ID:uwlB9z0+
メイニーってどこの田舎訛りだよ
2015/12/03(木) 19:53:16.18ID:uwlB9z0+
さすがに[?]をエイと発音するのは苦しいぞ
実はmainie coreという架空世界のCPUの話をしているという可能性もあるけどな

学の無い語るに値しない人間なんだろう
2015/12/04(金) 00:10:19.06ID:/PT96VDb
>>207
そうそう、気になって仕方なかったんだよ。
2015/12/04(金) 00:26:47.97ID:lgJQm9VI
世界で唯一の稀有な存在かもしれねえぜ…
211デフォルトの名無しさん
垢版 |
2015/12/04(金) 00:59:55.26ID:vTE6A8P6
煽りじゃなくてぐうの音もでないような真実を突きつけてこそじゃねえかな
2015/12/04(金) 09:21:04.02ID:2jROh0Ef
メイニーコアってなんぞw
2015/12/04(金) 09:31:38.80ID:4C4dhHoE
逝ってるさん マンセー
2015/12/04(金) 10:37:56.49ID:yGPPr8Zs
母国語英語、第二母国語C++と日本語な俺からするとMulti-をマルチって言うのも違和感あるけどな
2015/12/04(金) 18:14:24.01ID:3WaVS3Ju
やっぱりこの板の住民は英語でレスする方が楽な感じですか?
苦手過ぎる…
2015/12/04(金) 19:14:07.09ID:yphLFvrP
どこに英語のレスがあるんだ
2015/12/04(金) 22:00:51.54ID:Wf0OQ3ZI
だからメイニーコアってなんだよw
2015/12/04(金) 22:03:30.55ID:YEfoDPnk
メニイコアならよかったのにな
219デフォルトの名無しさん
垢版 |
2016/05/01(日) 15:00:17.83ID:tKi6j9CT
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています

言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?

Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw


The Covenant Project
概要

Covenantは、純粋P2Pのファイル共有ソフトです

目的

インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します

特徴

Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)

接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
g
2016/09/28(水) 13:29:19.39ID:8+L+QwLt
書いて
2016/11/10(木) 01:32:20.10ID:OAKAAmWh
書いて
222デフォルトの名無しさん
垢版 |
2017/01/21(土) 13:23:31.22ID:dThE4/1u
なんかない?
2017/05/07(日) 23:05:11.98ID:8v4hzv7f
1次キャッシュに収まるスレッドを沢山作りたいとき、SSEやらAVX
のレジスタをメモリ代わりに使うのとメモリ直でアクセスするのとどっちが
キャッシュ乱さずに動くかな。
3次キャッシュは使いたくないし、2次キャッシュもスレッド切り替えだけに
消費させたいし。
2017/05/08(月) 00:55:10.37ID:BlZJ1Ed5
>>223
理論的にはレジスタを使うほうが乱さないだろうけど、
コンパイラやプロセッサがどうするかは動かしてみないと分からないだろうね。
2017/08/09(水) 20:46:58.02ID:+5xcelsT
レジスタに収まるならレジスタの方が良いに決まってる
2017/08/09(水) 20:56:25.64ID:+5xcelsT
1次キャッシュに収まるなら他のキャッシュなんて気にする必要は無いと思うんだが
普通のOSで普通のコードを動かすなら、スレッド切り替えによるオーバーヘッドなんて無視できるレベルだし

そんなことを心配するよりも、肝心なコードを気にしようよ
いろんなテクニックを知ってるからコードをアップしてくれれば、小さいループならお役にたてるかも知れない
2017/08/09(水) 20:57:28.26ID:+5xcelsT
ロングパスだったorz
2017/08/16(水) 16:38:15.04ID:caDabzDZ
最近ニコニコ動画に上がってる経済シミュ、生態シミュ動画の人の高速化手法がすごい
2017/08/17(木) 03:34:48.76ID:6E9r52D/
どんな高速化手法なんだい?
2017/09/13(水) 01:32:53.89ID:8Q2gNSiE
std::copyってsimd化などの最適化って既にされてるのかな?
sse_copy()とか自作したとして
効果は期待出来る?
2017/09/13(水) 02:02:50.51ID:S8v0D06m
sse_copyとやらはmemcpy、memmoveと何が違うの?
2017/09/13(水) 02:20:34.07ID:TvE1YB9H
名前的に、SSEの128bitレジスタを使ってのコピーだろう

memcpyとmemmoveの違いはぐぐればすぐわかる
2017/09/13(水) 02:25:23.48ID:S8v0D06m
じゃなくて、自作しようとしているSSEでコピーするであろう「sse_copy」と
標準で用意されている「memcpy、memmove」←両方合わせて、とで
何が違うの?という話
当たり前だがmemcpyはCPUがSIMDに対応していれば使うし
カリカリにチューニングしてあるわけだが
sse_copyなど要るの?
2017/09/13(水) 02:48:41.88ID:8Q2gNSiE
memcpyはC言語の関数だったか
存在を忘れてた
こいつは最適化入ってるのね
これ使えば良さそうだ
そうする、どうもです
2017/09/13(水) 05:53:18.22ID:akrdcF0B
条件にもよるがmemcpyあたりはコンパイラ自身がインライン展開したりする
2017/09/13(水) 11:25:41.68ID:RHwHks/k
std::copy使っておけばPODならmemcpyかmemmove使うんじゃないの
VS2017のやつはmemmove使ってるな
237デフォルトの名無しさん
垢版 |
2017/09/13(水) 15:04:16.35ID:xDYBj2Vm
copyrect
2017/09/13(水) 18:53:59.90ID:GrxKOJ+a
謎の速度低下で悩んでいたが、キャッシュレイアウトって重要だな。
AVX512で一部分だけ値更新したい時、16バイト読み込んでその位置に64バイト書き戻すようなケース。
そのまま16バイト読み込みで実装すると、読み込み時に16バイト分しかキャッシュがないので、書き込む時に64バイトに拡張というか再配置されて遅くなる。
最初から64バイトで読み出すと、サイズが変化しないので遅くならない。
ついつい、読み出し量が少ない方が速いに違いないと思い込んでしまう罠。
2017/09/13(水) 20:49:54.25ID:zEWQVEHs
パーシャルライトって奴だな
キャッシュにも有効なのか

昔のPenProの頃の8/16bitレジスタへの書き込み後の32bit読み出しとか
HDDが2T超える頃の4Kセクタのパーティションでの位置ずれとか
信じられないほど遅くなる要因になるもんな
2017/09/13(水) 21:31:13.89ID:y458W+jL
え、memcpy()とかstd::copy()ってSIMD使うん??
vectorのコピー遅いから困ってて、カリカリとSIMDで書こうかと思ってたんやけど、手間省けるわ。
2017/09/13(水) 21:45:57.88ID:FrHUdEqr
コピーが遅いから困っててと言うけれど
どうやって遅いと結論づけたのですか?
本来なら16ms完了するはずなのに29msもかかってしまっている!
とかわかるんですか?
2017/09/13(水) 21:55:49.49ID:y458W+jL
ああ、いえいえ、言い方が悪かったですが、
処理時間に占めるコピーの割合が増えてきたので、高速化したいなぁ、と思っただけです。
2017/09/14(木) 20:07:50.27ID:l0W4QyGB
rep movsbが糞速い
https://srad.jp/~miyuri/journal/569822/
>>REP MOVSはマイクロコードで実装されていて、最初にコピーサイズを見て適するコピーアルゴリズムを決めるセットアップ処理を行なってから
>>実際のコピー処理を始めるようになっている。そのため小さいサイズのコピーではセットアップ時間のオーバーヘッドが無視できないが
>>コピーサイズ(適度に大きいサイズ)とアラインメントの要件とプロセッサの世代の条件を満たすとそこそこの性能が出る。
>
>>プロセッサの世代によって展開されるマイクロプログラムが変わり最適化の度合いも変わってくると。
>>第1世代Core i以降のプロセッサのREP MOVSのマイクロコードは比較的速い。
デコード済みの命令をキャッシュ出来るようになったから、マイクロコード展開命令でも最適化が行われるようになってるみたいだよ。
2017/09/14(木) 21:12:13.74ID:AvPBQe63
メモリのレイテンシ、スループットやキャッシュサイズに依存するんだから
ブロック転送命令の最適化は無駄な努力だとインテルは思ってんだろう。
2017/09/14(木) 21:41:42.21ID:vjSz//mI
Visual Studio 2017 で
memcpyを調べてみた

x86は rep movs
x64は vmovups 128bit 2パラ16アンロール

オプションでAVX2命令を使うようにしてもかわらず

vmovaps 256bit/512bitの方が速いから
頻繁に使うなら自作した方が良い
2017/09/14(木) 23:27:05.22ID:l0W4QyGB
>>238
キャッシュ可な領域はキャッシュライン単位でDRAMの読み書きが行われるはずだから
キャッシュは関係ないでしょ。
2017/09/15(金) 00:42:48.43ID:SH+3EPbt
>>246
アライメントのほうだったかも。
境界跨いで更新する時、あらかじめ更新サイズで読み出しておけば、全領域使用可能状態になるが、読み出し半分だと残り分キャッシュ要求発生して遅くなると。
2017/09/16(土) 02:31:32.38ID:Y9EbWhOv
>>247
一定のストライドで読み込んでいれば自動プリフェッチで早めにキャッシュに取り込まれる可能性もあるけど、
DRAMの帯域を圧迫しないようにページ境界をまたいでは機能しないようになってるはずだったので、
AVX512のベクタ長だと、何サイクルか先のループで使うデータをプリフェッチで要求した方がいいかも。
2017/09/16(土) 11:37:46.61ID:7TcGYGsR
>>248
ありがとう。すでに別件でPrefetchもやってみてるけど、AVX512だとかなり効果があった。
2017/09/16(土) 17:07:26.32ID:EqmVZpne
>>249
一時は自動プリフェッチの性能が向上してあまりprefetchの意味がない状態が続いていたけど、
AVX512ともなると1ページ分のデータをループ64回で消費しちゃうんだよな…
DRAMのCASレイテンシをCPUクロックで換算すると結構長いからね。
2017/09/17(日) 15:21:48.39ID:ZiTBR472
え?AVX512は手書きprefetchのほうが性能出る?
これまではハードウェアプリフェッチが超優秀で、手書きprefetchはむしろオーバーヘッドになって遅くなる感じだったんだけど。
2017/12/10(日) 20:33:52.61ID:M5Qtf5Qu
prefetchはハードウェアにまかせて手書きでclflush入れるのが一番いい感じなんだけど。こんなケースは少数派なのかな。
2018/02/01(木) 08:35:26.88ID:VuVCHSR9
xeonでavx命令使うと過熱防止のため1ms間、動作クロック下げるなんて聞いてないよ〜(>∀<)
2018/02/02(金) 00:44:37.85ID:cppyUN4V
>>253
本末転倒やなw
2018/02/16(金) 06:35:40.61ID:W1XJdyx1
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
256デフォルトの名無しさん
垢版 |
2018/05/23(水) 20:32:42.01ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

YF4RO
2018/06/04(月) 11:52:09.21ID:DgroLQ0O
過熱してなくても1ms間、強制的にクロック下げるん?
2018/06/09(土) 11:11:22.69ID:wHLdkuYn
>>257、そうみたいなんですよ

https://pc.watch.impress.co.jp/img/pcw/docs/665/641/html/14.png.html
> AVX命令が実行されるときに、CPUはAVXベースで定義されている
> クロック周波数に一時的に下がって実行し、実行終了後元のベースクロックに戻る

> AVX命令の実行完了後1ms程度で通常(非AVX)動作モードに復帰
2018/06/09(土) 11:42:37.36ID:06Yvpy2o
1msってペナルティ、デカすぎやろ
2018/06/09(土) 12:18:26.60ID:6JxGr/md
AVXが有効な処理なら微妙にクロックが落ちようがどうでもいい
2018/06/09(土) 12:21:09.00ID:6JxGr/md
クロックが高いのが目的じゃなくて
処理が速いのが目的

その辺がよくわかってないアホがいるみたい
2018/06/10(日) 12:04:49.97ID:2twu5/4V
なんか知らんがPCUの動作速度だろ。
2018/06/10(日) 12:47:49.30ID:/vizDNJB
CPU?
2018/06/10(日) 13:00:30.59ID:Ce6PWnpg
Programmable Calculation Unit (嘘)
2018/06/10(日) 13:18:51.18ID:/vizDNJB
どうせならUも工夫しろよ
2018/06/13(水) 06:44:44.44ID:sIzYe/Rc
XEON、AVX-512だとさらにクロック下がるぞ
コア数多いとさらにクロック低下するでw

Platinum 8180M 28C 2.5GHz -> 2.1GHz(AVX2) -> 1.7GHz(AVX-512)
Platinum 8153 16C 2.0GHz -> 1.6GHz(AVX2) -> 1.2GHz(AVX-512)
2018/06/13(水) 07:54:13.98ID:czoTP8TT
さすがに下がり過ぎw
268デフォルトの名無しさん
垢版 |
2018/07/04(水) 22:24:56.45ID:gFgZc5FG
HHG
2018/07/05(木) 16:49:03.96ID:AeL6VB/V
HHG
2018/07/12(木) 17:41:30.02ID:JTIrQoQb
そもそも4倍の量が同時に計算できるわけだから
クロックが半分になっても元は取れる
2018/07/12(木) 18:11:27.11ID:KB59nVpm
だね
2018/07/12(木) 22:27:22.56ID:e1DCOlOZ
同じクロックで2倍の効率との違いは消費電力?
2018/07/13(金) 00:03:25.32ID:n6X2CtBj
クロックが実際は半分にならないから
メリットは高速化
2018/10/24(水) 21:06:49.85ID:mVtKb6jM
これsum1()とsum2()でだいぶスピード違うんだが、みんな知ってた?
#include<vector>
#include<iostream>
using namespace std;
class Tree{
public:
long long i;
vector<Tree> v;
Tree(){i=0;}
long long sum1(){
long long x=i;
for(vector<Tree>::iterator p=v.begin();p!=v.end();++p)x+=p->sum1();
return x;}
long long sum2(){
long long x=i;
for(auto p:v)x+=p.sum2();
return x;}
};
void big_tree(Tree *t,int d){
t->i=d;
if(d<=0)return;
t->v.push_back(Tree());
t->v.push_back(Tree());
big_tree(&(t->v[0]),d-1);
big_tree(&(t->v[1]),d-1);}
int main(){
Tree t;
big_tree(&t,20);
cout<<t.sum1()<<endl;
cout<<t.sum2()<<endl;
}
2018/10/24(水) 22:27:31.88ID:2t/OeFdE
そりゃ、やってることが違うんだから
同じにしたけりゃ sum2 で for (auto& p: v) にしてみ
2018/10/24(水) 22:49:24.04ID:mVtKb6jM
うお、autoってこんな書き方も出来るのかよw
勉強になりました。
277デフォルトの名無しさん
垢版 |
2018/10/25(木) 11:47:46.18ID:5Cy/pQlU
結果も違うんじゃね
ちゃんと中身観たか
2018/10/25(木) 17:06:36.77ID:+VSq1LXv
結果は同じだろ? 鬼のように発生するコピーのためにメモリ不足で死なない限りは。
2018/10/25(木) 17:51:37.93ID:PGxBvFeb
C++は高速化に向かいないといういい見本だ。
2018/10/25(木) 19:41:56.48ID:u+frCiwH
C++は、書いた通りに実行されるだけ。
高速な処理が必要なら、そう実行されるように実装しないと。
2018/10/25(木) 21:01:08.67ID:PGxBvFeb
まるでC++コンパイラは最適化しないとかデタラメな言い分けだな。
282デフォルトの名無しさん
垢版 |
2018/10/26(金) 16:39:17.96ID:8hqqerJ0
vectorとか激しくコピーしすぎ
2018/10/26(金) 16:49:29.10ID:hXNu7AZl
何のためにコピーしてるん? 使い方間違ってんじゃね?
2018/10/27(土) 19:00:07.11ID:hLMgBGRd
reserveせずのpush_backしまくるバカのことじゃね?
2019/11/09(土) 12:43:46.37ID:nG1HKTzx
push_backしまくってもそれほどパフォーマンスは悪化しないように出来てるはずだが
コピーしまくりっていうんだから関数で値渡ししてるとかじゃないか?

いずれにしろC++自体の問題ではない
2019/11/09(土) 12:46:29.28ID:nG1HKTzx
データの並び順やアルゴリズム、...
この辺がパフォーマンスに大きな影響を与える

コンパイラの最適化なんぞ知れてる
その辺を最適化したければガシガシアセンブラだが
その前にいくらでもやることがあるのが普通
2019/11/09(土) 12:48:19.04ID:nG1HKTzx
メインメモリが相対的に遅くなってきてるので
データの並びは非常に重要
大きなデータはディスクアクセスのような感覚で扱わないとダメ
2019/11/09(土) 12:49:37.15ID:nG1HKTzx
ちゃんとキャッシュサイズや階層を意識する
2019/11/09(土) 21:44:34.74ID:GgGliPcL
突っ込みどころもあるが1年前のレスに真面目に返答してるおまえを評価する。
290デフォルトの名無しさん
垢版 |
2019/11/10(日) 12:14:45.63ID:7BQWwZ6D
x おまえ
o おまえら

って書こうとしたが
同じ人だった orz
2019/11/10(日) 18:59:30.87ID:EMkBhp99
御評価、有難う御座います
2019/11/11(月) 20:31:51.81ID:mj2unNmc
プログラムを高速化する話
https://www.slideshare.net/KMC_JP/ss-45855264

コンパイラでベクトル化されやすいコードの書き方
https://jp.xlsoft.com/documents/intel/compiler/17/for_17_win_lin/GUID-D284C1EE-BFA4-4EA3-BB67-4A3E5D50199F.html

Intel Intrinsics Guide
https://software.intel.com/sites/landingpage/IntrinsicsGuide/

メモリアクセスが相対的に遅くなってるってことは、人間が組み込み関数使って最適化すれば
別にアセンブラなんて使わなくてもいいってこと
それに、64bitではインラインアセンブラも使えないコンパイラがあるし、関数呼び出しや例外処理の
書き方も変わってしまっているので移植性が低いよ
2019/11/11(月) 20:40:17.77ID:a7L5ps6d
組み込み関数でSIMD命令駆使すれば、しっかり高速化されてキモティー!
2019/11/12(火) 13:18:01.61ID:TlWEsNqa
>>292
アセンブラを使わなくても速度チューニングネタはたくさんあるが
当然最後の手段としてはアセンブラは有効

小さいループに処理が集中してるような処理は
特に効果的

下手くそがアセンブラに手を出すと逆に遅くなったりもするけど
2019/11/12(火) 23:06:40.80ID:AwVvRDmU
>>292
急にどうしたw
レジスタ割り当て面倒くさいから、Intrinsics使うの普通だぞ
2019/11/13(水) 00:56:22.92ID:AZXdI1I6
>>295
>>286が
>コンパイラの最適化なんぞ知れてる
>その辺を最適化したければガシガシアセンブラだが
とか書いてたから
この人10年くらい時間が止まってるよね
64bitと32bitじゃレジスタの数も違うし、SIMDの新命令に対応させるたびに
レジスタ割り付けが全く変わってしまうこともあるのにアセンブラって…
AVXなら3オペランドも使えるから、コンパイラに任せてもコードの質は低下しにくくなってるはず
2019/11/13(水) 10:22:08.98ID:EqcpRCSG
費用対効果を考えればIntrinsicsでも良いけど

究極の最適化はアセンブラしか無い
IACAを使ったり実測したりしながらパズルする

処理が非常に単純で速度の求められる小規模DSPなんかでも
いまだにそういう開発をする
2019/11/13(水) 11:21:40.17ID:J9H9jmTJ
FPGAで専用回路組んだ方が手っ取り早い
2019/11/13(水) 12:35:34.29ID:1AwZzcZD
>>297
IACA=Intel Architecture Code Analyzer
ですよね。
2019/11/13(水) 13:05:36.17ID:EqcpRCSG
SIMDを覚えたての初心者はこんなコードを書きやすい
典型的な糞コード

ループ {
sum = _mm_add_ps(sum, data[i]);
}

>>299
そうです
2019/11/13(水) 13:15:07.61ID:EqcpRCSG
>>298
CPU, GPU, FPGA
それぞれ得意分野が違うから
2019/11/13(水) 13:21:58.53ID:FP2h74Sh
GPUユニットはCPUに乗っけたのだから後はFPGAも乗っけるだけ。
アルテラは既に買収済みだしな。
2019/11/13(水) 15:28:17.20ID:EqcpRCSG
FPGAに夢見すぎじゃね?
2019/11/13(水) 16:48:11.25ID:FP2h74Sh
スパコン分野じゃ固定の計算式はFPGAが一番効率的。そういう意味で地球シミュレータや京はゴミ。
スパコンが必要な分野でCPUのような汎用性などいらない。
2019/11/13(水) 17:02:40.99ID:EqcpRCSG
今度はスパコンが出て来たか
関わったこともないだろうに

スーパーコンピューターこそ汎用性が必要
ベクトルコンピューターが消えたのも
より汎用性を重視するから

スーパーコンピューターの世界でFPGAが求められてるなら
当然スーパーFPGAが流行ってないと辻褄が合わないわけだけど
流行ってないね
2019/11/13(水) 17:18:55.90ID:FP2h74Sh
何を言ってるからよく分からないなぁ。
特定の式を大量に速く計算したいという要望に対してなんで汎用性が出てくるの?
汎用性スパコンが1億なら同じ性能で1000万で達成できるんだよ。
しかも汎用性のために可用性が落ちるとか話にならないよ。京見れば分かるでしょ。
307デフォルトの名無しさん
垢版 |
2019/11/13(水) 17:37:57.46ID:OceCV+VL
自分専用ならTSSにする必要もないしな
2019/11/13(水) 18:11:35.42ID:nB9KorLn
FPGAとかスーパーコンピューターとか自分専用とか
具体的な処理を何も語ってないのによくもまあ勝手に前提を作るよなあ

ここはソフトの最適化のスレなんだけど
2019/11/13(水) 18:13:46.44ID:nB9KorLn
FPGAなんかで妥協しないでASICでも作れば良いよ
2019/11/13(水) 18:26:47.86ID:FP2h74Sh
FPGAだってプログラムでコーディングするんだが・・・。勝手な前提作ってるのはおまえじゃん。
というかSSEでの高速化がOKなら、GPGPU、FPGAもOKだろう。
2019/11/13(水) 19:03:44.22ID:RzCRvdkP
スレタイ
他のスレへどうぞ
2019/11/13(水) 19:23:44.45ID:FP2h74Sh
1年もレスが無かった過疎スレになんでこんな必死な自治厨がいるのだろうw
前スレも10年かけて1スレ消費したんだぞw

おまえは何者だw
2019/11/13(水) 19:25:42.10ID:Fqkv69gY
突然カテ違いのFPGAなんか布教し始めるから
2019/11/13(水) 19:49:30.87ID:FP2h74Sh
ID:EqcpRCSG = >>311 = >>313 か?

こんな過疎スレで布教ってw マジおまえここの住人じゃないんだな。
2019/11/13(水) 19:51:20.51ID:AZXdI1I6
>>312
前に64bitで絶対アドレス使えって書いて突っ込み受けたらファビョってたのいたでしょ
あれと同一人物っぽいんだよなあ
>究極の最適化はアセンブラしか無い
とか書くところとか

午後のこ〜だの開発者たちが動画コーデックの開発しなかったのだって、
MMXは除外しても、SSE2、SSE3、SSSE3、SSE4、SSE4.1、AVX、AVX2、AVX512に加えて、
64bitでは一気に種類が2倍と、次々と登場する新命令ごとに最速のルーチン用意していく手間と、
コードが異なるために特定のCPUでしか発現しないバグがでるリスクが増すこと考えたら、
最速に拘るのが現実的ではなくなったんだよ
彼らとしては妥協したコード書く気はなかっただろうし、興味が失せるのも仕方ないのかもね

AVISynthもインラインアセンブラ使ったプラグインだらけで64bit化に対応できずに放置されてたのが
相当あったけど、自分も64bit化やった経験からも、今更初心者にアセンブラ使えなんて教えんなと言いたい
2019/11/13(水) 20:53:55.20ID:Fqkv69gY
初心者ならIntrinsicsなんか使わないで素直に汎用性のあるC++で書くかライブラリを使えばいいよ

ここは高速化手法スレだから高速なコードであることは重要
Intrinsicsよりアセンブラの方が高速に書けるのは自明なのでアセンブラの話題は当然出てくる
2019/11/13(水) 21:08:18.46ID:ZJ6Q5c4u
アセンブラ狂信者はお前だけだよ
2019/11/13(水) 21:12:18.74ID:Fqkv69gY
Intrinsicsで32bit/64bitの共通化は出来ても
新命令がでたらどうせ作り直しだよ

新命令に最適化しないならそのままでいいよ
「新命令対応」て謳うのが目的じゃなければ

SSEからAVXの移植もレーン縛りで苦労しただろ?
単純に置き換えなんて出来ない
128bitのまま単に3オペとレジスタ数だけなら簡単だけど

AVX512も同じ
マスクレジスタや新命令を使うなら書き直し
2019/11/13(水) 21:13:39.13ID:Fqkv69gY
アセンブラ狂信者じゃない
Intrinsicsも使う

極限な最適化にはアセンブラが必要ってだけ
まあ当然だ
2019/11/13(水) 21:19:04.07ID:Fqkv69gY
どうせ今後は32bit向けの最適化なんかやらんだろ
だとすると手間の差はレジスタ管理くらい
2019/11/13(水) 21:42:54.67ID:AZXdI1I6
>>320
>だとすると手間の差はレジスタ管理くらい
こんなこと書くようだと大したコードは書けないな
レジスタ割り付けの妙味と面倒さを知らないのなら、別に組み込み関数で書いても構わないだろ
2019/11/13(水) 22:04:42.12ID:RzCRvdkP
>>321
レジスタ割り付けの妙味www
さほど時間をかけなくてもコンパイラよりマシなのは作れるよ
そもそもIntrinsicsの時点でもレジスタ数削減は考えるべきであって
何も考えなきゃIntrinsicsだろうがアセンブラだろうが遅い
2019/11/13(水) 22:06:07.35ID:RzCRvdkP
詳しい自信があるなら
とりあえず問題ありまくりな>>300の問題点でも語ってみようか
2019/11/13(水) 22:09:21.49ID:RzCRvdkP
SIMDの一番簡単とも思えるこんなコードでも
最適化に関して語れることは山ほどある
2019/11/13(水) 22:22:02.11ID:AZXdI1I6
>>322
やっぱこいつ絶対アドレス君だw
妙味の部分に草生やすってことは大したコード書いてない証拠みたいなもんだよ
コンパイラより1%速くなっただけでもドヤ顔するタイプだろ
2019/11/13(水) 22:38:51.61ID:RzCRvdkP
絶対アドレス?

一番アクセスが速いのはスタック
ほぼ確実にL1キャッシュにある
一等地
2019/11/13(水) 22:45:26.14ID:RzCRvdkP
アドレス含め、
デカい即値は色々と遅くなる要素だぞ
2019/11/13(水) 22:49:24.63ID:RzCRvdkP
プログラムで勝負する?
329デフォルトの名無しさん
垢版 |
2019/11/14(木) 12:00:59.24ID:Owl20mAs
300 みたいなことはこのスレの本来の住民なら誰でも知ってるから
いちいち講釈垂れるのはスレの無駄遣いだからやらないだけ

FPGA だって互換性気にしなければオリジナルの CPU の IP 書けば済む話で
少なくともこの板でやる話ではない
2019/11/14(木) 13:21:05.62ID:/NpdgKVA
もっとレベルの高い話をお願いします
2019/11/14(木) 13:24:41.66ID:/NpdgKVA
>>329
>>300にいろんな要素が詰まってるわけだけど
どの程度わかるかな?
2019/11/14(木) 16:17:09.42ID:23v5U+5B
>>315
>MMXは除外しても、SSE2、SSE3、SSSE3、SSE4、SSE4.1、AVX、AVX2、AVX512に加えて、
>64bitでは一気に種類が2倍と、次々と登場する新命令ごとに最速のルーチン用意していく手間と、

知らなくてもいいことかもしれないけど、これはアセンブラ作者泣かせでもあったりする。
命令数が多すぎるので手作業での入力は例えテーブル方式を採用していても無理が有り、
インストラクションセットの表を自動的にテーブルに変換するようなプログラムをしなくては
ならなくなってきている。
2019/11/14(木) 18:28:43.14ID:wXs4N2j2
>>300は非常に良い教材だよ
これだけで語れることは山ほどある
「誰でも知ってる」なんて言う人は
ほとんど何も知らない初心者だけ

>>332
全てのCPUに対して最適化したコードを書く人なんていないだろ
せいぜい128bit, 256bit, 512bit の3バージョンくらい
32bit 512bit なんていらんだろうし
マーケティング上の理由で作らされてる人がいるのか?
それなら御愁傷様

本当に最適化するなら対応命令だけじゃダメ
IceLakeはAVX512が遅いし
AMDも昔はAVXがとても遅い
2019/11/14(木) 19:03:05.40ID:xDOIuZj+
>>333
アセンブラ=アセンブリ言語を処理してマシン語に変換するコンパイラ
の話。
2019/11/14(木) 19:18:18.01ID:wXs4N2j2
前半からアセンブリ言語での記述の話だと思ってしまった

命令数めちゃくちゃ多いよね
多いだけじゃなくて複雑にもなってる
{k1} とか {z} とか

まあそれでも(高級言語の)コンパイラを作るよりははるかに楽だろうけど
2019/11/14(木) 20:19:51.75ID:86Xe+wXL
>>326
前にアセンブラスレでこんなこと書いてた変なのがいたんだよ
>実際には問題がある。なぜなら、そんなにアドレスが大きいと、さっきから話題の
>mov   al, my_mojiretu[rbx]
>という命令が使えなくなるからだ。
とか、
>RIP相対32bitdispだとアクセスできない場合が出てくる
>シンボルがRIP相対2GBに制限されるなどはあくまでCコンパイラの制限であって
>アセンブラはその制限を受けない

ちょっと考えれば64bitなのに2GB制限するオプションとか使ってDLLも作れなくなるような
記法が推奨されてるはずないよな
それで複数の人から突っ込まれたら、誤りを認めて引っ込めばいいものを、
ファビョって連投しまくるから、皆呆れて無視したってことがあったんだよ

挙句にこんなことまで言い出したり
>自分は 64BIT 用C/C++コンパイラをインストールして無いので、試せません。
>>326だってこいつの言ってることはおかしいと思うだろ?
2019/11/14(木) 20:47:59.72ID:YoVrORSB
初心者スレなんかあったのか。乗り遅れたぜ。
2019/11/14(木) 22:25:49.84ID:uioYVx5f
>>336
その人は、64BIT命令にとても詳し過ぎてみんなが理解できなかったようだ。
2019/11/14(木) 23:49:04.19ID:86Xe+wXL
>>338
Microsoftの人より頭いいんだw
でも連投してるときはあまり余裕無さそうだったよw
340デフォルトの名無しさん
垢版 |
2019/11/14(木) 23:52:36.80ID:uioYVx5f
>>339
MSの人より頭が言いなんて、当たり前じゃない。
日本人をなめてはいけない。
2019/11/14(木) 23:54:38.25ID:uioYVx5f
純粋に技術競争になったら、日本は絶対にアメリカに勝つ。
いつもそうだったし、IT分野でもそう。
問題はアメリカ人は自分が負けそうになると、圧力をかけて壊してくることだ。
2019/11/15(金) 01:13:10.47ID:aFU9j+Ph
>>341
そういう考え方情けないわ
お前がまず手本を示して見ろよ
2019/11/15(金) 06:20:01.64ID:/dDy1LQy
>>336
そこだけ抜き出しても何が言いたいのかわかりません

スレタイとは関係なく
ただ人をバカにするためだけの書き込みなら
感心しない
2019/11/15(金) 07:39:37.60ID:6uJ1WeVS
>>342
そうそう
40〜50行程度の32bitSSEの自慢のコード片を晒せば大体の実力は判るんじゃないかな

でもね、自分が本気で最適化する時は、IACAの分析結果じゃいい加減すぎて役に立たないから
人力で計算してたんだよね
社外に秘密にしたいパイプラインの実装の詳細を気前よくツールに実装するはずないよね
だから、IACAを使って最適化してるのを自慢してる辺り、あまり期待はしてないけどね
2019/11/15(金) 08:12:16.93ID:pd2oXw5y
なんで32bitSSE?
2019/11/15(金) 08:13:55.97ID:pd2oXw5y
IACAの使い方間違ってないか?
自力で計算するための情報を手っ取り早く得る為の物だぞ
2019/11/15(金) 08:37:45.48ID:LE7NfU10
>>342
IT関連は狡猾な人が多いので、アイデアだけ真似されるので完成するまでは
公開しない。
2019/11/15(金) 08:41:09.49ID:pd2oXw5y
>>344
40〜50行程度になる題材があればコードを書くよ

今更32bit SSEってのも
時代についていってない感じでイマイチだけど
最適化はその時代のCPU向けでいいのかな?
2019/11/15(金) 08:43:42.26ID:pd2oXw5y
>>341
IT分野で日本が技術力で勝ってると思ってるの?
頭がお花畑で良いねえ
2019/11/15(金) 08:45:31.01ID:LE7NfU10
>>349
多くは無いが個人レベルでは勝てる人はいる。
351デフォルトの名無しさん
垢版 |
2019/11/15(金) 08:47:47.96ID:/yBuhf/V
量子コンピューターに日本人の名前がクレジットされる可能性は高い。
一方、○○互換のソフトウェアはほぼ100%が中国発。
一見欧州製のように見えてもほぼほぼ中国。
人工知能に中国人の名前がクレジットされる可能性は相当高い。
2019/11/15(金) 08:50:37.54ID:pd2oXw5y
>>350
なんだその無意味な主張
353デフォルトの名無しさん
垢版 |
2019/11/15(金) 08:51:56.44ID:/yBuhf/V
おそらく世界最初の人工知能は春麗とかいう名前になる。
2019/11/15(金) 08:52:04.36ID:LE7NfU10
>>352
日本の平均レベルが低いからといって、このスレに来ている人全員のレベルが
低いことにはならないということだよ。
2019/11/15(金) 08:53:57.40ID:pd2oXw5y
日本とアメリカの技術力の比較の話から
なんで個人の能力に話をすり替える?
2019/11/15(金) 08:55:36.81ID:LE7NfU10
>>355
日本では、かつては半導体業界に優秀な人が集まっていた。
その当時、日本を引っ張っていたのは平均レベルの人達ではなかったんだよ。
自分の周りの平均以下のプログラマを見て、それが日本を代表するプログラマの
レベルだと思ってもらっては困る。
2019/11/15(金) 08:56:48.41ID:pd2oXw5y
しかも
勝てる人もいる
って

アメリカのトップに勝つ人がいるって言うなら多少の意味はあるけど
2019/11/15(金) 08:57:04.71ID:LE7NfU10
様は、生まれつきのIQや理解力や記憶力の話だ。
努力とかじゃない。純粋のそういうものを比較すれば、日本のTOP層は
MSのTOP層と互角に戦える。
2019/11/15(金) 08:57:41.59ID:LE7NfU10
>>357
TOPに勝てる人は要るよ。数学オリンピックとか見ていたら分かる。
2019/11/15(金) 08:58:10.04ID:pd2oXw5y
IQ、理解力、記憶力

技術力からずいぶんと話題が変わって来たね
2019/11/15(金) 09:00:00.74ID:pd2oXw5y
>>359
想像じゃなくて具体的に示してください

数学オリンピックって
俺も出たけどね

そんな高校生の遊びと技術力を同一視しないで
2019/11/15(金) 09:11:49.17ID:LE7NfU10
>>361
あなたは数学ヲタクなだけでプログラミングが出来ないから
生意気なことを言ってるのか?
2019/11/15(金) 09:12:33.92ID:pd2oXw5y
だからプログラムで勝負しようって言ってるのに
2019/11/15(金) 09:13:29.93ID:LE7NfU10
本当に地数学オリンピックに出られるなら、プログラミングなんてアホみたいに
簡単なはずだ。嘘なんじゃないか。
2019/11/15(金) 09:14:45.79ID:LE7NfU10
>>363
プログラミングは勝負の世界ではなく、お金の世界だ。
金儲けの手段。数学がそんなに出来りゃ学者にでもなればいい。
コンピュータ系の教授なら簡単になれるはずだ。
2019/11/15(金) 09:17:17.89ID:LE7NfU10
勘違いしてる人がいるようだが、本当に数学オリンピックに出るような人は、
いろいろなことが出来て、プログラミングなんて簡単に出来てしまう。
実例で行けば語学も堪能で13ヶ国語がぺらぺら立ったりする人までいる。
実際、数学オリンピックに出られるような人は、自分でもそれが分かる。
何もかも簡単に理解できるのだ。
2019/11/15(金) 09:19:48.94ID:pd2oXw5y
単なる局所的な最適化、高速化
と
コーディング
と
ソフト開発

は全然違うから

>>365
じゃあ収入で勝負するか?
2019/11/15(金) 09:25:01.76ID:pd2oXw5y
>>366
夢見すぎじゃね?
2019/11/15(金) 09:28:59.67ID:LE7NfU10
>>368
そんなことない。数学は頭脳の頂点にあるので、本当に何でも出来る。
2019/11/15(金) 09:29:06.33ID:pd2oXw5y
数学の天才が本気で高速化したコード
興味があるなら素直にそういえば良いのに
2019/11/15(金) 09:30:47.63ID:LE7NfU10
>>370
そんなのには興味ない。
俺も天才だし。
2019/11/15(金) 09:31:36.73ID:pd2oXw5y
勝負から逃げる天才www
2019/11/15(金) 09:34:00.16ID:LE7NfU10
>>372
金にならない勝負はしない。
2019/11/15(金) 09:35:16.56ID:pd2oXw5y
金にならない落書きが趣味なのに?
2019/11/15(金) 09:41:11.47ID:LE7NfU10
>>374
掲示板書き込みは、頭を使わないので簡単に出来るので全然違う。
他の人が思ってるように検索して調べることもしてない。
記憶に頼って書いてるだけなので簡単。一人には高度に見えるかも
しれないが、頭は停止状態で書いている。掲示板書き込みは頭の休憩。
プログラミングの勝負などは脳のフル活動が必要になるので
絶対にしたくない。特に天才の脳はフル活動すると疲れる。凡人とは違う
かも知れない。
2019/11/15(金) 09:43:30.90ID:LE7NfU10
>>375
誤:記憶に頼って書いてるだけなので簡単。一人には高度に見えるかも
正:記憶に頼って書いてるだけなので簡単。一般人には高度に見えるかも

ちなみに誤字脱字が多いのも、頭を休めながらテキトーに書いているからだ。
長文だから必死に書いている事は無い。キーボードはスラスラ打てるから。
一般人には分からないだろう。
2019/11/15(金) 09:44:13.05ID:pd2oXw5y
数オリに幻想を抱いてるようじゃ
能力も知れてる

でもびっくりするくらい数学を知らない人もいるよね
自信満々でアップした行列の掛け算のコード
実は行列の掛け算を知らなくて掛け算になってないとか
2019/11/15(金) 09:48:27.12ID:LE7NfU10
>>377
数学オリンピックは、出るだけでも少なくとも東大や、東大の大学院に入るより
ずっと難しい。マイクロソフトに入社するよりも難しい。
ハーバードやMITよりもずっと難しい。
工学系の教授になるよりも難しい。
2019/11/15(金) 09:48:29.22ID:pd2oXw5y
昔いた団子とかいうコテの話
2019/11/15(金) 09:49:42.54ID:pd2oXw5y
>>378
それを俺に言ってどうするの?
俺のファンか?
2019/11/15(金) 09:52:16.79ID:LE7NfU10
>>380
本当にそんなに頭がいいなら、どっかの教授にでもなったらいいでしょう。
こんなところで人を馬鹿にしてはいけません。
2019/11/15(金) 09:53:30.53ID:ptbono2y
虚言癖だと思われてるだけだろ
2019/11/15(金) 09:56:05.40ID:pd2oXw5y
まあなんでもいいや
話をスレタイに戻そうぜ

とりあえず天才の>>381
>>300のコードの問題点と修正コードをよろしくね
2019/11/15(金) 09:56:57.67ID:LE7NfU10
>>382
俺は虚言ではない。
俺が嘘をついていると思ってるから、嘘で対抗しているの?
それは間違い。
2019/11/15(金) 09:58:10.18ID:LE7NfU10
>>383
SIMD命令には詳しく無いので、検索して調べないといけないのでやりません。
ここは頭を休める場所として使っているので、頭を使うことは出来ないのです。
2019/11/15(金) 10:00:55.84ID:LE7NfU10
実は、高IQ者が休憩時間に簡単なおしゃべりのつもりで言っていることが、
一般人には、高度すぎて勝負をしてきていると思ったりする可能性があります。
こういうことでギフテッドは一般の学校でトラブルになり易いのです。
本人は勝負のつもりではなく、とても簡単に言っているのです。一般人は、
勝負だと受け止めます。これが軋轢になるのです。
2019/11/15(金) 10:02:08.40ID:pd2oXw5y
じゃあ何に詳しいんだ?

別に頭を使うようなコードでもないけどねえ
単なる知識の問題
考慮すべき内容は大きく分けて5個
2019/11/15(金) 10:03:25.27ID:pd2oXw5y
>>386
スレタイ
2019/11/15(金) 16:52:20.54ID:pd2oXw5y
技術的内容を1個も語らずに消えたか
文系君かな?
2019/11/15(金) 20:23:52.61ID:lI+7MgeJ
マウンティング合戦で過疎スレを伸ばさないでくれよ。
質問攻めして相手の揚げ足取りって馬鹿左翼みたいだし。

ループ {
sum = _mm_add_ps(sum, data[i]);
}

について語れるなら結論だけ書いてOKだよ。
2019/11/15(金) 20:34:07.26ID:pd2oXw5y
>>329が答えてくれるよ
2019/11/16(土) 11:20:10.45ID:lV5RucvD
・レイテンシとスループット
・メモリ帯域
・CPUと搭載命令
・演算の順番と精度
・処理の構成

SIMDの一番簡単とも思えるこのコードで
このくらい語れることはある
2019/11/16(土) 11:24:47.82ID:lV5RucvD
・アラインメントと端数処理

これも
2019/11/16(土) 11:31:47.92ID:lV5RucvD
・レイテンシとスループット
ADDPSは多くのCPUで
レイテンシ 3〜4クロック
スループット 0.5クロック/命令
(メモリリードもL1にデータがあれば0.5)

このコードは、
前の演算結果を使うので
このままだと1回のループに3〜4クロックかかってしまう

スループットを生かすには8個並列にする

ループ {
sum0 = _mm_add_ps(sum0, data[0]);
sum1 = _mm_add_ps(sum1, data[1]);
sum2 = _mm_add_ps(sum2, data[2]);
sum3 = _mm_add_ps(sum3, data[3]);
sum4 = _mm_add_ps(sum4, data[4]);
sum5 = _mm_add_ps(sum5, data[5]);
sum6 = _mm_add_ps(sum6, data[6]);
sum7 = _mm_add_ps(sum7, data[7]);
data += 8;
}

32bitコードでもSIMDレジスタが8個あるので
コンパイラはsumをレジスタに割り当ててくれることが期待できる
(一応確認する)
2019/11/16(土) 11:48:37.57ID:lV5RucvD
・メモリ帯域 / 処理の構成
このコードの性能が生かせるのは、
データがL1にある場合

メインメモリは非常に遅いので
大きなデータにこのループを使うと
ほとんど待ち時間になってしまう
(HTTなら他方のスレッドが動き放題)

小さなデータで頻繁に呼ばれるのであれば意味があるが(例えば低レイテンシが要求されるオーディオ処理)
大きなデータの場合はほとんどがメモリアクセス時間になってしまう

L1やL2に入るようにこまめにサイズを区切りながら処理をするとか
他の処理も合わせてループにすれば
メインメモリの帯域による性能劣化を減らす事が出来る

なのでこのループ自体の存在をまずは疑問視しよう
2019/11/16(土) 11:59:07.97ID:lV5RucvD
・CPUと搭載命令
128bit命令は古い
パフォーマンスが重要であれば
より性能のある256bit命令、512bit命令を使う
その為に、搭載命令を判別すること

・アラインメントと端数処理
メモリはキャッシュ境界をまたがない場合に性能が出る
今回の場合はデータが1個なので
前側端数と後側端数をゆっくり処理して
それ以外を高速なコードで処理をする

・演算順と演算精度
演算の順番で精度が悪化することがあるので注意
今回のコードは順番に足していくが
これは精度が悪化する順番である
(2^24個を超える個数の1を加え続ける事を考えると分かりやすい)
2019/11/16(土) 12:00:48.23ID:lV5RucvD
このくらいを把握していれば初心者を卒業できます
2019/11/16(土) 12:11:36.08ID:wJGFAeky
>>397
お前が初心者なのは良く分かった
2019/11/16(土) 12:25:17.83ID:lV5RucvD
はいはい
2019/11/16(土) 16:08:28.47ID:+CnVgCxY
>>397
なるほどね。かなり勉強になりました。
こんだけ簡潔に日本語で説明されているものは、そう簡単には
ネット検索では見つけられないんじゃないかと思います。
SIMD命令には詳しく有りませんが、ちゃんとレイテンシのことまで
考えないと真価を発揮できないようですね。
知りませんけど、Intelコンパイラでもここまでは自動最適化で
やってくれないかもしれませんね。実際どうなのかお聞きしてみたいものですが。

実はコンパイラの最適化というものは、コンパイラ作者自身はやりたいと思っていても、
実際にコンピュータに自動的にやらせるのは結構大変なものなのです。
細かな注意点が沢山あるためです。最大の問題は、レジスタが無限に
あるわけではないことと、特定のレジスタにしか対応していないマシン語が
あることから来ます。もう一つは、さまざまな型やサイズの変数があるために、
色々なパターンに対応するのが難しいことにあります。
そういうこととに加えてレイテンシの自動配慮などを行おうとすると、最適化を
自動的に行うコードは非常に複雑で膨大な量になるのです。
また、今のCPUには、レジスタは16本くらいと結構沢山有るので、レジスタが不足した
場合の処理は、滅多にテストできません。そのため、その最適化処理はなかなか
テストできないのです。ですので、生半可なテストでは間違いが含まれていても
分からないままコンパイラを出荷してしまう事がありえます。敢えてレジスタが3本しか
使えないようにした状態でコンパイラをテストしたりする方法も一つの手です。
または、テストを余りしなくても明らかに正しいことが分かるようにコーディングする
ことです。しかし、それは余り簡単なことでは有りません。
2019/11/16(土) 16:18:37.52ID:+CnVgCxY
>>400
最適化に関して。
例えば、最適化は、色々なパターンの最適化をどのような順序で施すかによって、
最終コードの質が変わってくることがあります。というのは、人間にとっては
割と大丈夫なのですが、コンパイラにとっては、非常に複雑でそれ以上最適化
できないようなコードに見える状態に陥ってしまうことがあるからです。
普通は、少しずつ良いコードになるよな修正を何度も何度も繰り返して、それ以上
良いコードになる方法が分からなくなった時点で最適化が終わります。
ところが、いったん、悪いコードにしてから、もう一度最適化をしてみると、
最後のコードは良いコードになる場合があります。このような最適化は人間には
余り難しくないのですが、コンパイラにとっては大変なのです。
なぜなら、悪いコードになってもいい事を許しだすと、オセロの先読みの min, max
方の様な試行錯誤型の人工知能的なものが必要になるのですが、そのような最適化は、
普段は余り効果を発揮しにくいのに、処理時間が膨大になるためです。
人間は、一度最適化したコードは、何年もそのまま使います。ところが、コンパイラは、
10分に一度くらいは、ビルドし直します。ですので、最適化にかけられる時間が違うのです。
CPUが人間より速くても、このような事情があるので、人間より良いコードを出すのは
案外難しいのです。
402デフォルトの名無しさん
垢版 |
2019/11/16(土) 17:14:42.25ID:XECBqAmz
長いんだよ
2019/11/16(土) 18:54:54.37ID:3SiuPEy1
最適化に関して
案外難しいのです。
2019/11/16(土) 22:40:57.80ID:moAaFJrn
アルゴリズムの最適化なら組み込み関数でもできる
なのに、アセンブラを使う理由があるのかって話なのに、なんで組み込み関数のサンプルなんだ?
自慢のコード片ってのは、アセンブラで書いたのに決まってるでしょ
言い争いしてたどっちが>>316なんだ?
2019/11/17(日) 08:46:55.15ID:Mp5WsRX6
「究極の最適化はアセンブラしかない」
これに反対する人はいないよな?
SIMDの高速化でIntrinsicsに対しての話

アルゴリズムの最適化?
そんなものIntrinsicsを使う必要すら無い
2019/11/17(日) 08:53:33.84ID:Mp5WsRX6
実際の開発現場では
(アセンブラではなくて)Intrinsicsを使うことが多い
これも別に誰も反対していない
2019/11/17(日) 08:54:39.00ID:Mp5WsRX6
君はいったい誰と戦っているの?
2019/11/17(日) 12:07:44.77ID:254DddZo
>>405
なんかあんたの主張はずれてんだよな
本当に「究極」を求めるのなら、自分も>>298が書いてるように、何もCPUのソフトウェアに
限定せずFPGAでもなんでも使えばいいと思う
Googleだって、TensorFlow専用のプロセッサを開発して運用してる

組み込み関数の利点としては、32bit・64bit、SSE・AVXへの変更はコンパイラのオプションだけで可能ってこと
XMMでも多少は速くなるのと、AVX2やAVX512への移植もインラインアセンブラからよりははるかにしやすい
Microsoftが64bit版VCでインラインアセンブラを廃止したのは賢明だと思う

アセンブリの致命的な欠点は、アルゴリズム上の変数とレジスタが一対一で対応しないことで、
上のsum1みたいな名前付きの変数でないことと、常にどのレジスタがどの変数を保持しているか追跡しなきゃならない
それに、インラインアセンブラが使えないコンパイラだと、インライン関数やOpenMPも使いづらい
シングルスレッドで1%速くなるよりOpenMPで手軽にマルチスレッド化した方が、よりお手軽に速くなる

それでもアセンブリを使いたいっていうなら、オープンソースでないか、組み込み関数より
最低でも5%、できれば10%以上速くなる時にして欲しい
世の中にはインラインアセンブラで書かれたがために64bitで動かせずに放置されたオープンソースの
プロジェクトが結構あるんだよ(特にAVISynthなどの動画フィルタプラグインとか、オープンソースではないけど、
Aviutlも作者がインラインアセンブラ?を使いまくったせいで64bit化出来ずにいる)
2019/11/17(日) 12:23:27.78ID:9epihDl/
>>408
横からだけど、最後の方はわかるけどコンパイラオプションのは組み込み関係ないし
単一の浮動小数点演算をSSEのレジスタ使うだけっしょ
あとハードの制約を外すんならSSEだのAVXだの選択肢に入らんでしょ
一般のPCにみんなついてるGPUだって使えるんだから

CPUの拡張命令を使うのはそれなりにハードの制約があるからだ
2019/11/17(日) 13:15:14.50ID:Mp5WsRX6
ここはCPUの高速化のスレだから
GPUやFPGAの話は他で
2019/11/17(日) 13:43:25.31ID:P0Gu6nYy
BigInt用のSIMDがあったな
2019/11/17(日) 15:39:11.30ID:254DddZo
>>409
64bitはコンパイラオプションではなかったけど、わざわざ各バージョン向けのコードを用意しなくても
開発環境でまとめてビルドできるでしょ

>>410
たかがアセンブリで書いたくらいで「究極」なんてドヤ顔すんなってこと
頭のいいGoogleの人達は専用プロセッサを開発する選択をした

そこまで自信があるのなら、40〜50行程度の32bitSSEのアセンブリで書かれた自慢のコード片を晒してみたら?
2019/11/17(日) 19:51:32.97ID:ADq5wcSz
>>1読めよ。
2019/11/17(日) 21:03:25.34ID:254DddZo
>>413
「弘法筆を選ばず」って諺があるように、本当に才能のある人はわざわざ手段限定してドヤ顔したりしないだろ
せこいマウント合戦繰り広げてたの見てると、器の小ささを感じてしまうんだよな
そんなの恥ずかしいから止めとけよ
それより、エレガントなコード片晒した方がかっこいいぞ
2019/11/18(月) 07:47:56.01ID:3AU+PcKz
Intelは、何年も前からパラレル・ユニバースってキャッチフレーズで細粒度のマルチスレッディングを
推進していて、Threading Building Block(TBB)とかOpenMPなんかを使って並列化で速度を稼げと言ってる
現在では、IntelのIPPやMKLもフリー化されて、定番の処理は予め用意されてる

動画処理なんかでも、フィルタやフレーム別に複数のバッファを用意してマルチスレッド化してると
スループットを稼ぐようになってるので、最適化が甘くてもハイパースレッディングで実行ユニットは埋められる

GPUで計算する場合はライブラリ呼び出しだし、64bitでインラインアセンブラを使えるIntelのコンパイラは
700ドル以上するし、GCCのasmは癖が強すぎてMASMやNASMへの移植の障害になるほど

そういうことで、現在では「アセンブリで究極の最適化」なんて、時代に取り残された年寄りの妄言みたいな
状態になってるから、組み込み関数使って保守性をよくしておけばいい
2019/11/18(月) 07:50:50.36ID:3AU+PcKz
マルチスレッド化してスループットを稼ぐようになってるので
2019/11/18(月) 15:15:29.56ID:8gyrpVW6
Pen4の失敗で何を学習したんだか
2019/11/19(火) 01:17:30.21ID:dHazNLDF
熱湯バーストか・・・
2019/11/19(火) 03:23:02.67ID:MyJ9nvLK
>>417
NetBurstと違って、スパコンの主流が数千から数十万コア以上の超並列マシンになって
そろそろ20年近く経つのに、まだこんなこと言ってるのがいるんだな
よくまあ、これで最適化を語ってたものだ
2019/11/19(火) 06:56:46.21ID:MyJ9nvLK
なんでPen4なんかを持ち出すのか引っかかってたけど、もしかしてNehalem以降のCPUで
ハイパースレッディングが復活してるのも知らなかったとか?
>>286や>>287で
>コンパイラの最適化なんぞ知れてる
>その辺を最適化したければガシガシアセンブラだが
とか書いてたのがおかしいと思ったんだよな
シングルスレッドでしか動かないCPUなんかで、
HaswellやSkylake、IceLakeみたいな実行部の強化をするはずないだろ

OpenMPやTBBでマルチスレッド化すればベクタ化は組み込み関数でも十分だし、
メモリアクセスがネックになってるのに、どうしてマルチスレッドによる並列化に言及しないのか不思議だったんだよな
2019/11/19(火) 13:17:00.58ID:lt+0x6jo
スレッド分けももちろん重要です
まあ安直にOpenMPでも良いんですが
これも究極はスクラッチ

スーパーコンピューターと違って
普通のPCだとせいぜいHTTとマルチコアなので
まあそれほど複雑ではないですが

>>300の例だと、
演算ポートもロードポートもガラガラなので
HTTは非常に有効です
データがL1にあれば性能はほぼ倍になります
一方>>394の場合は演算ポートもロードポートもフルに使ってるので、
HTTの効果はありません
汎用整数命令や整数ベクタを使うスレッドに分けてあげましょう

まとまった単純な処理でHTTの効果が大きい物は
ポートがスカスカな糞コードですね

メモリ帯域で大きく性能が変わるコードも糞コード
これは>>395の通り
2019/11/19(火) 13:19:58.60ID:lt+0x6jo
スレッドの分け方はこのスレの趣旨とは違いそうなのでこの辺で
2019/11/19(火) 16:25:51.48ID:8/4AEaZj
> NetBurstと違って、スパコンの主流が数千から数十万コア以上の超並列マシンになってそろそろ20年近く経つ

というかこの人は何を言ってるのだろう。
スパコンなんて40年以上前から並列処理の性能ということも知らんとかまだ子供か学生かな?
当時のPen4のことも全然知らないんじゃないだろうか。NetBurstとスパコン比べて何が言いたかったのだろう。
2020/03/19(木) 23:46:19.85ID:sn82uzw4
ちょいとメンテがてらにmasm弄ってるんだけど、
mov r/m64, imm32 形式のバイナリ吐かせる記述方法がわからん。
2020/03/20(金) 00:09:21.01ID:/yJp+267
自己レスになるが、符号付き与えると符号拡張されるようだった
mov rax, -1
↓これと同じ結果
mov rax, 0FFFFFFFFFFFFFFFFh

VS2019だと
return 0xFFFFFFFFFFFFFFFF;
これが最適化されてコンパクトになっていたという話。やっぱアセンブラめんどい。
2020/03/25(水) 00:15:18.17ID:JuA9otrT
ICC 19.1って32bitで最適化してビルドすると、コード生成の拡張命令でSSE2やAVX未満を指定してもAVXのコード吐き出す事がある謎の仕様があって困る。というかたぶんバグ。
できあがったコードに正常でない無効なオペランドが含まれたり要はぶっ壊れてる。
これを回避するには、最適化 /Od 無効で任意の拡張命令を指定するとAVXが含まれずに正常なコードになるが、最適化はたぶんされていないだろうな・・・。
古い環境作ってレガシー用のビルド環境まだ要るんかなあ。
2020/03/25(水) 08:28:03.35ID:iketgqFM
そりゃヒドイなw
2020/03/25(水) 12:40:22.26ID:BJmxk7sc
さすがにバグレポート送るべき
再現できるコードとその時のオプションを添えて

とはいえ、既に世界の誰かが同じことをやっている可能性は大
429426
垢版 |
2020/03/25(水) 15:55:42.99ID:JuA9otrT
謎のAVX出力は_mulx_u32が原因だった。
てっきりただの乗算と思いきや、これBMI2つまりAVX2の命令セット世代なんですね。
おそらくベクトル化を試みるかをした時、コンパイラ内部の命令セットのフラグがAVX2に上書きされて処理がおかしくなっていると予想。

今回の問題が無かったにせよ、非AVX2環境では動かないコードになっていたので自分のバグでもあるが、普通に動く場合もあるので注意がいる。
2020/07/10(金) 21:49:32.88ID:7RoGj1wV
コンパイラのバグとさわぐ99%は自分のバグ
431デフォルトの名無しさん
垢版 |
2020/07/11(土) 10:55:26.06ID:J0INoyBc
まあそうだね
2020/07/11(土) 15:27:19.59ID:f0gqe2Et
正常な動作しなかったんだからそれは普通にバグでしょ
433デフォルトの名無しさん
垢版 |
2020/07/11(土) 19:00:18.09ID:zVc8luVQ
人によるな
わいの場合99%はCPUやOS、コンパイラのバグだな
2020/07/12(日) 08:05:46.65ID:D8OEpmlP
人?
おまえ人だった?
435デフォルトの名無しさん
垢版 |
2020/09/04(金) 00:13:07.71ID:951pQYyb
レイトレでOpenMP使ったら早くなるかと試したけど却って遅くなった
各ピクセルの演算には特に共有するコンテキストとかあるわけじゃないのに
変に安全装置が働いているんだろうか?
2020/09/04(金) 00:21:44.94ID:Znx8nm1Y
>>435
OpenMPはオーバーヘッドが大きいから細粒度の並列化には不向きだよ。
CPUでやるなら、せめてSIMD。
2020/09/04(金) 07:24:05.99ID:iEv5UTAi
細粒度もなにも、OpenMPはもともと4並列とか8並列とかコア数に合わせてやるもんだろう。
まさかピクセル数分だけ並列化すると思ってるのか?
2020/09/04(金) 11:27:09.07ID:INXShDjj
>>435
restrictつけたら速くなるかも?
わからんけど
2020/09/04(金) 11:59:04.83ID:eJvaiWE4
chinebenchなんかもレイトレだけど普通にコア数分早くなるでしょ
設計がまずいだけじゃないの
2020/09/06(日) 08:40:00.70ID:bVBmADbq
自作erレベルじゃなくム板なのでコード見てもう少し深く原因を解析してくれ。
2020/09/06(日) 10:34:43.20ID:q0H7dLCO
エリアで処理範囲分けるべきとこをほんとに1ピクセルずつ計算させてんのかな
442デフォルトの名無しさん
垢版 |
2020/09/06(日) 19:16:49.00ID:yqdZF37w
どう解析したらいいかがわからない
とりあえずThreadPool使って1行を3分割して3スレッドで描画
3つのスレッドのタスクが完了するまで待機
って感じのことをやってみたらOpenMPでやったのと同じような程度で
処理速度が劣化した
(毎行描画ごとにSDLに制御を返してる)
443デフォルトの名無しさん
垢版 |
2020/09/06(日) 19:19:09.98ID:yqdZF37w
SIMDも気になるけど知識がないから時間かかりそう
2020/09/06(日) 19:42:59.69ID:gGwX7R3F
レイトレにSIMDなんてそれこそ向いてないと思うが。
445デフォルトの名無しさん
垢版 |
2020/09/06(日) 20:49:56.85ID:PyqKwzZq
そういうのは、ム板よりLinux板のほうが詳しいんじゃないだろか。
446デフォルトの名無しさん
垢版 |
2020/09/06(日) 20:50:44.81ID:PyqKwzZq
レイトレあたりになると数学が関わってくるので、Linux板で聞いたほうが良いと思う。
2020/09/06(日) 20:56:21.30ID:Ady7PdVC
んなこといいはじめたら、SIGGRAPHとか論文のほうが。w
448デフォルトの名無しさん
垢版 |
2020/09/06(日) 21:02:03.50ID:PyqKwzZq
SIGGRAPHで発表されたばかりの先端的アルゴリズムなら、ここで質問するよりMAC板で聞いたほうが良い。

あるいは、先端アルゴリズムの数学的な部分についてはLinux板も詳しい。

MAC板は、人工頭脳を使ったグラフィック表現なども研究してるので、世界で通用すると思う。
2020/09/06(日) 21:19:36.31ID:gGwX7R3F
3スレッドでやっても時間が変わらなかったという時点で何かポカしているんだと思うが、
じゃあレンダリングするピクセル数を減らしたらそれに比例して時間が短縮するだろうか。
450デフォルトの名無しさん
垢版 |
2020/09/06(日) 21:28:21.32ID:PyqKwzZq
そういうのはLinux板で聞けば。
2020/09/06(日) 21:41:48.21ID:q0H7dLCO
>>442
vsならオプションでopenmp効かせてる?
2020/09/06(日) 21:45:15.95ID:q0H7dLCO
ってどっちでも遅くなったのかな
453デフォルトの名無しさん
垢版 |
2020/09/06(日) 22:25:50.00ID:PyqKwzZq
ム板は基本がおろそかなので、数学的な質問はLinux板が良いです。
2020/09/06(日) 22:34:12.06ID:gGwX7R3F
質問者の環境がLinuxなのかWindowsなのかも明らかじゃないのに
しきりにLinux板を薦めるのがメンヘラっぽくて怖いw
455デフォルトの名無しさん
垢版 |
2020/09/06(日) 23:25:15.48ID:PyqKwzZq
ム板はバカの集まりなのでLinux板で聞いたほうが良いと教えてるだけ。
Windows10は関係ない。
2020/09/07(月) 10:28:57.49ID:syrYBlXo
元々犬板ってレベルが低い犬厨をUNIX板から隔離するためにできた板なんだけど
2020/09/07(月) 17:45:05.46ID:FeHkNruR
デバッグビルドでテストするアホの予感
2020/09/07(月) 17:58:53.90ID:vcUD6VhW
1行を3分割て1行ループ回すごとにスレッド読んでるなら遅くて当たり前な気がするけど
横3分割って意味なのかな
459デフォルトの名無しさん
垢版 |
2020/09/07(月) 18:25:16.84ID:b75Xf7nO
SIMDなんて-O3付けとけば自動で行われるじゃん。
それ以上は考えるだけ無駄でしょ。
2020/09/13(日) 20:11:59.25ID:zYAXQUsK
>>435、ディレクティブ(#pragma omp〜)、コンパイラバージョン、環境変数OMP_NUM_THREADS、実行環境のCore/Threadsはどんなの?
461デフォルトの名無しさん
垢版 |
2020/09/14(月) 01:56:59.78ID:5Y5z53c+
>>460
g++ (GCC) 10.2.0
OpenMP_CXX: -fopenmp (found version "4.5")
物理コア数2, 論理コア数4

コードは大体こんなイメージ↓

--- RayTracer.hpp
static int y = 0;
#pragma omp parallel_for num_threads(3)
for (int x = 0; x < W; ++x) {
render(result, x, y); // 重い処理(毎行0.8秒程度かかる)
}
++y;

--- Window.hpp(SDL2のメインループ)
while (!stop) {
raytracer->render(result);
applyResult(result);
}
462デフォルトの名無しさん
垢版 |
2020/09/14(月) 02:02:22.29ID:5Y5z53c+
parallel_for: 誤
parallel for: 正
463デフォルトの名無しさん
垢版 |
2020/09/14(月) 02:42:30.59ID:5Y5z53c+
スレッド数も1〜4でいろいろ変えてみたら
1スレッド:一番早い
2スレッド:最悪
3スレッド:2スレよりマシ
4スレッド:3スレよりマシだけど1スレより遅い。CPU使用率100%に張り付く。
みたいな感じだった
2020/09/14(月) 07:25:57.13ID:tgbt1xqp
yのループどうなってんだこれ
2020/09/14(月) 07:57:55.59ID:Psg3/81m
もしスレッドプールが使われていないんだったら外側のyループで並列化するのがいいんだろうな。
466デフォルトの名無しさん
垢版 |
2020/09/14(月) 11:24:08.29ID:5Y5z53c+
L1キャッシュヒット率が低すぎかな?
[1 thread]
233,710,687 cache-references:u (57.13%)
170,103,633 cache-misses:u # 72.784 % of all cache refs (57.15%)
107,023,099,494 L1-dcache-loads:u (57.12%)
172,491,811 L1-dcache-load-misses:u # 0.16% of all L1-dcache hits (57.14%)
29,286,128,938 L1-dcache-stores:u (57.11%)
<not supported> L1-dcache-store-misses:u
107,114,953,718 dTLB-loads:u (57.21%)
1,665,512 dTLB-load-misses:u # 0.00% of all dTLB cache hits (57.14%)

71.532926647 seconds time elapsed
68.955555000 seconds user
0.410194000 seconds sys

[3 thread]
2,821,811,091 cache-references:u (57.15%)
158,279,338 cache-misses:u # 5.609 % of all cache refs (57.13%)
107,538,202,753 L1-dcache-loads:u (57.13%)
1,355,563,439 L1-dcache-load-misses:u # 1.26% of all L1-dcache hits (57.16%)
29,423,932,980 L1-dcache-stores:u (57.15%)
<not supported> L1-dcache-store-misses:u
107,129,155,399 dTLB-loads:u (57.15%)
2,350,280 dTLB-load-misses:u # 0.00% of all dTLB cache hits (57.12%)

151.557505458 seconds time elapsed
253.433918000 seconds user
119.253409000 seconds sys
2020/09/14(月) 12:11:30.32ID:tgbt1xqp
実行時のコアの負荷どうなってるのかと
コンパイルオプションでopenmp有効にしてるの?
してるんだったらループ内の排他制御周りで時間食ってんじゃないの
2020/09/14(月) 12:20:38.35ID:tgbt1xqp
あとマルチスレッドにしてる部分で大量のメモリ確保とかファイルの読み書きとかしてないよね?
469デフォルトの名無しさん
垢版 |
2020/09/14(月) 12:23:55.08ID:5Y5z53c+
スレッド数に応じてCPU使用率は上がってる
排他制御は不要だからしてない
470デフォルトの名無しさん
垢版 |
2020/09/14(月) 12:32:30.05ID:5Y5z53c+
マルチスレッドにしてる部分は純粋な計算のみで結果を配列に書き込んでるだけ
2020/09/14(月) 12:44:52.40ID:tgbt1xqp
あとはxじゃなくてyのループをpararellにするぐらいしかないんじゃね
スレッド呼び出しの回数多くなってるでしょそれ
1行0.8秒もかかるならスレッドのコストあんま関係ないような気もするけど
俺に思いつくのはApplyresultがなにかしてんのかなってぐらい
2020/09/14(月) 12:45:56.25ID:Bl6WtuBD
このあたりのomp_get_max_threads()とか二重ループのオーバーヘッドの話はどうなん?

http://www.sanko-shoko.net/note.php?id=9twp
473デフォルトの名無しさん
垢版 |
2020/09/14(月) 12:55:20.98ID:5Y5z53c+
もともと外側ループに#pragma ompつけてたけどそれも遅かった(1スレッドに比べて)
Applyresultは画面に結果を表示させる(バッファ入れ替え)だけで
処理時間は0.01秒もかからない
2020/09/14(月) 13:00:39.33ID:tgbt1xqp
画面表示は別スレッドにすべきだと思うが
バッファ入れ替えのみで別スレッドで描画させてるなら多分問題ないけど
あとは暗黙のコピーでもどっか発生してるのかね
vsのopen mpだとデフォでスレッドプールしてるっぽいけどgccどうなんだろ
475デフォルトの名無しさん
垢版 |
2020/09/14(月) 13:04:20.42ID:5Y5z53c+
あーコピーは有り得そうだなぁ
476デフォルトの名無しさん
垢版 |
2020/09/14(月) 13:41:47.43ID:5Y5z53c+
ラムダ式にthisをキャプチャしても単なるポインタのコピーだけだよね
うーんもうあきらめようかな
2020/09/14(月) 14:04:34.23ID:Bl6WtuBD
この話はどう?

https://www.softek.co.jp/SPG/Pgi/TIPS/public/general/multicore-para.html
2020/09/14(月) 14:31:35.53ID:lDodbDrd
> 1スレッド:一番早い
> 2スレッド:最悪
> 3スレッド:2スレよりマシ
> 4スレッド:3スレよりマシだけど1スレより遅い。CPU使用率100%に張り付く。

これで結論は出てる。同期コストを見積もれない馬鹿は並列化すんなってこと。
479デフォルトの名無しさん
垢版 |
2020/09/14(月) 14:31:55.00ID:5Y5z53c+
スレッドで動かすタスクの単位がデカすぎてキャッシュに乗りきらなかった可能性ですかね
ありえそう
480デフォルトの名無しさん
垢版 |
2020/09/14(月) 14:50:37.02ID:5Y5z53c+
同期コストに目をつけるのが的外れってことはわかる
2020/09/14(月) 15:07:54.11ID:lDodbDrd
まだその小学生の理科の実験みたいな分析を続けるのはいかがなものか。ここはム板である。
答えはコードに書いてある。夏休みの宿題じゃないから答えを見ていい。
結果とコードがあるから後はそれを理解する脳みそが足りてるかどうかだけ。

>>480
結論は出たな。キミにはこのスレはまだ早い。並列化=同期。基礎知識が全く足りてない。
コードを見てコストが読めない人が一体なにを最適化するのだ。
キミのやってることはPCパーツをとっかえひっかえしてベンチ走らす自作マニアと同じだ。
482デフォルトの名無しさん
垢版 |
2020/09/14(月) 15:24:00.24ID:5Y5z53c+
よくしゃべる無能だな
2020/09/14(月) 15:29:50.65ID:tgbt1xqp
メモリ足りてないとかないよな
484デフォルトの名無しさん
垢版 |
2020/09/14(月) 15:32:26.78ID:5Y5z53c+
同期コストもなにも共有するリソースないし
お前みたいな雑魚に話しかけてねえよ
485デフォルトの名無しさん
垢版 |
2020/09/14(月) 15:39:22.64ID:5Y5z53c+
メモリは余裕ありますね
>>477
に載ってる内容で今週末くらいに確認してみます
2020/09/14(月) 20:40:46.18ID:WpcYzJ76
>>466、prefのここ、一桁も違う、2C/4Tってキャッシュサイズどれくらい?orCPUの型番なに?

1T:  233,710,687 cache-references:u (57.13%)
3T: 2,821,811,091 cache-references:u (57.15%)

1T:  172,491,811 L1-dcache-load-misses:u # 0.16% of all L1-dcache hits (57.14%)
3T: 1,355,563,439 L1-dcache-load-misses:u # 1.26% of all L1-dcache hits (57.16%)
2020/09/14(月) 20:43:28.09ID:WpcYzJ76
>>486、すまん、タイプミスです

× pref
〇 perf
488デフォルトの名無しさん
垢版 |
2020/09/15(火) 00:54:25.17ID:cZkGG5+C
CPUは↓です
https://ark.intel.com/content/www/jp/ja/ark/products/85212/intel-core-i5-5200u-processor-3m-cache-up-to-2-70-ghz.html
2020/09/15(火) 07:39:41.08ID:AdrM302u
ここは昔から機械語レベルの最適化スレなんだが、
そういう丸投げ系の上流の話はスレ分けたほうがよくないか。バイナリは見る気ないんだろ?
2020/09/15(火) 13:44:37.95ID:xfAMzDEm
同期コストとかまったく関係無かったねw
2020/09/18(金) 14:56:14.26ID:O98b4bbM
       ,、‐ " ̄:::゙:丶、
    ,r::::l3゙::::::::/ハヽ:ヽ::::、:ヽ
    {::://:::::::// ヽ\ト、:::::::!
    ヾ l:::::::/ 丶   `ヾ ィ、:::|
     |;:r::|  O`  'O ゙ハ|   < ここ初心者がくるところじゃないから
      ヽハ :.:.    :.: レ
        ´\ r‐--‐、,ノ
 r、     r、/ヾ ̄下ヘ
 ヽヾ 三 |:l1、_ヽ/__ .ィヽ
  \>ヽ/ |` }    n_n| |
   ヘ lノ `'ソ     l゚ω゚| |
    /´  /      ̄|. |
2020/10/01(木) 16:30:20.85ID:C7xRzI9k
なんだこの馬鹿議論は。
493デフォルトの名無しさん
垢版 |
2020/10/02(金) 14:52:54.88ID:R9hS5H3t
>>492
そう思うなら思い当たる原因とか教えてあげたら?
一言言うだけだよ
494デフォルトの名無しさん
垢版 |
2020/10/02(金) 15:13:27.56ID:R9hS5H3t
それすらできないと本当に馬鹿なのがどっちか疑われても仕方ない
2020/10/02(金) 15:30:34.86ID:TECFGYHm
sage入れずに書いているのは1人だけ・・・
2020/10/02(金) 16:17:08.57ID:R9hS5H3t
こんな機能あったのか
すまんな5ch使ったの最近なんだ
2020/10/02(金) 16:21:49.97ID:rTJNlmL4
ID:PyqKwzZq
ID:5Y5z53c+
ID:R9hS5H3t

はいはい(笑)
2020/10/02(金) 16:32:57.58ID:R9hS5H3t
もしかしてここって底辺の集まり?
2020/10/02(金) 17:33:14.36ID:rTJNlmL4
えーえーそうでちゅよ(笑)
2020/10/02(金) 18:21:05.73ID:OFlYu8W1
>>493
何の切り分けもしてない頓珍漢な結果ではなく全コード出しなよ。ここム板だよ?
アセンブラわかりませんとか、自分で書いたC++コードがどういうバイナリ吐くか想像もできないとか、
最適化、高速化スレでは話にならないんだけど初心者プログラマ君。
2020/10/02(金) 18:26:33.85ID:R9hS5H3t
底辺が必死だなw
502デフォルトの名無しさん
垢版 |
2020/10/03(土) 09:40:53.11ID:F7oAx4CC
餓鬼に餌を与えないでください
2020/10/09(金) 19:32:19.84ID:6ayaX4HS
>>488
コア内のキャッシュがコンフリクトしまくっていると予想
ハイパースレッディングをoffにして2スレッドにしたらいいと予想
2020/10/09(金) 19:56:21.81ID:zHpvTSgq
HTが何か分かってないレベルでマルチスレッドにしたら遅くなったとか入門者スレでやれよ。
2020/10/10(土) 07:36:17.00ID:Jl1ICDJn
>>470
キャッシュライン コンフリクト ミス しまくるような
配列の数にしているんだろうね
2020/12/09(水) 21:38:54.77ID:2ICSyPg3
oneAPI って無料なん?
507デフォルトの名無しさん
垢版 |
2022/04/21(木) 11:21:49.16ID:uYH/mfeQ
基本無料やぞ
というかvtune使わずに最適化なんぞ出来る訳が無い
2022/04/21(木) 11:53:42.82ID:9/r0Uuj1
OPPAIに見えた
2022/07/30(土) 16:25:46.55ID:paa5jUiA
低俗化せいこう
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況