C++やインラインアセンブラ、SSEなどによる高速化の手法
について語りましょう。
前スレ
【C++】高速化手法【SSE】
http://peace.2ch.net/test/read.cgi/tech/1130349336/
【C++】高速化手法【SSE】2 [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2015/05/21(木) 01:53:58.15ID:ZhKmhhGS
2015/05/21(木) 01:55:23.61ID:taYfOZ7g
2015/05/21(木) 02:00:37.40ID:ZhKmhhGS
1スレ10年も掛かったのかwww
compiler intrinsicsの普及と、x64ではインラインアセンブラが使えなくなったのが
またSIMDの再普及に繋がる気がする
SSE3、SSE4、AVX、AVX2、FMAと言った新しい命令も増えているのも理由の一つか
compiler intrinsicsの普及と、x64ではインラインアセンブラが使えなくなったのが
またSIMDの再普及に繋がる気がする
SSE3、SSE4、AVX、AVX2、FMAと言った新しい命令も増えているのも理由の一つか
2015/05/21(木) 02:02:04.95ID:ZhKmhhGS
2015/05/21(木) 02:07:04.14ID:ZhKmhhGS
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はライブラリ化しやすいから、多くのものが既にライブラリ化されてて、
ほとんどの人はそれを使うだけですむので、自分で書く必要性が少なくて、
故に過疎りやすいってのもあると思うがね。
後からの使い勝手自体はマルチスレッドよりも良いんだがな。ライブラリ化もただの関数なので問題ない。
マルチスレッドだと関数の中だけで閉じなくて、アプリ全体の設計の部分まで話が広がるので、
機能単位でライブラリ化するのが難しく、簡単に使いまわせない。
ま、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が未対応みたいな期間長すぎたな
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乗を取り出すことで、
(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と取り、下位からの桁上りがないとすると、ビット演算でデータ取り出せる。
上の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; }
#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倍程度に収まっていたが、初期はスカラ版より遅い結果しか出せていなかった。
スカラ版と等速なら話はわかるが、
なぜ遅くなるのか?
俺も似たようなこと遭遇した記憶はあるが
詳細が思い出せない。
5倍程度に収まっていたが、初期はスカラ版より遅い結果しか出せていなかった。
スカラ版と等速なら話はわかるが、
なぜ遅くなるのか?
俺も似たようなこと遭遇した記憶はあるが
詳細が思い出せない。
2015/05/27(水) 13:45:50.89ID:2yaRNWB+
SIMD関連はまず命令の実行に都合のいいようにデータを作成するのと
結果を取り出すのに時間がかかるからじゃね?
それとSSEレジスタは128bitなので1処理当たり32bit使うと4並列にしかならない
AVX/AVX2なら256bitなのでこちらの方が速度が上がると思う
結果を取り出すのに時間がかかるからじゃね?
それとSSEレジスタは128bitなので1処理当たり32bit使うと4並列にしかならない
AVX/AVX2なら256bitなのでこちらの方が速度が上がると思う
18デフォルトの名無しさん
2015/05/27(水) 15:22:12.59ID:TYkQbksz >>16
構造体へのコピーをスカラで何倍もの時間かけてやってたから
本体処理が4秒が1秒に縮まったところでセットアップに5秒かかってたら意味がない
ボトルネックを解消するつもりでSIMDを使ったつもりが新たな別のボトルネックを作ってました
しかもなんで遅くなったのか使った本人が認識してないというの。
構造体へのコピーをスカラで何倍もの時間かけてやってたから
本体処理が4秒が1秒に縮まったところでセットアップに5秒かかってたら意味がない
ボトルネックを解消するつもりでSIMDを使ったつもりが新たな別のボトルネックを作ってました
しかもなんで遅くなったのか使った本人が認識してないというの。
2015/05/27(水) 18:10:04.45ID:1+NR3ImF
つまりSIMDレジスタで計算する為に
スカラ以上に命令を使った為
遅くなったということか。
前スレの968では見直ししたが2倍ほど遅いと言っていた。
本来4倍になるはずが1/2倍、
8倍も遅くなるなんてありえるか?
根本的に何か問題があるとしか
思えん。
スカラ以上に命令を使った為
遅くなったということか。
前スレの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使っても不幸にしかならない
並列化アルゴリズムに理解のないやつがいきなりSSEやAVX使っても不幸にしかならない
2015/05/27(水) 19:52:40.39ID:21LcoVTJ
然しものSIMDも、まったくオーバーヘッドがないわけじゃぁない。
SIMDに演算させるためのデータ構造整えなんかの命令分がオーバーヘッドになる。
これを最小に抑えつつ、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])
{
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];
}
}
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);
}
あとわかるよな?
{
__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]);
__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])を参照してるような…
ゴミが入るだけだから気にしなくていいってことですか?
領域外(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)))を付けて置くといいわな
ここによるとアラインされてなくてもいける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)))
__attribute__((aligned(32)))
2015/06/09(火) 08:01:24.58ID:uvrBn2pL
別にアライメントの話じゃないし。
つうか領域外読み込んでも
落ちないからOKとか
それはないから
つうか領域外読み込んでも
落ちないから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);
}
ミスアラインロード使わないとめんどくさいんだよねー
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ビットシフト高速にできますかね?
11 x 11 なら128ビットに納まるから上下左右1ビットシフト高速にできますかね?
2015/06/09(火) 21:47:54.51ID:X9YqiuVE
ビットボードでも作ってるの?
11ビットとかかえって扱いづらいからやめとき?pslldq/psrldqは8ビット単位だからいろいろ面倒だぞ
16x16でもvextractf128+vpalignrの2命令ですむんんだからそれが一番無難
2のべき乗のほうが扱いやすい
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
2015/06/09(火) 22:00:22.26ID:uvrBn2pL
SIMDとか並列プログラムは
各要素間の関連が薄けりゃ薄いほど良い
相関ゼロなら100%の性能が出せるが
逆なら劣化する。
要はお前のプランは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レジスタか。ちと苦しいな
碁盤の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を使わないとか?(´・ω・`)
後、変なclassを使わないとか?(´・ω・`)
52デフォルトの名無しさん
2015/06/22(月) 16:45:31.61ID:BEzC3Nfs クラスで遅くなるとか迷信でしょ
2015/06/22(月) 16:51:45.79ID:cpn0Yuio
今はSIMDがあるから
かろうじてC++使ってるけど
他で行けるようになったら
捨てると思う
かろうじてC++使ってるけど
他で行けるようになったら
捨てると思う
2015/06/22(月) 16:56:25.34ID:h2li5DGU
クラスを使うから遅くなるんじゃなくて、動的なポリモーフィズムを実現するための仮想関数テーブルや
あるいは過剰にコンストラクタ呼び出しで遅くなる。
あるいは過剰にコンストラクタ呼び出しで遅くなる。
2015/06/22(月) 19:26:36.11ID:468RGWDu
>>53
C++と同程度の速度がでる言語って何よ?
C++と同程度の速度がでる言語って何よ?
2015/06/22(月) 19:59:05.05ID:cpn0Yuio
いやーそんなん無いけどさー
己が納得出来れば良い訳よ
vector4クラスとかあって
最適化コンパイルでSIMD使いますよ〜
で良い。所詮趣味だし俺はそれで乗り換え出来る。
今はfortranやC++以外にはそれすらも無いからな
己が納得出来れば良い訳よ
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として使うってのとほぼ同じ意味なんじゃ……?
おっさんおっさん、それってCとして使うってのとほぼ同じ意味なんじゃ……?
2015/06/22(月) 23:15:07.42ID:OAaA5v1W
演算子オーバーロードやテンプレートがCにあるならそうだね
どの程度の抽象化までならオーバーヘッドが生じないかはdvec.hあたりのIntel謹製クラスライブラリ見ればわかるでしょ
どの程度の抽象化までならオーバーヘッドが生じないかはdvec.hあたりのIntel謹製クラスライブラリ見ればわかるでしょ
61マ○コデラックス
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 ) にするとか人力で最適化されやすくしないといけないことがある。
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ってよく知らないんだよなぁ。
イケてるギークはつかってるらしいが。
これを機にやってみるか…
イケてるギークはつかってるらしいが。
これを機にやってみるか…
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化してみましたが速くなりませんでした。
スレの皆さん最適化よろしくお願いします。
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演算以外とかはやりきってるか?
アルゴリズムの見直しとか、CPU演算以外とかはやりきってるか?
2015/07/04(土) 22:49:03.16ID:g1Tiw5j6
ちなみにmakefileは依存関係全然考慮してないので毎回クリーンしてくださいw
コンパイラは64bit MinGWです。
コンパイラは64bit MinGWです。
2015/07/04(土) 22:51:51.53ID:g1Tiw5j6
2015/07/04(土) 23:13:48.96ID:+CPi2s1F
2015/07/04(土) 23:23:18.20ID:g1Tiw5j6
128bitで一つのビットボードになっていてもろandとかorとかandnotとかさせるので
SSE2で速くなるかなと思ったんですが。
AVX2は256bitですよね?どうやって適応させるか難しいです。
iGPGPUは使い方しらないorz
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: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をとった部分のビットだけ抽出するのはあるようなんですが・・・
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クロック
汎用レジスタでの話ならシフトと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
2015/07/05(日) 14:43:20.51ID:pEwkWnHA
>>90
ちょうどこんな感じです!
このソースみたいにlowerとupperを取り出して返す関数つくろうと思ってました
下4bitはそのまま0xfでmaskして、上4bitは4bitシフトしてからmaskなのでこのコードで行けそうです
ありがとうございます
ちょうどこんな感じです!
このソースみたいにlowerとupperを取り出して返す関数つくろうと思ってました
下4bitはそのまま0xfでmaskして、上4bitは4bitシフトしてからmaskなのでこのコードで行けそうです
ありがとうございます
2015/07/05(日) 15:10:55.88ID:5Fixj9dP
え?
movzx eax, al
shr eax, 4
じゃいかんのか?
movzx eax, al
shr eax, 4
じゃいかんのか?
2015/07/05(日) 15:14:44.70ID:IoTdVT02
どうしてもSIMD使いたいんだとさ
クロック数がかえって増えようとも
クロック数がかえって増えようとも
2015/07/05(日) 16:55:23.92ID:pEwkWnHA
いえアセンブリがわからないだけです!
>>92でいけるのならやってみます!ありがとうございます!
>>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;
}
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;
}
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;
}
100デフォルトの名無しさん
2015/07/05(日) 19:58:51.19ID:13erbQHH 立ってるビット数が多いときはその数え方だと時間喰いそう
101デフォルトの名無しさん
2015/07/05(日) 20:02:29.73ID:rj88vDKP2015/07/05(日) 22:27:19.60ID:HlvO5/Ro
103デフォルトの名無しさん
2015/07/05(日) 23:55:30.55ID:pEwkWnHA2015/07/06(月) 00:06:48.57ID:MmNHQVlS
8ビット時代じゃねそれ
別にシフトの変量でサイクル数は変わらんよ
別にシフトの変量でサイクル数は変わらんよ
105デフォルトの名無しさん
2015/07/06(月) 00:08:37.50ID:obJwiAn/106デフォルトの名無しさん
2015/07/06(月) 00:15:26.05ID:1z10P7tP 今のCPUはバレルシフタで1クロックじゃね
107デフォルトの名無しさん
2015/07/06(月) 09:26:17.06ID:9h3CM3fP 386からは一発だな
その代わりマスクがかかる
286ま命令はあったがマイクロコード
8086はCLで回数指定以外、多ビットシフト命令が無かった
はず
その代わりマスクがかかる
286ま命令はあったがマイクロコード
8086はCLで回数指定以外、多ビットシフト命令が無かった
はず
108デフォルトの名無しさん
2015/07/06(月) 17:03:51.46ID:obJwiAn/ cpuの命令セットて全部アセンブラに還元されるんですか?
もしそうなら命令セットてアセンブラで作ったライブラリみたいなものですよね?
もしそうなら命令セットてアセンブラで作ったライブラリみたいなものですよね?
109デフォルトの名無しさん
2015/07/06(月) 17:18:20.33ID:hLGIY9Ls アセンブラとCPU命令と機械語は一対一対応で見かけだけの違いだろ。
より人間よりの記法がアセンブラ。
より人間よりの記法がアセンブラ。
110デフォルトの名無しさん
2015/07/06(月) 17:19:36.84ID:g1ABbiM2 ライブラリ?
111デフォルトの名無しさん
2015/07/06(月) 18:59:39.73ID:K/ajJWQg アセンブラに、1語で複数インストラクションに対応する組み込み済みマクロはよくあるね。
ユーザーにとっては見かけ上機械語のニモニックと変わらん
ユーザーにとっては見かけ上機械語のニモニックと変わらん
112デフォルトの名無しさん
2015/07/07(火) 12:45:53.44ID:cmwJTquu マイクロコードからビルドされた
ライブラリだな。
ライブラリだな。
113デフォルトの名無しさん
2015/07/16(木) 18:53:32.86ID:l6l+0TT5 シフト命令がサイクル数変わらずって事は
もしや乗算命令も……?
もしや乗算命令も……?
114デフォルトの名無しさん
2015/07/17(金) 00:15:18.58ID:c113lVsF 乗算も1クロックだよ。かくして除算の遅さが際立つ。
115デフォルトの名無しさん
2015/07/17(金) 03:37:00.44ID:Gq3JBEl3 3くらいじゃなかったか?
116デフォルトの名無しさん
2015/07/20(月) 17:52:21.46ID:rBoKIpMh 乗算回路って素朴な筆算より効率的な回路存在するの?
117デフォルトの名無しさん
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
ニーモニックとオペコードは一対一とは限らないよ。
ニーモニックとオペコードは一対一とは限らないよ。
120デフォルトの名無しさん
2015/07/21(火) 23:36:30.91ID:cKSGyEK/121デフォルトの名無しさん
2015/07/22(水) 01:54:32.08ID:Vve5AGCV >>116
まあ筆算は筆算だけどね、boothのアルゴリズムとかwallace treeとか調べてみるといいと思うよ
まあ筆算は筆算だけどね、boothのアルゴリズムとかwallace treeとか調べてみるといいと思うよ
122デフォルトの名無しさん
2015/07/29(水) 01:28:21.81ID:OiAbEds4 >>76は今の時点だとあたってるように思えるなあ
CPUと頻繁にデータやり取りしたり、十分長い時間計算させるのでなければオーバーヘッド大きすぎるし
CPUと頻繁にデータやり取りしたり、十分長い時間計算させるのでなければオーバーヘッド大きすぎるし
123デフォルトの名無しさん
2015/10/01(木) 15:36:21.06ID:X8BXmh6N pcooがいいかboostがいいかって話もここでいいの?
124デフォルトの名無しさん
2015/10/01(木) 16:47:08.19ID:l3udI6g3125デフォルトの名無しさん
2015/10/01(木) 18:32:50.19ID:X8BXmh6N どもです
126デフォルトの名無しさん
2015/10/03(土) 22:48:54.48ID:QjNm5BqA127デフォルトの名無しさん
2015/10/23(金) 09:29:13.47ID:I0uni5nx ☆ 日本の核武装は早急に必須ですわ。☆
総務省の『憲法改正国民投票法』、でググってみてください。
日本国民の皆様方、2016年7月の『第24回 参議院選挙』で、日本人の悲願である
改憲の成就が決まります。皆様方、必ず投票に自ら足を運んでください。お願い致します。
総務省の『憲法改正国民投票法』、でググってみてください。
日本国民の皆様方、2016年7月の『第24回 参議院選挙』で、日本人の悲願である
改憲の成就が決まります。皆様方、必ず投票に自ら足を運んでください。お願い致します。
128デフォルトの名無しさん
2015/11/18(水) 22:46:47.01ID:LC5LQUuD129デフォルトの名無しさん
2015/11/23(月) 15:07:59.69ID:ZNmYnLez130デフォルトの名無しさん
2015/11/23(月) 17:35:17.53ID:OK+rBFmG intelの乗算がスループットが1clock、レイテンシが3clock。
どうやったら3clockで計算が終わるん?
どうやったら3clockで計算が終わるん?
131デフォルトの名無しさん
2015/11/23(月) 17:50:28.72ID:+Ddm9172 むしろどうやって乗算を3clockに分割しているのかが気になる
132デフォルトの名無しさん
2015/11/24(火) 13:23:40.31ID:GksIIF6P Load
Multiply
Store
Multiply
Store
133デフォルトの名無しさん
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, 丸め, 指数計算
とか
乗算は
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
運転手が自動車のエンジンの内部構造を知る必要はない
車を動かすだけの最低限の知識さえあればいい
車を動かすだけの最低限の知識さえあればいい
138デフォルトの名無しさん
2015/11/25(水) 04:32:17.38ID:eJijZLoL 内部構造を知る事による運転技術の向上の可能性を否定出来ない。 (英訳せよ
139デフォルトの名無しさん
2015/11/25(水) 08:50:00.26ID:s9hTLLjK 速いレーシングドライバーやライダーというものは、エンジンの内部構造だけではなく、
フレームの特性から、タイヤマネージメント、そしてメンタルをコントロールするための心理学まで詳しい。
フレームの特性から、タイヤマネージメント、そしてメンタルをコントロールするための心理学まで詳しい。
140デフォルトの名無しさん
2015/11/25(水) 11:35:26.47ID:Sra0FKsR そりゃメカニックに指示を出さなきゃならないからな
141デフォルトの名無しさん
2015/11/25(水) 16:07:40.71ID:9VrR2D9e142デフォルトの名無しさん
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
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
143デフォルトの名無しさん
2015/11/25(水) 20:25:16.25ID:pv6cEe5k >>141
マジか!w
マジか!w
144デフォルトの名無しさん
2015/11/25(水) 23:05:14.13ID:6PwtIsKT 頭のいい人はユーモアのセンスもあるってことか
145デフォルトの名無しさん
2015/11/26(木) 00:37:39.38ID:4Zv1RZyd ぶんぶ〜ん
146デフォルトの名無しさん
2015/11/26(木) 11:16:56.37ID:anPORYOg haswellはほんとエラッタが多くしかも不安定。
147デフォルトの名無しさん
2015/11/26(木) 21:49:54.17ID:FNrtCodv 恥well
148デフォルトの名無しさん
2015/11/27(金) 00:11:49.01ID:k1otT5p2 haswellってなーに
149デフォルトの名無しさん
2015/11/27(金) 00:58:51.08ID:B/NYVAdM 電源回路の一部をCPUに乗っけてノイズ乗りまくり不安定になった馬鹿設計のCPU。
150デフォルトの名無しさん
2015/11/27(金) 01:32:59.31ID:k1otT5p2 させん 理解出来ませんw これでも工学部卒orz
暫くROMります。
暫くROMります。
151デフォルトの名無しさん
2015/11/29(日) 17:12:51.03ID:U49gaUJj intel の主力 CPU製品の世代・バージョンを表すコード名だよ
セレロンとか Core7 とか商品名に隠れて見えにくくされてる
ちなみに現行最新は broadwell に替わってるらしい
セレロンとか Core7 とか商品名に隠れて見えにくくされてる
ちなみに現行最新は broadwell に替わってるらしい
152デフォルトの名無しさん
2015/11/30(月) 05:38:13.03ID:McAnpNWD 最新は第6世代のSkylakeだよ
Broadwellは第5世代
Broadwellは第5世代
153デフォルトの名無しさん
2015/11/30(月) 06:10:56.08ID:VD56T+vD みなさんHWもつおいんですね
154デフォルトの名無しさん
2015/11/30(月) 13:05:08.68ID:KChypJW3 しかしインテルの話題ばかりですね
AMDがかわいそう
AMDがかわいそう
155デフォルトの名無しさん
2015/11/30(月) 14:57:41.28ID:Ee9Jt/HC 単にAMD64が素晴らしすぎて、最適化の必要がないからです。
156デフォルトの名無しさん
2015/12/01(火) 09:29:42.23ID:euK/mxZa 素晴らしいかどうかは兎も角、最適化の必要がないのは同意。
だってみかけねぇもんw
だってみかけねぇもんw
157デフォルトの名無しさん
2015/12/01(火) 09:39:53.24ID:WgVnPdZx haswell、amd64知らないっておまえらゆとりすぎだろ、おい。
and64っていわゆるx64命令セットのことだ。AMDのCPUのことじゃない。
and64っていわゆるx64命令セットのことだ。AMDのCPUのことじゃない。
158デフォルトの名無しさん
2015/12/01(火) 13:04:48.47ID:1tGEKGVm AMD64って3DNowのことだが(失笑)
159デフォルトの名無しさん
2015/12/01(火) 13:06:30.50ID:xuYieJrT そうかそうか、Intelは3DNowの後追いをしたのか
情けないな
情けないな
160デフォルトの名無しさん
2015/12/01(火) 13:22:36.19ID:BYRY3bxz AMDはx86互換の64bitCPUを早い段階で提唱したのが最大の功績
MSもそれに乗っかった
Intelまかせだったら64bit環境のコンシューマへの普及が遅れていたか
満足なものにならなかった可能性がある
IntelはItaniumとかいう普通の人からしたらゴミな物を売りたかっただろうし
将来的にはIA-64に置き換えるつもりだったらしいが
未だに32bitアプリが溢れていることを考えると互換を切るのは良くなかった
一応激遅のx86エミュレーションは付いていたが
互換で食っていた会社の癖に互換を切り捨てるとは何事ぞ
MSもそれに乗っかった
Intelまかせだったら64bit環境のコンシューマへの普及が遅れていたか
満足なものにならなかった可能性がある
IntelはItaniumとかいう普通の人からしたらゴミな物を売りたかっただろうし
将来的にはIA-64に置き換えるつもりだったらしいが
未だに32bitアプリが溢れていることを考えると互換を切るのは良くなかった
一応激遅のx86エミュレーションは付いていたが
互換で食っていた会社の癖に互換を切り捨てるとは何事ぞ
161デフォルトの名無しさん
2015/12/01(火) 16:31:29.60ID:xuYieJrT 互換切っちゃいけねえのは当然かもしんないけど
未だに4bitだか8bitのCPUに由来する制限や設計の歪みを引き継ぎ続けるのもなぁ……
カウンタレジスタとしてはRCXしか使えませんとかあまりにもウンコすぎる
未だに4bitだか8bitのCPUに由来する制限や設計の歪みを引き継ぎ続けるのもなぁ……
カウンタレジスタとしてはRCXしか使えませんとかあまりにもウンコすぎる
162デフォルトの名無しさん
2015/12/01(火) 17:19:11.09ID:yW8K+bhB そんなん先読みやら最適化の都合じゃないの?
それに互換ぶっ壊していいのなら ARM にしちゃいなよ
それに互換ぶっ壊していいのなら ARM にしちゃいなよ
163デフォルトの名無しさん
2015/12/01(火) 20:49:07.03ID:DqfiEd0O 64bit化の時が、唯一のx86系命令のエンコードを変えるチャンスだった
汎用レジスタは16個に増えたけど、それ以外はしょぼいまま継ぎ足し継ぎ足しのエンコード
命令が複雑すぎるし効率的じゃないし汎用整数命令が2オペランドのままだし
汎用レジスタ数増大
2SRC, 1DEST の非破壊演算
3オペランドの自由論理演算
アドレス計算用の簡易で高速な積和命令追加 (いまだLEAが重要命令って異常だろ)
乗算除算命令のレジスタ縛り削除
フラグ未使用の演算増加 or フラグの多重化
一応ちまちまは増えてるけどそんなんじゃダメ
一気に増やさないと使われないから意味がない
汎用レジスタは16個に増えたけど、それ以外はしょぼいまま継ぎ足し継ぎ足しのエンコード
命令が複雑すぎるし効率的じゃないし汎用整数命令が2オペランドのままだし
汎用レジスタ数増大
2SRC, 1DEST の非破壊演算
3オペランドの自由論理演算
アドレス計算用の簡易で高速な積和命令追加 (いまだLEAが重要命令って異常だろ)
乗算除算命令のレジスタ縛り削除
フラグ未使用の演算増加 or フラグの多重化
一応ちまちまは増えてるけどそんなんじゃダメ
一気に増やさないと使われないから意味がない
164デフォルトの名無しさん
2015/12/01(火) 21:11:09.22ID:lfUAYGEe 一切のしがらみを解き放って、ゼロベースで命令セットを設計したら、
どれくらいの性能を叩きだせるんだろうか?
どれくらいの性能を叩きだせるんだろうか?
2015/12/01(火) 21:16:38.38ID:woh9g3Fk
>>163の発想で出来上がったのがItanium
166デフォルトの名無しさん
2015/12/01(火) 21:23:08.46ID:DqfiEd0O メニーコア系だな
GPUとCPUとDSPの良いところ取り
GPUとCPUは区別がなくなる
デコーダーやスケジューラーは極力小さく、
演算器と入出力に大きく回路を割く
GPUとCPUとDSPの良いところ取り
GPUとCPUは区別がなくなる
デコーダーやスケジューラーは極力小さく、
演算器と入出力に大きく回路を割く
167デフォルトの名無しさん
2015/12/01(火) 21:26:16.98ID:DqfiEd0O Itaniumの失敗は、
x86を軽視した
コンパイル時最適化がCPUの進化に合わなかった
こんな感じか?
x86を軽視した
コンパイル時最適化がCPUの進化に合わなかった
こんな感じか?
168デフォルトの名無しさん
2015/12/01(火) 21:27:03.93ID:DqfiEd0O どっちかというとマーケティング的要因の方が大きかったかと
2015/12/01(火) 21:28:26.40ID:woh9g3Fk
並列化は並列化できないクリティカルパスで行き詰る
パンの製造ラインをいくら増やそうが1つのパンの一次発酵と二次発酵を同時にできないのと同じ。
パンの製造ラインをいくら増やそうが1つのパンの一次発酵と二次発酵を同時にできないのと同じ。
170デフォルトの名無しさん
2015/12/01(火) 21:39:52.86ID:DqfiEd0O その為に非対称メニーコアとかいう考えもあるけど...
今ある重い処理の多くは並列化可能でしょ
今ある重い処理の多くは並列化可能でしょ
171デフォルトの名無しさん
2015/12/01(火) 21:44:54.96ID:DqfiEd0O で団子の案は?
172デフォルトの名無しさん
2015/12/01(火) 21:47:11.88ID:WgVnPdZx skylakeでipc伸びたで
2015/12/01(火) 21:47:21.62ID:woh9g3Fk
決して順序が決まってる処理を同時並列化することはできない
174デフォルトの名無しさん
2015/12/01(火) 21:48:08.42ID:lfUAYGEe175デフォルトの名無しさん
2015/12/01(火) 21:49:36.60ID:WgVnPdZx 条件分岐あるからクリティカルパスも変動するから、消費電力を対価に投棄実行できなくもないよ。
176デフォルトの名無しさん
2015/12/01(火) 22:00:04.59ID:DqfiEd0O177デフォルトの名無しさん
2015/12/01(火) 22:01:37.59ID:DqfiEd0O2015/12/01(火) 22:21:53.65ID:woh9g3Fk
ハードの設計の努力を知らない下衆が偉そうに語ることは何一つないのよ
与えられたものをうまく使う方法だけ考えればいい
与えられたものをうまく使う方法だけ考えればいい
179デフォルトの名無しさん
2015/12/01(火) 22:22:38.64ID:M545w8lo クリティカルパスってそんな問題になるかなぁ。
コア数が1万とかになったら大問題かもしれんが、
コア数4とかじゃあんまり問題に成らなくね。
コア数が1万とかになったら大問題かもしれんが、
コア数4とかじゃあんまり問題に成らなくね。
180デフォルトの名無しさん
2015/12/01(火) 22:27:59.76ID:BYRY3bxz 最近の事情は良く知らないんだけど
IntelのCPUでGPU内臓じゃないのってあるの?
サーバー用じゃなく
IntelのCPUでGPU内臓じゃないのってあるの?
サーバー用じゃなく
2015/12/01(火) 22:30:35.15ID:woh9g3Fk
182デフォルトの名無しさん
2015/12/01(火) 22:57:39.27ID:BYRY3bxz ちょっと一般向けとは言いがたいね
しかもHaswellだし
個人的にGPUはグラボ刺すからCPUに内蔵してほしくないんだよなぁ
GPU無しで、その分値段を落としたモデルがほしい
しかもHaswellだし
個人的にGPUはグラボ刺すからCPUに内蔵してほしくないんだよなぁ
GPU無しで、その分値段を落としたモデルがほしい
183デフォルトの名無しさん
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関係でしょ
必要ないんだけどなぁ
http://pc.watch.impress.co.jp/img/pcw/docs/726/778/html/05.jpg.html
を見る限り左のほうにあるの、全部GPU関係でしょ
必要ないんだけどなぁ
184デフォルトの名無しさん
2015/12/02(水) 00:01:13.31ID:lLZXeX9n >>178
一番偉そうな下衆がなんか書いてるwww
一番偉そうな下衆がなんか書いてるwww
185デフォルトの名無しさん
2015/12/02(水) 00:34:39.84ID:0XpBrEKR GPUユニットは並列演算に利用できるのにそれが必要ない用途ねぇ。
Xeonでいいはずなのにキャッシュもメモリ帯域もコア数も必要ないってことですよねぇ。
結局、内臓GPU必要ないってことはゲーム用途でしょうねぇ。
Xeonでいいはずなのにキャッシュもメモリ帯域もコア数も必要ないってことですよねぇ。
結局、内臓GPU必要ないってことはゲーム用途でしょうねぇ。
186デフォルトの名無しさん
2015/12/02(水) 04:57:08.43ID:rypJABRF >>179
クリティカルパスってコア数が少ない方がループ回数が増えるから影響が大きくなると思うけどな
クリティカルセクションと勘違いしてない?
この話の流れでクリティカルパスがでてくるのがおかしいんだよ
アウトオブオーダにしろ、VLIWやメイニーコアにしろ、クリティカルパスの問題は一緒
違いがあるのは並列化の粒度でしょ
小さい粒度のはOoO、大きなのはメイニーコアが適していて、静的な並列化は中途半端だったということ
クリティカルパスってコア数が少ない方がループ回数が増えるから影響が大きくなると思うけどな
クリティカルセクションと勘違いしてない?
この話の流れでクリティカルパスがでてくるのがおかしいんだよ
アウトオブオーダにしろ、VLIWやメイニーコアにしろ、クリティカルパスの問題は一緒
違いがあるのは並列化の粒度でしょ
小さい粒度のはOoO、大きなのはメイニーコアが適していて、静的な並列化は中途半端だったということ
2015/12/02(水) 06:15:06.45ID:LTVoUgjb
ディスパッチ&リダクションのコストを軽視してるな
2015/12/02(水) 06:21:53.98ID:LTVoUgjb
同じコア性能なら多いほうが多い、それは当たり前だ
しかし低性能なコアを複数並べれば高機能なコアより常に速いというのは幻想
KNCのボトルネックがまさにイニシャル処理で、KNC側でやると遅いから大体ホスト側にやらせることになる
しかし低性能なコアを複数並べれば高機能なコアより常に速いというのは幻想
KNCのボトルネックがまさにイニシャル処理で、KNC側でやると遅いから大体ホスト側にやらせることになる
189デフォルトの名無しさん
2015/12/02(水) 12:21:50.26ID:rypJABRF また的外れなこと言ってる
団子って周りから人の話聞いてないって言われないか?
OoOはCPU内でディスパッチやリダクションしてる為に熱的に限界を迎えて
性能があげられなくなったからメイニーコアやGPUの方向性が出てきたんでしょ
用途によって向き不向きがあるから棲み分けするようになって、今はその匙加減を
調整してる状況なんだろうな
CELLみたいにバランスの悪いのは結局は残れないってことなんだろうね
団子って周りから人の話聞いてないって言われないか?
OoOはCPU内でディスパッチやリダクションしてる為に熱的に限界を迎えて
性能があげられなくなったからメイニーコアやGPUの方向性が出てきたんでしょ
用途によって向き不向きがあるから棲み分けするようになって、今はその匙加減を
調整してる状況なんだろうな
CELLみたいにバランスの悪いのは結局は残れないってことなんだろうね
190デフォルトの名無しさん
2015/12/02(水) 12:27:00.90ID:rypJABRF リダクションは変だったな、リタイアメントだわ
191デフォルトの名無しさん
2015/12/02(水) 14:17:02.16ID:aHX8DqFu GPUユニットより柔軟性の高いSIMD演算器を高速なローカルストレージと一緒にCPUに内蔵させたい
GPGPU無駄多すぎ
GPGPU無駄多すぎ
192デフォルトの名無しさん
2015/12/02(水) 15:49:04.71ID:tY3PsYOb 個人的にはSIMDが1024-wayとかになったら面白いんだが
サーバー用としてはメニーコアの方が相性が良いので
そういう流れにはならないだろうが
サーバー用としてはメニーコアの方が相性が良いので
そういう流れにはならないだろうが
193デフォルトの名無しさん
2015/12/02(水) 19:05:39.75ID:lLZXeX9n ベクトルコンピューターがそんな感じだった
ベクトル化出来ない処理は急激に遅くなるから、
今はコア数とバランス良くって方向になってる
AVXが8way
AVX512が16way
Geforceが32way
Radeonが64way
最高でも64wayあたりに落ち着くのでは?
ベクトル化出来ない処理は急激に遅くなるから、
今はコア数とバランス良くって方向になってる
AVXが8way
AVX512が16way
Geforceが32way
Radeonが64way
最高でも64wayあたりに落ち着くのでは?
194デフォルトの名無しさん
2015/12/02(水) 19:13:57.66ID:lSgAR6hy >>191
SIMD、柔軟性高いかなぁ?
データの並びとか気を付けないといけないし、プレディケーションもプログラマが書かないとできない。
非アライメントのペナルティが軽減されたのは有難いけど、
せめてプレディケーションくらいはGPUのようにHWでサポートしてほしいなぁ。
SIMD、柔軟性高いかなぁ?
データの並びとか気を付けないといけないし、プレディケーションもプログラマが書かないとできない。
非アライメントのペナルティが軽減されたのは有難いけど、
せめてプレディケーションくらいはGPUのようにHWでサポートしてほしいなぁ。
195デフォルトの名無しさん
2015/12/02(水) 20:17:39.20ID:rypJABRF コストの掛かるOoOでもSIMDにすれば相対的にコストが下がるというのもあるし
マスク演算ができるようになればプリディケードとブランチをプログラマが選べるようになる
インテルが目指してる方向は手堅いものだと思うな
マスク演算ができるようになればプリディケードとブランチをプログラマが選べるようになる
インテルが目指してる方向は手堅いものだと思うな
196デフォルトの名無しさん
2015/12/02(水) 20:53:25.97ID:73uUfhWJ 早く1024bit SIMD実装してほしいぜ。
囲碁の処理が速くなりそう。
碁盤は19 x 19だから512bitだと微妙なんだよな。
囲碁の処理が速くなりそう。
碁盤は19 x 19だから512bitだと微妙なんだよな。
197デフォルトの名無しさん
2015/12/02(水) 21:01:41.94ID:OrMGyZIC ハードウェアベクタをあまり長くしても大半のアプリケーションで無駄が出るだけだろ。
GPUのやりかたが落としどころとしてベストだと思うがな。
GPUのやりかたが落としどころとしてベストだと思うがな。
198デフォルトの名無しさん
2015/12/02(水) 21:24:30.33ID:N4pdKraK ここはC++の高速手法でよろしいのですよね・・・
199デフォルトの名無しさん
2015/12/02(水) 21:29:46.57ID:lSgAR6hy いや、C++に限らないんじゃない?
スレタイの【C++】や【SSE】ってのは主な手段であって、
GPUやFPGAだって立派な高速化手段だ。
スレタイの【C++】や【SSE】ってのは主な手段であって、
GPUやFPGAだって立派な高速化手段だ。
200デフォルトの名無しさん
2015/12/02(水) 21:52:10.30ID:lLZXeX9n >>197
GPUで速くなる処理はベクタ長アップでも確実に速くなるよ
GPUで速くなる処理はベクタ長アップでも確実に速くなるよ
201デフォルトの名無しさん
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
みたいな頓珍漢なこというお前の言うことははなから聞く気はない
みたいな頓珍漢なこというお前の言うことははなから聞く気はない
204デフォルトの名無しさん
2015/12/02(水) 22:32:44.25ID:lSgAR6hy205デフォルトの名無しさん
2015/12/02(水) 23:16:28.02ID:rypJABRF >>203
命令レベルの並列化にしろマルチプロセッサでの並列化にしろ
クリティカルパスじゃない部分を見つけて並列化してるという点では一緒で
並列化のアプローチの仕方が違ってるだけなのは理解してるんでしょ?
命令レベルの並列化であるOoOの方が直接的にクリティカルパスの影響を受けて
並列化が並列化が制限されるようになったからハイパースレッディングが投入されたのに
メイニーコアでクリティカルパスが問題になるって言い方は引っかかるんだよ
命令レベルの並列化にしろマルチプロセッサでの並列化にしろ
クリティカルパスじゃない部分を見つけて並列化してるという点では一緒で
並列化のアプローチの仕方が違ってるだけなのは理解してるんでしょ?
命令レベルの並列化である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
デュエル・マスターズ的な非電源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の話をしているという可能性もあるけどな
学の無い語るに値しない人間なんだろう
実はmainie coreという架空世界のCPUの話をしているという可能性もあるけどな
学の無い語るに値しない人間なんだろう
209デフォルトの名無しさん
2015/12/04(金) 00:10:19.06ID:/PT96VDb >>207
そうそう、気になって仕方なかったんだよ。
そうそう、気になって仕方なかったんだよ。
210デフォルトの名無しさん
2015/12/04(金) 00:26:47.97ID:lgJQm9VI 世界で唯一の稀有な存在かもしれねえぜ…
211デフォルトの名無しさん
2015/12/04(金) 00:59:55.26ID:vTE6A8P6 煽りじゃなくてぐうの音もでないような真実を突きつけてこそじゃねえかな
212デフォルトの名無しさん
2015/12/04(金) 09:21:04.02ID:2jROh0Ef メイニーコアってなんぞw
213デフォルトの名無しさん
2015/12/04(金) 09:31:38.80ID:4C4dhHoE 逝ってるさん マンセー
214デフォルトの名無しさん
2015/12/04(金) 10:37:56.49ID:yGPPr8Zs 母国語英語、第二母国語C++と日本語な俺からするとMulti-をマルチって言うのも違和感あるけどな
215デフォルトの名無しさん
2015/12/04(金) 18:14:24.01ID:3WaVS3Ju やっぱりこの板の住民は英語でレスする方が楽な感じですか?
苦手過ぎる…
苦手過ぎる…
216デフォルトの名無しさん
2015/12/04(金) 19:14:07.09ID:yphLFvrP どこに英語のレスがあるんだ
217デフォルトの名無しさん
2015/12/04(金) 22:00:51.54ID:Wf0OQ3ZI だからメイニーコアってなんだよw
218デフォルトの名無しさん
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
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
220デフォルトの名無しさん
2016/09/28(水) 13:29:19.39ID:8+L+QwLt 書いて
221デフォルトの名無しさん
2016/11/10(木) 01:32:20.10ID:OAKAAmWh 書いて
222デフォルトの名無しさん
2017/01/21(土) 13:23:31.22ID:dThE4/1u なんかない?
223デフォルトの名無しさん
2017/05/07(日) 23:05:11.98ID:8v4hzv7f 1次キャッシュに収まるスレッドを沢山作りたいとき、SSEやらAVX
のレジスタをメモリ代わりに使うのとメモリ直でアクセスするのとどっちが
キャッシュ乱さずに動くかな。
3次キャッシュは使いたくないし、2次キャッシュもスレッド切り替えだけに
消費させたいし。
のレジスタをメモリ代わりに使うのとメモリ直でアクセスするのとどっちが
キャッシュ乱さずに動くかな。
3次キャッシュは使いたくないし、2次キャッシュもスレッド切り替えだけに
消費させたいし。
224デフォルトの名無しさん
2017/05/08(月) 00:55:10.37ID:BlZJ1Ed5225デフォルトの名無しさん
2017/08/09(水) 20:46:58.02ID:+5xcelsT レジスタに収まるならレジスタの方が良いに決まってる
226デフォルトの名無しさん
2017/08/09(水) 20:56:25.64ID:+5xcelsT 1次キャッシュに収まるなら他のキャッシュなんて気にする必要は無いと思うんだが
普通のOSで普通のコードを動かすなら、スレッド切り替えによるオーバーヘッドなんて無視できるレベルだし
そんなことを心配するよりも、肝心なコードを気にしようよ
いろんなテクニックを知ってるからコードをアップしてくれれば、小さいループならお役にたてるかも知れない
普通のOSで普通のコードを動かすなら、スレッド切り替えによるオーバーヘッドなんて無視できるレベルだし
そんなことを心配するよりも、肝心なコードを気にしようよ
いろんなテクニックを知ってるからコードをアップしてくれれば、小さいループならお役にたてるかも知れない
227デフォルトの名無しさん
2017/08/09(水) 20:57:28.26ID:+5xcelsT ロングパスだったorz
228デフォルトの名無しさん
2017/08/16(水) 16:38:15.04ID:caDabzDZ 最近ニコニコ動画に上がってる経済シミュ、生態シミュ動画の人の高速化手法がすごい
229デフォルトの名無しさん
2017/08/17(木) 03:34:48.76ID:6E9r52D/ どんな高速化手法なんだい?
230デフォルトの名無しさん
2017/09/13(水) 01:32:53.89ID:8Q2gNSiE std::copyってsimd化などの最適化って既にされてるのかな?
sse_copy()とか自作したとして
効果は期待出来る?
sse_copy()とか自作したとして
効果は期待出来る?
231デフォルトの名無しさん
2017/09/13(水) 02:02:50.51ID:S8v0D06m sse_copyとやらはmemcpy、memmoveと何が違うの?
232デフォルトの名無しさん
2017/09/13(水) 02:20:34.07ID:TvE1YB9H 名前的に、SSEの128bitレジスタを使ってのコピーだろう
memcpyとmemmoveの違いはぐぐればすぐわかる
memcpyとmemmoveの違いはぐぐればすぐわかる
233デフォルトの名無しさん
2017/09/13(水) 02:25:23.48ID:S8v0D06m じゃなくて、自作しようとしているSSEでコピーするであろう「sse_copy」と
標準で用意されている「memcpy、memmove」←両方合わせて、とで
何が違うの?という話
当たり前だがmemcpyはCPUがSIMDに対応していれば使うし
カリカリにチューニングしてあるわけだが
sse_copyなど要るの?
標準で用意されている「memcpy、memmove」←両方合わせて、とで
何が違うの?という話
当たり前だがmemcpyはCPUがSIMDに対応していれば使うし
カリカリにチューニングしてあるわけだが
sse_copyなど要るの?
234デフォルトの名無しさん
2017/09/13(水) 02:48:41.88ID:8Q2gNSiE memcpyはC言語の関数だったか
存在を忘れてた
こいつは最適化入ってるのね
これ使えば良さそうだ
そうする、どうもです
存在を忘れてた
こいつは最適化入ってるのね
これ使えば良さそうだ
そうする、どうもです
235デフォルトの名無しさん
2017/09/13(水) 05:53:18.22ID:akrdcF0B 条件にもよるがmemcpyあたりはコンパイラ自身がインライン展開したりする
236デフォルトの名無しさん
2017/09/13(水) 11:25:41.68ID:RHwHks/k std::copy使っておけばPODならmemcpyかmemmove使うんじゃないの
VS2017のやつはmemmove使ってるな
VS2017のやつはmemmove使ってるな
237デフォルトの名無しさん
2017/09/13(水) 15:04:16.35ID:xDYBj2Vm copyrect
238デフォルトの名無しさん
2017/09/13(水) 18:53:59.90ID:GrxKOJ+a 謎の速度低下で悩んでいたが、キャッシュレイアウトって重要だな。
AVX512で一部分だけ値更新したい時、16バイト読み込んでその位置に64バイト書き戻すようなケース。
そのまま16バイト読み込みで実装すると、読み込み時に16バイト分しかキャッシュがないので、書き込む時に64バイトに拡張というか再配置されて遅くなる。
最初から64バイトで読み出すと、サイズが変化しないので遅くならない。
ついつい、読み出し量が少ない方が速いに違いないと思い込んでしまう罠。
AVX512で一部分だけ値更新したい時、16バイト読み込んでその位置に64バイト書き戻すようなケース。
そのまま16バイト読み込みで実装すると、読み込み時に16バイト分しかキャッシュがないので、書き込む時に64バイトに拡張というか再配置されて遅くなる。
最初から64バイトで読み出すと、サイズが変化しないので遅くならない。
ついつい、読み出し量が少ない方が速いに違いないと思い込んでしまう罠。
239デフォルトの名無しさん
2017/09/13(水) 20:49:54.25ID:zEWQVEHs パーシャルライトって奴だな
キャッシュにも有効なのか
昔のPenProの頃の8/16bitレジスタへの書き込み後の32bit読み出しとか
HDDが2T超える頃の4Kセクタのパーティションでの位置ずれとか
信じられないほど遅くなる要因になるもんな
キャッシュにも有効なのか
昔のPenProの頃の8/16bitレジスタへの書き込み後の32bit読み出しとか
HDDが2T超える頃の4Kセクタのパーティションでの位置ずれとか
信じられないほど遅くなる要因になるもんな
240デフォルトの名無しさん
2017/09/13(水) 21:31:13.89ID:y458W+jL え、memcpy()とかstd::copy()ってSIMD使うん??
vectorのコピー遅いから困ってて、カリカリとSIMDで書こうかと思ってたんやけど、手間省けるわ。
vectorのコピー遅いから困ってて、カリカリとSIMDで書こうかと思ってたんやけど、手間省けるわ。
241デフォルトの名無しさん
2017/09/13(水) 21:45:57.88ID:FrHUdEqr コピーが遅いから困っててと言うけれど
どうやって遅いと結論づけたのですか?
本来なら16ms完了するはずなのに29msもかかってしまっている!
とかわかるんですか?
どうやって遅いと結論づけたのですか?
本来なら16ms完了するはずなのに29msもかかってしまっている!
とかわかるんですか?
242デフォルトの名無しさん
2017/09/13(水) 21:55:49.49ID:y458W+jL ああ、いえいえ、言い方が悪かったですが、
処理時間に占めるコピーの割合が増えてきたので、高速化したいなぁ、と思っただけです。
処理時間に占めるコピーの割合が増えてきたので、高速化したいなぁ、と思っただけです。
243デフォルトの名無しさん
2017/09/14(木) 20:07:50.27ID:l0W4QyGB rep movsbが糞速い
https://srad.jp/~miyuri/journal/569822/
>>REP MOVSはマイクロコードで実装されていて、最初にコピーサイズを見て適するコピーアルゴリズムを決めるセットアップ処理を行なってから
>>実際のコピー処理を始めるようになっている。そのため小さいサイズのコピーではセットアップ時間のオーバーヘッドが無視できないが
>>コピーサイズ(適度に大きいサイズ)とアラインメントの要件とプロセッサの世代の条件を満たすとそこそこの性能が出る。
>
>>プロセッサの世代によって展開されるマイクロプログラムが変わり最適化の度合いも変わってくると。
>>第1世代Core i以降のプロセッサのREP MOVSのマイクロコードは比較的速い。
デコード済みの命令をキャッシュ出来るようになったから、マイクロコード展開命令でも最適化が行われるようになってるみたいだよ。
https://srad.jp/~miyuri/journal/569822/
>>REP MOVSはマイクロコードで実装されていて、最初にコピーサイズを見て適するコピーアルゴリズムを決めるセットアップ処理を行なってから
>>実際のコピー処理を始めるようになっている。そのため小さいサイズのコピーではセットアップ時間のオーバーヘッドが無視できないが
>>コピーサイズ(適度に大きいサイズ)とアラインメントの要件とプロセッサの世代の条件を満たすとそこそこの性能が出る。
>
>>プロセッサの世代によって展開されるマイクロプログラムが変わり最適化の度合いも変わってくると。
>>第1世代Core i以降のプロセッサのREP MOVSのマイクロコードは比較的速い。
デコード済みの命令をキャッシュ出来るようになったから、マイクロコード展開命令でも最適化が行われるようになってるみたいだよ。
244デフォルトの名無しさん
2017/09/14(木) 21:12:13.74ID:AvPBQe63 メモリのレイテンシ、スループットやキャッシュサイズに依存するんだから
ブロック転送命令の最適化は無駄な努力だとインテルは思ってんだろう。
ブロック転送命令の最適化は無駄な努力だとインテルは思ってんだろう。
245デフォルトの名無しさん
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の方が速いから
頻繁に使うなら自作した方が良い
memcpyを調べてみた
x86は rep movs
x64は vmovups 128bit 2パラ16アンロール
オプションでAVX2命令を使うようにしてもかわらず
vmovaps 256bit/512bitの方が速いから
頻繁に使うなら自作した方が良い
246デフォルトの名無しさん
2017/09/14(木) 23:27:05.22ID:l0W4QyGB247デフォルトの名無しさん
2017/09/15(金) 00:42:48.43ID:SH+3EPbt248デフォルトの名無しさん
2017/09/16(土) 02:31:32.38ID:Y9EbWhOv >>247
一定のストライドで読み込んでいれば自動プリフェッチで早めにキャッシュに取り込まれる可能性もあるけど、
DRAMの帯域を圧迫しないようにページ境界をまたいでは機能しないようになってるはずだったので、
AVX512のベクタ長だと、何サイクルか先のループで使うデータをプリフェッチで要求した方がいいかも。
一定のストライドで読み込んでいれば自動プリフェッチで早めにキャッシュに取り込まれる可能性もあるけど、
DRAMの帯域を圧迫しないようにページ境界をまたいでは機能しないようになってるはずだったので、
AVX512のベクタ長だと、何サイクルか先のループで使うデータをプリフェッチで要求した方がいいかも。
249デフォルトの名無しさん
2017/09/16(土) 11:37:46.61ID:7TcGYGsR >>248
ありがとう。すでに別件でPrefetchもやってみてるけど、AVX512だとかなり効果があった。
ありがとう。すでに別件でPrefetchもやってみてるけど、AVX512だとかなり効果があった。
250デフォルトの名無しさん
2017/09/16(土) 17:07:26.32ID:EqmVZpne >>249
一時は自動プリフェッチの性能が向上してあまりprefetchの意味がない状態が続いていたけど、
AVX512ともなると1ページ分のデータをループ64回で消費しちゃうんだよな…
DRAMのCASレイテンシをCPUクロックで換算すると結構長いからね。
一時は自動プリフェッチの性能が向上してあまりprefetchの意味がない状態が続いていたけど、
AVX512ともなると1ページ分のデータをループ64回で消費しちゃうんだよな…
DRAMのCASレイテンシをCPUクロックで換算すると結構長いからね。
251デフォルトの名無しさん
2017/09/17(日) 15:21:48.39ID:ZiTBR472 え?AVX512は手書きprefetchのほうが性能出る?
これまではハードウェアプリフェッチが超優秀で、手書きprefetchはむしろオーバーヘッドになって遅くなる感じだったんだけど。
これまではハードウェアプリフェッチが超優秀で、手書きprefetchはむしろオーバーヘッドになって遅くなる感じだったんだけど。
252デフォルトの名無しさん
2017/12/10(日) 20:33:52.61ID:M5Qtf5Qu prefetchはハードウェアにまかせて手書きでclflush入れるのが一番いい感じなんだけど。こんなケースは少数派なのかな。
253デフォルトの名無しさん
2018/02/01(木) 08:35:26.88ID:VuVCHSR9 xeonでavx命令使うと過熱防止のため1ms間、動作クロック下げるなんて聞いてないよ〜(>∀<)
254デフォルトの名無しさん
2018/02/02(金) 00:44:37.85ID:cppyUN4V >>253
本末転倒やなw
本末転倒やなw
255デフォルトの名無しさん
2018/02/16(金) 06:35:40.61ID:W1XJdyx1 ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
256デフォルトの名無しさん
2018/05/23(水) 20:32:42.01ID:Au5e7VGg 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
YF4RO
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
YF4RO
257デフォルトの名無しさん
2018/06/04(月) 11:52:09.21ID:DgroLQ0O 過熱してなくても1ms間、強制的にクロック下げるん?
258デフォルトの名無しさん
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)動作モードに復帰
https://pc.watch.impress.co.jp/img/pcw/docs/665/641/html/14.png.html
> AVX命令が実行されるときに、CPUはAVXベースで定義されている
> クロック周波数に一時的に下がって実行し、実行終了後元のベースクロックに戻る
> AVX命令の実行完了後1ms程度で通常(非AVX)動作モードに復帰
259デフォルトの名無しさん
2018/06/09(土) 11:42:37.36ID:06Yvpy2o 1msってペナルティ、デカすぎやろ
260デフォルトの名無しさん
2018/06/09(土) 12:18:26.60ID:6JxGr/md AVXが有効な処理なら微妙にクロックが落ちようがどうでもいい
261デフォルトの名無しさん
2018/06/09(土) 12:21:09.00ID:6JxGr/md クロックが高いのが目的じゃなくて
処理が速いのが目的
その辺がよくわかってないアホがいるみたい
処理が速いのが目的
その辺がよくわかってないアホがいるみたい
262デフォルトの名無しさん
2018/06/10(日) 12:04:49.97ID:2twu5/4V なんか知らんがPCUの動作速度だろ。
263デフォルトの名無しさん
2018/06/10(日) 12:47:49.30ID:/vizDNJB CPU?
264デフォルトの名無しさん
2018/06/10(日) 13:00:30.59ID:Ce6PWnpg Programmable Calculation Unit (嘘)
265デフォルトの名無しさん
2018/06/10(日) 13:18:51.18ID:/vizDNJB どうせならUも工夫しろよ
266デフォルトの名無しさん
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)
コア数多いとさらにクロック低下するで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)
267デフォルトの名無しさん
2018/06/13(水) 07:54:13.98ID:czoTP8TT さすがに下がり過ぎw
268デフォルトの名無しさん
2018/07/04(水) 22:24:56.45ID:gFgZc5FG HHG
269デフォルトの名無しさん
2018/07/05(木) 16:49:03.96ID:AeL6VB/V HHG
270デフォルトの名無しさん
2018/07/12(木) 17:41:30.02ID:JTIrQoQb そもそも4倍の量が同時に計算できるわけだから
クロックが半分になっても元は取れる
クロックが半分になっても元は取れる
271デフォルトの名無しさん
2018/07/12(木) 18:11:27.11ID:KB59nVpm だね
272デフォルトの名無しさん
2018/07/12(木) 22:27:22.56ID:e1DCOlOZ 同じクロックで2倍の効率との違いは消費電力?
273デフォルトの名無しさん
2018/07/13(金) 00:03:25.32ID:n6X2CtBj クロックが実際は半分にならないから
メリットは高速化
メリットは高速化
274デフォルトの名無しさん
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;
}
#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;
}
275デフォルトの名無しさん
2018/10/24(水) 22:27:31.88ID:2t/OeFdE そりゃ、やってることが違うんだから
同じにしたけりゃ sum2 で for (auto& p: v) にしてみ
同じにしたけりゃ sum2 で for (auto& p: v) にしてみ
276デフォルトの名無しさん
2018/10/24(水) 22:49:24.04ID:mVtKb6jM うお、autoってこんな書き方も出来るのかよw
勉強になりました。
勉強になりました。
277デフォルトの名無しさん
2018/10/25(木) 11:47:46.18ID:5Cy/pQlU 結果も違うんじゃね
ちゃんと中身観たか
ちゃんと中身観たか
278デフォルトの名無しさん
2018/10/25(木) 17:06:36.77ID:+VSq1LXv 結果は同じだろ? 鬼のように発生するコピーのためにメモリ不足で死なない限りは。
279デフォルトの名無しさん
2018/10/25(木) 17:51:37.93ID:PGxBvFeb C++は高速化に向かいないといういい見本だ。
280デフォルトの名無しさん
2018/10/25(木) 19:41:56.48ID:u+frCiwH C++は、書いた通りに実行されるだけ。
高速な処理が必要なら、そう実行されるように実装しないと。
高速な処理が必要なら、そう実行されるように実装しないと。
281デフォルトの名無しさん
2018/10/25(木) 21:01:08.67ID:PGxBvFeb まるでC++コンパイラは最適化しないとかデタラメな言い分けだな。
282デフォルトの名無しさん
2018/10/26(金) 16:39:17.96ID:8hqqerJ0 vectorとか激しくコピーしすぎ
283デフォルトの名無しさん
2018/10/26(金) 16:49:29.10ID:hXNu7AZl 何のためにコピーしてるん? 使い方間違ってんじゃね?
284デフォルトの名無しさん
2018/10/27(土) 19:00:07.11ID:hLMgBGRd reserveせずのpush_backしまくるバカのことじゃね?
285デフォルトの名無しさん
2019/11/09(土) 12:43:46.37ID:nG1HKTzx push_backしまくってもそれほどパフォーマンスは悪化しないように出来てるはずだが
コピーしまくりっていうんだから関数で値渡ししてるとかじゃないか?
いずれにしろC++自体の問題ではない
コピーしまくりっていうんだから関数で値渡ししてるとかじゃないか?
いずれにしろC++自体の問題ではない
286デフォルトの名無しさん
2019/11/09(土) 12:46:29.28ID:nG1HKTzx データの並び順やアルゴリズム、...
この辺がパフォーマンスに大きな影響を与える
コンパイラの最適化なんぞ知れてる
その辺を最適化したければガシガシアセンブラだが
その前にいくらでもやることがあるのが普通
この辺がパフォーマンスに大きな影響を与える
コンパイラの最適化なんぞ知れてる
その辺を最適化したければガシガシアセンブラだが
その前にいくらでもやることがあるのが普通
287デフォルトの名無しさん
2019/11/09(土) 12:48:19.04ID:nG1HKTzx メインメモリが相対的に遅くなってきてるので
データの並びは非常に重要
大きなデータはディスクアクセスのような感覚で扱わないとダメ
データの並びは非常に重要
大きなデータはディスクアクセスのような感覚で扱わないとダメ
288デフォルトの名無しさん
2019/11/09(土) 12:49:37.15ID:nG1HKTzx ちゃんとキャッシュサイズや階層を意識する
289デフォルトの名無しさん
2019/11/09(土) 21:44:34.74ID:GgGliPcL 突っ込みどころもあるが1年前のレスに真面目に返答してるおまえを評価する。
290デフォルトの名無しさん
2019/11/10(日) 12:14:45.63ID:7BQWwZ6D x おまえ
o おまえら
って書こうとしたが
同じ人だった orz
o おまえら
って書こうとしたが
同じ人だった orz
291デフォルトの名無しさん
2019/11/10(日) 18:59:30.87ID:EMkBhp99 御評価、有難う御座います
292デフォルトの名無しさん
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ではインラインアセンブラも使えないコンパイラがあるし、関数呼び出しや例外処理の
書き方も変わってしまっているので移植性が低いよ
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ではインラインアセンブラも使えないコンパイラがあるし、関数呼び出しや例外処理の
書き方も変わってしまっているので移植性が低いよ
293デフォルトの名無しさん
2019/11/11(月) 20:40:17.77ID:a7L5ps6d 組み込み関数でSIMD命令駆使すれば、しっかり高速化されてキモティー!
294デフォルトの名無しさん
2019/11/12(火) 13:18:01.61ID:TlWEsNqa >>292
アセンブラを使わなくても速度チューニングネタはたくさんあるが
当然最後の手段としてはアセンブラは有効
小さいループに処理が集中してるような処理は
特に効果的
下手くそがアセンブラに手を出すと逆に遅くなったりもするけど
アセンブラを使わなくても速度チューニングネタはたくさんあるが
当然最後の手段としてはアセンブラは有効
小さいループに処理が集中してるような処理は
特に効果的
下手くそがアセンブラに手を出すと逆に遅くなったりもするけど
295デフォルトの名無しさん
2019/11/12(火) 23:06:40.80ID:AwVvRDmU296デフォルトの名無しさん
2019/11/13(水) 00:56:22.92ID:AZXdI1I6297デフォルトの名無しさん
2019/11/13(水) 10:22:08.98ID:EqcpRCSG 費用対効果を考えればIntrinsicsでも良いけど
究極の最適化はアセンブラしか無い
IACAを使ったり実測したりしながらパズルする
処理が非常に単純で速度の求められる小規模DSPなんかでも
いまだにそういう開発をする
究極の最適化はアセンブラしか無い
IACAを使ったり実測したりしながらパズルする
処理が非常に単純で速度の求められる小規模DSPなんかでも
いまだにそういう開発をする
298デフォルトの名無しさん
2019/11/13(水) 11:21:40.17ID:J9H9jmTJ FPGAで専用回路組んだ方が手っ取り早い
299デフォルトの名無しさん
2019/11/13(水) 12:35:34.29ID:1AwZzcZD300デフォルトの名無しさん
2019/11/13(水) 13:05:36.17ID:EqcpRCSG301デフォルトの名無しさん
2019/11/13(水) 13:15:07.61ID:EqcpRCSG302デフォルトの名無しさん
2019/11/13(水) 13:21:58.53ID:FP2h74Sh GPUユニットはCPUに乗っけたのだから後はFPGAも乗っけるだけ。
アルテラは既に買収済みだしな。
アルテラは既に買収済みだしな。
303デフォルトの名無しさん
2019/11/13(水) 15:28:17.20ID:EqcpRCSG FPGAに夢見すぎじゃね?
304デフォルトの名無しさん
2019/11/13(水) 16:48:11.25ID:FP2h74Sh スパコン分野じゃ固定の計算式はFPGAが一番効率的。そういう意味で地球シミュレータや京はゴミ。
スパコンが必要な分野でCPUのような汎用性などいらない。
スパコンが必要な分野でCPUのような汎用性などいらない。
305デフォルトの名無しさん
2019/11/13(水) 17:02:40.99ID:EqcpRCSG 今度はスパコンが出て来たか
関わったこともないだろうに
スーパーコンピューターこそ汎用性が必要
ベクトルコンピューターが消えたのも
より汎用性を重視するから
スーパーコンピューターの世界でFPGAが求められてるなら
当然スーパーFPGAが流行ってないと辻褄が合わないわけだけど
流行ってないね
関わったこともないだろうに
スーパーコンピューターこそ汎用性が必要
ベクトルコンピューターが消えたのも
より汎用性を重視するから
スーパーコンピューターの世界でFPGAが求められてるなら
当然スーパーFPGAが流行ってないと辻褄が合わないわけだけど
流行ってないね
306デフォルトの名無しさん
2019/11/13(水) 17:18:55.90ID:FP2h74Sh 何を言ってるからよく分からないなぁ。
特定の式を大量に速く計算したいという要望に対してなんで汎用性が出てくるの?
汎用性スパコンが1億なら同じ性能で1000万で達成できるんだよ。
しかも汎用性のために可用性が落ちるとか話にならないよ。京見れば分かるでしょ。
特定の式を大量に速く計算したいという要望に対してなんで汎用性が出てくるの?
汎用性スパコンが1億なら同じ性能で1000万で達成できるんだよ。
しかも汎用性のために可用性が落ちるとか話にならないよ。京見れば分かるでしょ。
307デフォルトの名無しさん
2019/11/13(水) 17:37:57.46ID:OceCV+VL 自分専用ならTSSにする必要もないしな
308デフォルトの名無しさん
2019/11/13(水) 18:11:35.42ID:nB9KorLn FPGAとかスーパーコンピューターとか自分専用とか
具体的な処理を何も語ってないのによくもまあ勝手に前提を作るよなあ
ここはソフトの最適化のスレなんだけど
具体的な処理を何も語ってないのによくもまあ勝手に前提を作るよなあ
ここはソフトの最適化のスレなんだけど
309デフォルトの名無しさん
2019/11/13(水) 18:13:46.44ID:nB9KorLn FPGAなんかで妥協しないでASICでも作れば良いよ
310デフォルトの名無しさん
2019/11/13(水) 18:26:47.86ID:FP2h74Sh FPGAだってプログラムでコーディングするんだが・・・。勝手な前提作ってるのはおまえじゃん。
というかSSEでの高速化がOKなら、GPGPU、FPGAもOKだろう。
というかSSEでの高速化がOKなら、GPGPU、FPGAもOKだろう。
311デフォルトの名無しさん
2019/11/13(水) 19:03:44.22ID:RzCRvdkP スレタイ
他のスレへどうぞ
他のスレへどうぞ
312デフォルトの名無しさん
2019/11/13(水) 19:23:44.45ID:FP2h74Sh 1年もレスが無かった過疎スレになんでこんな必死な自治厨がいるのだろうw
前スレも10年かけて1スレ消費したんだぞw
おまえは何者だw
前スレも10年かけて1スレ消費したんだぞw
おまえは何者だw
313デフォルトの名無しさん
2019/11/13(水) 19:25:42.10ID:Fqkv69gY 突然カテ違いのFPGAなんか布教し始めるから
314デフォルトの名無しさん
2019/11/13(水) 19:49:30.87ID:FP2h74Sh315デフォルトの名無しさん
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化やった経験からも、今更初心者にアセンブラ使えなんて教えんなと言いたい
前に64bitで絶対アドレス使えって書いて突っ込み受けたらファビョってたのいたでしょ
あれと同一人物っぽいんだよなあ
>究極の最適化はアセンブラしか無い
とか書くところとか
午後のこ〜だの開発者たちが動画コーデックの開発しなかったのだって、
MMXは除外しても、SSE2、SSE3、SSSE3、SSE4、SSE4.1、AVX、AVX2、AVX512に加えて、
64bitでは一気に種類が2倍と、次々と登場する新命令ごとに最速のルーチン用意していく手間と、
コードが異なるために特定のCPUでしか発現しないバグがでるリスクが増すこと考えたら、
最速に拘るのが現実的ではなくなったんだよ
彼らとしては妥協したコード書く気はなかっただろうし、興味が失せるのも仕方ないのかもね
AVISynthもインラインアセンブラ使ったプラグインだらけで64bit化に対応できずに放置されてたのが
相当あったけど、自分も64bit化やった経験からも、今更初心者にアセンブラ使えなんて教えんなと言いたい
316デフォルトの名無しさん
2019/11/13(水) 20:53:55.20ID:Fqkv69gY 初心者ならIntrinsicsなんか使わないで素直に汎用性のあるC++で書くかライブラリを使えばいいよ
ここは高速化手法スレだから高速なコードであることは重要
Intrinsicsよりアセンブラの方が高速に書けるのは自明なのでアセンブラの話題は当然出てくる
ここは高速化手法スレだから高速なコードであることは重要
Intrinsicsよりアセンブラの方が高速に書けるのは自明なのでアセンブラの話題は当然出てくる
317デフォルトの名無しさん
2019/11/13(水) 21:08:18.46ID:ZJ6Q5c4u アセンブラ狂信者はお前だけだよ
318デフォルトの名無しさん
2019/11/13(水) 21:12:18.74ID:Fqkv69gY Intrinsicsで32bit/64bitの共通化は出来ても
新命令がでたらどうせ作り直しだよ
新命令に最適化しないならそのままでいいよ
「新命令対応」て謳うのが目的じゃなければ
SSEからAVXの移植もレーン縛りで苦労しただろ?
単純に置き換えなんて出来ない
128bitのまま単に3オペとレジスタ数だけなら簡単だけど
AVX512も同じ
マスクレジスタや新命令を使うなら書き直し
新命令がでたらどうせ作り直しだよ
新命令に最適化しないならそのままでいいよ
「新命令対応」て謳うのが目的じゃなければ
SSEからAVXの移植もレーン縛りで苦労しただろ?
単純に置き換えなんて出来ない
128bitのまま単に3オペとレジスタ数だけなら簡単だけど
AVX512も同じ
マスクレジスタや新命令を使うなら書き直し
319デフォルトの名無しさん
2019/11/13(水) 21:13:39.13ID:Fqkv69gY アセンブラ狂信者じゃない
Intrinsicsも使う
極限な最適化にはアセンブラが必要ってだけ
まあ当然だ
Intrinsicsも使う
極限な最適化にはアセンブラが必要ってだけ
まあ当然だ
320デフォルトの名無しさん
2019/11/13(水) 21:19:04.07ID:Fqkv69gY どうせ今後は32bit向けの最適化なんかやらんだろ
だとすると手間の差はレジスタ管理くらい
だとすると手間の差はレジスタ管理くらい
321デフォルトの名無しさん
2019/11/13(水) 21:42:54.67ID:AZXdI1I6322デフォルトの名無しさん
2019/11/13(水) 22:04:42.12ID:RzCRvdkP >>321
レジスタ割り付けの妙味www
さほど時間をかけなくてもコンパイラよりマシなのは作れるよ
そもそもIntrinsicsの時点でもレジスタ数削減は考えるべきであって
何も考えなきゃIntrinsicsだろうがアセンブラだろうが遅い
レジスタ割り付けの妙味www
さほど時間をかけなくてもコンパイラよりマシなのは作れるよ
そもそもIntrinsicsの時点でもレジスタ数削減は考えるべきであって
何も考えなきゃIntrinsicsだろうがアセンブラだろうが遅い
323デフォルトの名無しさん
2019/11/13(水) 22:06:07.35ID:RzCRvdkP 詳しい自信があるなら
とりあえず問題ありまくりな>>300の問題点でも語ってみようか
とりあえず問題ありまくりな>>300の問題点でも語ってみようか
324デフォルトの名無しさん
2019/11/13(水) 22:09:21.49ID:RzCRvdkP SIMDの一番簡単とも思えるこんなコードでも
最適化に関して語れることは山ほどある
最適化に関して語れることは山ほどある
325デフォルトの名無しさん
2019/11/13(水) 22:22:02.11ID:AZXdI1I6326デフォルトの名無しさん
2019/11/13(水) 22:38:51.61ID:RzCRvdkP 絶対アドレス?
一番アクセスが速いのはスタック
ほぼ確実にL1キャッシュにある
一等地
一番アクセスが速いのはスタック
ほぼ確実にL1キャッシュにある
一等地
327デフォルトの名無しさん
2019/11/13(水) 22:45:26.14ID:RzCRvdkP アドレス含め、
デカい即値は色々と遅くなる要素だぞ
デカい即値は色々と遅くなる要素だぞ
328デフォルトの名無しさん
2019/11/13(水) 22:49:24.63ID:RzCRvdkP プログラムで勝負する?
329デフォルトの名無しさん
2019/11/14(木) 12:00:59.24ID:Owl20mAs 300 みたいなことはこのスレの本来の住民なら誰でも知ってるから
いちいち講釈垂れるのはスレの無駄遣いだからやらないだけ
FPGA だって互換性気にしなければオリジナルの CPU の IP 書けば済む話で
少なくともこの板でやる話ではない
いちいち講釈垂れるのはスレの無駄遣いだからやらないだけ
FPGA だって互換性気にしなければオリジナルの CPU の IP 書けば済む話で
少なくともこの板でやる話ではない
330デフォルトの名無しさん
2019/11/14(木) 13:21:05.62ID:/NpdgKVA もっとレベルの高い話をお願いします
331デフォルトの名無しさん
2019/11/14(木) 13:24:41.66ID:/NpdgKVA332デフォルトの名無しさん
2019/11/14(木) 16:17:09.42ID:23v5U+5B >>315
>MMXは除外しても、SSE2、SSE3、SSSE3、SSE4、SSE4.1、AVX、AVX2、AVX512に加えて、
>64bitでは一気に種類が2倍と、次々と登場する新命令ごとに最速のルーチン用意していく手間と、
知らなくてもいいことかもしれないけど、これはアセンブラ作者泣かせでもあったりする。
命令数が多すぎるので手作業での入力は例えテーブル方式を採用していても無理が有り、
インストラクションセットの表を自動的にテーブルに変換するようなプログラムをしなくては
ならなくなってきている。
>MMXは除外しても、SSE2、SSE3、SSSE3、SSE4、SSE4.1、AVX、AVX2、AVX512に加えて、
>64bitでは一気に種類が2倍と、次々と登場する新命令ごとに最速のルーチン用意していく手間と、
知らなくてもいいことかもしれないけど、これはアセンブラ作者泣かせでもあったりする。
命令数が多すぎるので手作業での入力は例えテーブル方式を採用していても無理が有り、
インストラクションセットの表を自動的にテーブルに変換するようなプログラムをしなくては
ならなくなってきている。
333デフォルトの名無しさん
2019/11/14(木) 18:28:43.14ID:wXs4N2j2334デフォルトの名無しさん
2019/11/14(木) 19:03:05.40ID:xDOIuZj+335デフォルトの名無しさん
2019/11/14(木) 19:18:18.01ID:wXs4N2j2 前半からアセンブリ言語での記述の話だと思ってしまった
命令数めちゃくちゃ多いよね
多いだけじゃなくて複雑にもなってる
{k1} とか {z} とか
まあそれでも(高級言語の)コンパイラを作るよりははるかに楽だろうけど
命令数めちゃくちゃ多いよね
多いだけじゃなくて複雑にもなってる
{k1} とか {z} とか
まあそれでも(高級言語の)コンパイラを作るよりははるかに楽だろうけど
336デフォルトの名無しさん
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だってこいつの言ってることはおかしいと思うだろ?
前にアセンブラスレでこんなこと書いてた変なのがいたんだよ
>実際には問題がある。なぜなら、そんなにアドレスが大きいと、さっきから話題の
>mov al, my_mojiretu[rbx]
>という命令が使えなくなるからだ。
とか、
>RIP相対32bitdispだとアクセスできない場合が出てくる
>シンボルがRIP相対2GBに制限されるなどはあくまでCコンパイラの制限であって
>アセンブラはその制限を受けない
ちょっと考えれば64bitなのに2GB制限するオプションとか使ってDLLも作れなくなるような
記法が推奨されてるはずないよな
それで複数の人から突っ込まれたら、誤りを認めて引っ込めばいいものを、
ファビョって連投しまくるから、皆呆れて無視したってことがあったんだよ
挙句にこんなことまで言い出したり
>自分は 64BIT 用C/C++コンパイラをインストールして無いので、試せません。
>>326だってこいつの言ってることはおかしいと思うだろ?
337デフォルトの名無しさん
2019/11/14(木) 20:47:59.72ID:YoVrORSB 初心者スレなんかあったのか。乗り遅れたぜ。
338デフォルトの名無しさん
2019/11/14(木) 22:25:49.84ID:uioYVx5f >>336
その人は、64BIT命令にとても詳し過ぎてみんなが理解できなかったようだ。
その人は、64BIT命令にとても詳し過ぎてみんなが理解できなかったようだ。
339デフォルトの名無しさん
2019/11/14(木) 23:49:04.19ID:86Xe+wXL340デフォルトの名無しさん
2019/11/14(木) 23:52:36.80ID:uioYVx5f341デフォルトの名無しさん
2019/11/14(木) 23:54:38.25ID:uioYVx5f 純粋に技術競争になったら、日本は絶対にアメリカに勝つ。
いつもそうだったし、IT分野でもそう。
問題はアメリカ人は自分が負けそうになると、圧力をかけて壊してくることだ。
いつもそうだったし、IT分野でもそう。
問題はアメリカ人は自分が負けそうになると、圧力をかけて壊してくることだ。
342デフォルトの名無しさん
2019/11/15(金) 01:13:10.47ID:aFU9j+Ph343デフォルトの名無しさん
2019/11/15(金) 06:20:01.64ID:/dDy1LQy344デフォルトの名無しさん
2019/11/15(金) 07:39:37.60ID:6uJ1WeVS >>342
そうそう
40〜50行程度の32bitSSEの自慢のコード片を晒せば大体の実力は判るんじゃないかな
でもね、自分が本気で最適化する時は、IACAの分析結果じゃいい加減すぎて役に立たないから
人力で計算してたんだよね
社外に秘密にしたいパイプラインの実装の詳細を気前よくツールに実装するはずないよね
だから、IACAを使って最適化してるのを自慢してる辺り、あまり期待はしてないけどね
そうそう
40〜50行程度の32bitSSEの自慢のコード片を晒せば大体の実力は判るんじゃないかな
でもね、自分が本気で最適化する時は、IACAの分析結果じゃいい加減すぎて役に立たないから
人力で計算してたんだよね
社外に秘密にしたいパイプラインの実装の詳細を気前よくツールに実装するはずないよね
だから、IACAを使って最適化してるのを自慢してる辺り、あまり期待はしてないけどね
345デフォルトの名無しさん
2019/11/15(金) 08:12:16.93ID:pd2oXw5y なんで32bitSSE?
346デフォルトの名無しさん
2019/11/15(金) 08:13:55.97ID:pd2oXw5y IACAの使い方間違ってないか?
自力で計算するための情報を手っ取り早く得る為の物だぞ
自力で計算するための情報を手っ取り早く得る為の物だぞ
347デフォルトの名無しさん
2019/11/15(金) 08:37:45.48ID:LE7NfU10348デフォルトの名無しさん
2019/11/15(金) 08:41:09.49ID:pd2oXw5y349デフォルトの名無しさん
2019/11/15(金) 08:43:42.26ID:pd2oXw5y350デフォルトの名無しさん
2019/11/15(金) 08:45:31.01ID:LE7NfU10 >>349
多くは無いが個人レベルでは勝てる人はいる。
多くは無いが個人レベルでは勝てる人はいる。
351デフォルトの名無しさん
2019/11/15(金) 08:47:47.96ID:/yBuhf/V 量子コンピューターに日本人の名前がクレジットされる可能性は高い。
一方、○○互換のソフトウェアはほぼ100%が中国発。
一見欧州製のように見えてもほぼほぼ中国。
人工知能に中国人の名前がクレジットされる可能性は相当高い。
一方、○○互換のソフトウェアはほぼ100%が中国発。
一見欧州製のように見えてもほぼほぼ中国。
人工知能に中国人の名前がクレジットされる可能性は相当高い。
352デフォルトの名無しさん
2019/11/15(金) 08:50:37.54ID:pd2oXw5y >>350
なんだその無意味な主張
なんだその無意味な主張
353デフォルトの名無しさん
2019/11/15(金) 08:51:56.44ID:/yBuhf/V おそらく世界最初の人工知能は春麗とかいう名前になる。
354デフォルトの名無しさん
2019/11/15(金) 08:52:04.36ID:LE7NfU10355デフォルトの名無しさん
2019/11/15(金) 08:53:57.40ID:pd2oXw5y 日本とアメリカの技術力の比較の話から
なんで個人の能力に話をすり替える?
なんで個人の能力に話をすり替える?
356デフォルトの名無しさん
2019/11/15(金) 08:55:36.81ID:LE7NfU10 >>355
日本では、かつては半導体業界に優秀な人が集まっていた。
その当時、日本を引っ張っていたのは平均レベルの人達ではなかったんだよ。
自分の周りの平均以下のプログラマを見て、それが日本を代表するプログラマの
レベルだと思ってもらっては困る。
日本では、かつては半導体業界に優秀な人が集まっていた。
その当時、日本を引っ張っていたのは平均レベルの人達ではなかったんだよ。
自分の周りの平均以下のプログラマを見て、それが日本を代表するプログラマの
レベルだと思ってもらっては困る。
357デフォルトの名無しさん
2019/11/15(金) 08:56:48.41ID:pd2oXw5y しかも
勝てる人もいる
って
アメリカのトップに勝つ人がいるって言うなら多少の意味はあるけど
勝てる人もいる
って
アメリカのトップに勝つ人がいるって言うなら多少の意味はあるけど
358デフォルトの名無しさん
2019/11/15(金) 08:57:04.71ID:LE7NfU10 様は、生まれつきのIQや理解力や記憶力の話だ。
努力とかじゃない。純粋のそういうものを比較すれば、日本のTOP層は
MSのTOP層と互角に戦える。
努力とかじゃない。純粋のそういうものを比較すれば、日本のTOP層は
MSのTOP層と互角に戦える。
359デフォルトの名無しさん
2019/11/15(金) 08:57:41.59ID:LE7NfU10 >>357
TOPに勝てる人は要るよ。数学オリンピックとか見ていたら分かる。
TOPに勝てる人は要るよ。数学オリンピックとか見ていたら分かる。
360デフォルトの名無しさん
2019/11/15(金) 08:58:10.04ID:pd2oXw5y IQ、理解力、記憶力
技術力からずいぶんと話題が変わって来たね
技術力からずいぶんと話題が変わって来たね
361デフォルトの名無しさん
2019/11/15(金) 09:00:00.74ID:pd2oXw5y362デフォルトの名無しさん
2019/11/15(金) 09:11:49.17ID:LE7NfU10363デフォルトの名無しさん
2019/11/15(金) 09:12:33.92ID:pd2oXw5y だからプログラムで勝負しようって言ってるのに
364デフォルトの名無しさん
2019/11/15(金) 09:13:29.93ID:LE7NfU10 本当に地数学オリンピックに出られるなら、プログラミングなんてアホみたいに
簡単なはずだ。嘘なんじゃないか。
簡単なはずだ。嘘なんじゃないか。
365デフォルトの名無しさん
2019/11/15(金) 09:14:45.79ID:LE7NfU10366デフォルトの名無しさん
2019/11/15(金) 09:17:17.89ID:LE7NfU10 勘違いしてる人がいるようだが、本当に数学オリンピックに出るような人は、
いろいろなことが出来て、プログラミングなんて簡単に出来てしまう。
実例で行けば語学も堪能で13ヶ国語がぺらぺら立ったりする人までいる。
実際、数学オリンピックに出られるような人は、自分でもそれが分かる。
何もかも簡単に理解できるのだ。
いろいろなことが出来て、プログラミングなんて簡単に出来てしまう。
実例で行けば語学も堪能で13ヶ国語がぺらぺら立ったりする人までいる。
実際、数学オリンピックに出られるような人は、自分でもそれが分かる。
何もかも簡単に理解できるのだ。
367デフォルトの名無しさん
2019/11/15(金) 09:19:48.94ID:pd2oXw5y368デフォルトの名無しさん
2019/11/15(金) 09:25:01.76ID:pd2oXw5y >>366
夢見すぎじゃね?
夢見すぎじゃね?
369デフォルトの名無しさん
2019/11/15(金) 09:28:59.67ID:LE7NfU10 >>368
そんなことない。数学は頭脳の頂点にあるので、本当に何でも出来る。
そんなことない。数学は頭脳の頂点にあるので、本当に何でも出来る。
370デフォルトの名無しさん
2019/11/15(金) 09:29:06.33ID:pd2oXw5y 数学の天才が本気で高速化したコード
興味があるなら素直にそういえば良いのに
興味があるなら素直にそういえば良いのに
371デフォルトの名無しさん
2019/11/15(金) 09:30:47.63ID:LE7NfU10372デフォルトの名無しさん
2019/11/15(金) 09:31:36.73ID:pd2oXw5y 勝負から逃げる天才www
373デフォルトの名無しさん
2019/11/15(金) 09:34:00.16ID:LE7NfU10 >>372
金にならない勝負はしない。
金にならない勝負はしない。
374デフォルトの名無しさん
2019/11/15(金) 09:35:16.56ID:pd2oXw5y 金にならない落書きが趣味なのに?
375デフォルトの名無しさん
2019/11/15(金) 09:41:11.47ID:LE7NfU10 >>374
掲示板書き込みは、頭を使わないので簡単に出来るので全然違う。
他の人が思ってるように検索して調べることもしてない。
記憶に頼って書いてるだけなので簡単。一人には高度に見えるかも
しれないが、頭は停止状態で書いている。掲示板書き込みは頭の休憩。
プログラミングの勝負などは脳のフル活動が必要になるので
絶対にしたくない。特に天才の脳はフル活動すると疲れる。凡人とは違う
かも知れない。
掲示板書き込みは、頭を使わないので簡単に出来るので全然違う。
他の人が思ってるように検索して調べることもしてない。
記憶に頼って書いてるだけなので簡単。一人には高度に見えるかも
しれないが、頭は停止状態で書いている。掲示板書き込みは頭の休憩。
プログラミングの勝負などは脳のフル活動が必要になるので
絶対にしたくない。特に天才の脳はフル活動すると疲れる。凡人とは違う
かも知れない。
376デフォルトの名無しさん
2019/11/15(金) 09:43:30.90ID:LE7NfU10 >>375
誤:記憶に頼って書いてるだけなので簡単。一人には高度に見えるかも
正:記憶に頼って書いてるだけなので簡単。一般人には高度に見えるかも
ちなみに誤字脱字が多いのも、頭を休めながらテキトーに書いているからだ。
長文だから必死に書いている事は無い。キーボードはスラスラ打てるから。
一般人には分からないだろう。
誤:記憶に頼って書いてるだけなので簡単。一人には高度に見えるかも
正:記憶に頼って書いてるだけなので簡単。一般人には高度に見えるかも
ちなみに誤字脱字が多いのも、頭を休めながらテキトーに書いているからだ。
長文だから必死に書いている事は無い。キーボードはスラスラ打てるから。
一般人には分からないだろう。
377デフォルトの名無しさん
2019/11/15(金) 09:44:13.05ID:pd2oXw5y 数オリに幻想を抱いてるようじゃ
能力も知れてる
でもびっくりするくらい数学を知らない人もいるよね
自信満々でアップした行列の掛け算のコード
実は行列の掛け算を知らなくて掛け算になってないとか
能力も知れてる
でもびっくりするくらい数学を知らない人もいるよね
自信満々でアップした行列の掛け算のコード
実は行列の掛け算を知らなくて掛け算になってないとか
378デフォルトの名無しさん
2019/11/15(金) 09:48:27.12ID:LE7NfU10 >>377
数学オリンピックは、出るだけでも少なくとも東大や、東大の大学院に入るより
ずっと難しい。マイクロソフトに入社するよりも難しい。
ハーバードやMITよりもずっと難しい。
工学系の教授になるよりも難しい。
数学オリンピックは、出るだけでも少なくとも東大や、東大の大学院に入るより
ずっと難しい。マイクロソフトに入社するよりも難しい。
ハーバードやMITよりもずっと難しい。
工学系の教授になるよりも難しい。
379デフォルトの名無しさん
2019/11/15(金) 09:48:29.22ID:pd2oXw5y 昔いた団子とかいうコテの話
380デフォルトの名無しさん
2019/11/15(金) 09:49:42.54ID:pd2oXw5y381デフォルトの名無しさん
2019/11/15(金) 09:52:16.79ID:LE7NfU10382デフォルトの名無しさん
2019/11/15(金) 09:53:30.53ID:ptbono2y 虚言癖だと思われてるだけだろ
383デフォルトの名無しさん
2019/11/15(金) 09:56:05.40ID:pd2oXw5y384デフォルトの名無しさん
2019/11/15(金) 09:56:57.67ID:LE7NfU10385デフォルトの名無しさん
2019/11/15(金) 09:58:10.18ID:LE7NfU10386デフォルトの名無しさん
2019/11/15(金) 10:00:55.84ID:LE7NfU10 実は、高IQ者が休憩時間に簡単なおしゃべりのつもりで言っていることが、
一般人には、高度すぎて勝負をしてきていると思ったりする可能性があります。
こういうことでギフテッドは一般の学校でトラブルになり易いのです。
本人は勝負のつもりではなく、とても簡単に言っているのです。一般人は、
勝負だと受け止めます。これが軋轢になるのです。
一般人には、高度すぎて勝負をしてきていると思ったりする可能性があります。
こういうことでギフテッドは一般の学校でトラブルになり易いのです。
本人は勝負のつもりではなく、とても簡単に言っているのです。一般人は、
勝負だと受け止めます。これが軋轢になるのです。
387デフォルトの名無しさん
2019/11/15(金) 10:02:08.40ID:pd2oXw5y じゃあ何に詳しいんだ?
別に頭を使うようなコードでもないけどねえ
単なる知識の問題
考慮すべき内容は大きく分けて5個
別に頭を使うようなコードでもないけどねえ
単なる知識の問題
考慮すべき内容は大きく分けて5個
388デフォルトの名無しさん
2019/11/15(金) 10:03:25.27ID:pd2oXw5y >>386
スレタイ
スレタイ
389デフォルトの名無しさん
2019/11/15(金) 16:52:20.54ID:pd2oXw5y 技術的内容を1個も語らずに消えたか
文系君かな?
文系君かな?
390デフォルトの名無しさん
2019/11/15(金) 20:23:52.61ID:lI+7MgeJ マウンティング合戦で過疎スレを伸ばさないでくれよ。
質問攻めして相手の揚げ足取りって馬鹿左翼みたいだし。
ループ {
sum = _mm_add_ps(sum, data[i]);
}
について語れるなら結論だけ書いてOKだよ。
質問攻めして相手の揚げ足取りって馬鹿左翼みたいだし。
ループ {
sum = _mm_add_ps(sum, data[i]);
}
について語れるなら結論だけ書いてOKだよ。
391デフォルトの名無しさん
2019/11/15(金) 20:34:07.26ID:pd2oXw5y >>329が答えてくれるよ
392デフォルトの名無しさん
2019/11/16(土) 11:20:10.45ID:lV5RucvD ・レイテンシとスループット
・メモリ帯域
・CPUと搭載命令
・演算の順番と精度
・処理の構成
SIMDの一番簡単とも思えるこのコードで
このくらい語れることはある
・メモリ帯域
・CPUと搭載命令
・演算の順番と精度
・処理の構成
SIMDの一番簡単とも思えるこのコードで
このくらい語れることはある
393デフォルトの名無しさん
2019/11/16(土) 11:24:47.82ID:lV5RucvD ・アラインメントと端数処理
これも
これも
394デフォルトの名無しさん
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をレジスタに割り当ててくれることが期待できる
(一応確認する)
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をレジスタに割り当ててくれることが期待できる
(一応確認する)
395デフォルトの名無しさん
2019/11/16(土) 11:48:37.57ID:lV5RucvD ・メモリ帯域 / 処理の構成
このコードの性能が生かせるのは、
データがL1にある場合
メインメモリは非常に遅いので
大きなデータにこのループを使うと
ほとんど待ち時間になってしまう
(HTTなら他方のスレッドが動き放題)
小さなデータで頻繁に呼ばれるのであれば意味があるが(例えば低レイテンシが要求されるオーディオ処理)
大きなデータの場合はほとんどがメモリアクセス時間になってしまう
L1やL2に入るようにこまめにサイズを区切りながら処理をするとか
他の処理も合わせてループにすれば
メインメモリの帯域による性能劣化を減らす事が出来る
なのでこのループ自体の存在をまずは疑問視しよう
このコードの性能が生かせるのは、
データがL1にある場合
メインメモリは非常に遅いので
大きなデータにこのループを使うと
ほとんど待ち時間になってしまう
(HTTなら他方のスレッドが動き放題)
小さなデータで頻繁に呼ばれるのであれば意味があるが(例えば低レイテンシが要求されるオーディオ処理)
大きなデータの場合はほとんどがメモリアクセス時間になってしまう
L1やL2に入るようにこまめにサイズを区切りながら処理をするとか
他の処理も合わせてループにすれば
メインメモリの帯域による性能劣化を減らす事が出来る
なのでこのループ自体の存在をまずは疑問視しよう
396デフォルトの名無しさん
2019/11/16(土) 11:59:07.97ID:lV5RucvD ・CPUと搭載命令
128bit命令は古い
パフォーマンスが重要であれば
より性能のある256bit命令、512bit命令を使う
その為に、搭載命令を判別すること
・アラインメントと端数処理
メモリはキャッシュ境界をまたがない場合に性能が出る
今回の場合はデータが1個なので
前側端数と後側端数をゆっくり処理して
それ以外を高速なコードで処理をする
・演算順と演算精度
演算の順番で精度が悪化することがあるので注意
今回のコードは順番に足していくが
これは精度が悪化する順番である
(2^24個を超える個数の1を加え続ける事を考えると分かりやすい)
128bit命令は古い
パフォーマンスが重要であれば
より性能のある256bit命令、512bit命令を使う
その為に、搭載命令を判別すること
・アラインメントと端数処理
メモリはキャッシュ境界をまたがない場合に性能が出る
今回の場合はデータが1個なので
前側端数と後側端数をゆっくり処理して
それ以外を高速なコードで処理をする
・演算順と演算精度
演算の順番で精度が悪化することがあるので注意
今回のコードは順番に足していくが
これは精度が悪化する順番である
(2^24個を超える個数の1を加え続ける事を考えると分かりやすい)
397デフォルトの名無しさん
2019/11/16(土) 12:00:48.23ID:lV5RucvD このくらいを把握していれば初心者を卒業できます
398デフォルトの名無しさん
2019/11/16(土) 12:11:36.08ID:wJGFAeky >>397
お前が初心者なのは良く分かった
お前が初心者なのは良く分かった
399デフォルトの名無しさん
2019/11/16(土) 12:25:17.83ID:lV5RucvD はいはい
400デフォルトの名無しさん
2019/11/16(土) 16:08:28.47ID:+CnVgCxY >>397
なるほどね。かなり勉強になりました。
こんだけ簡潔に日本語で説明されているものは、そう簡単には
ネット検索では見つけられないんじゃないかと思います。
SIMD命令には詳しく有りませんが、ちゃんとレイテンシのことまで
考えないと真価を発揮できないようですね。
知りませんけど、Intelコンパイラでもここまでは自動最適化で
やってくれないかもしれませんね。実際どうなのかお聞きしてみたいものですが。
実はコンパイラの最適化というものは、コンパイラ作者自身はやりたいと思っていても、
実際にコンピュータに自動的にやらせるのは結構大変なものなのです。
細かな注意点が沢山あるためです。最大の問題は、レジスタが無限に
あるわけではないことと、特定のレジスタにしか対応していないマシン語が
あることから来ます。もう一つは、さまざまな型やサイズの変数があるために、
色々なパターンに対応するのが難しいことにあります。
そういうこととに加えてレイテンシの自動配慮などを行おうとすると、最適化を
自動的に行うコードは非常に複雑で膨大な量になるのです。
また、今のCPUには、レジスタは16本くらいと結構沢山有るので、レジスタが不足した
場合の処理は、滅多にテストできません。そのため、その最適化処理はなかなか
テストできないのです。ですので、生半可なテストでは間違いが含まれていても
分からないままコンパイラを出荷してしまう事がありえます。敢えてレジスタが3本しか
使えないようにした状態でコンパイラをテストしたりする方法も一つの手です。
または、テストを余りしなくても明らかに正しいことが分かるようにコーディングする
ことです。しかし、それは余り簡単なことでは有りません。
なるほどね。かなり勉強になりました。
こんだけ簡潔に日本語で説明されているものは、そう簡単には
ネット検索では見つけられないんじゃないかと思います。
SIMD命令には詳しく有りませんが、ちゃんとレイテンシのことまで
考えないと真価を発揮できないようですね。
知りませんけど、Intelコンパイラでもここまでは自動最適化で
やってくれないかもしれませんね。実際どうなのかお聞きしてみたいものですが。
実はコンパイラの最適化というものは、コンパイラ作者自身はやりたいと思っていても、
実際にコンピュータに自動的にやらせるのは結構大変なものなのです。
細かな注意点が沢山あるためです。最大の問題は、レジスタが無限に
あるわけではないことと、特定のレジスタにしか対応していないマシン語が
あることから来ます。もう一つは、さまざまな型やサイズの変数があるために、
色々なパターンに対応するのが難しいことにあります。
そういうこととに加えてレイテンシの自動配慮などを行おうとすると、最適化を
自動的に行うコードは非常に複雑で膨大な量になるのです。
また、今のCPUには、レジスタは16本くらいと結構沢山有るので、レジスタが不足した
場合の処理は、滅多にテストできません。そのため、その最適化処理はなかなか
テストできないのです。ですので、生半可なテストでは間違いが含まれていても
分からないままコンパイラを出荷してしまう事がありえます。敢えてレジスタが3本しか
使えないようにした状態でコンパイラをテストしたりする方法も一つの手です。
または、テストを余りしなくても明らかに正しいことが分かるようにコーディングする
ことです。しかし、それは余り簡単なことでは有りません。
401デフォルトの名無しさん
2019/11/16(土) 16:18:37.52ID:+CnVgCxY >>400
最適化に関して。
例えば、最適化は、色々なパターンの最適化をどのような順序で施すかによって、
最終コードの質が変わってくることがあります。というのは、人間にとっては
割と大丈夫なのですが、コンパイラにとっては、非常に複雑でそれ以上最適化
できないようなコードに見える状態に陥ってしまうことがあるからです。
普通は、少しずつ良いコードになるよな修正を何度も何度も繰り返して、それ以上
良いコードになる方法が分からなくなった時点で最適化が終わります。
ところが、いったん、悪いコードにしてから、もう一度最適化をしてみると、
最後のコードは良いコードになる場合があります。このような最適化は人間には
余り難しくないのですが、コンパイラにとっては大変なのです。
なぜなら、悪いコードになってもいい事を許しだすと、オセロの先読みの min, max
方の様な試行錯誤型の人工知能的なものが必要になるのですが、そのような最適化は、
普段は余り効果を発揮しにくいのに、処理時間が膨大になるためです。
人間は、一度最適化したコードは、何年もそのまま使います。ところが、コンパイラは、
10分に一度くらいは、ビルドし直します。ですので、最適化にかけられる時間が違うのです。
CPUが人間より速くても、このような事情があるので、人間より良いコードを出すのは
案外難しいのです。
最適化に関して。
例えば、最適化は、色々なパターンの最適化をどのような順序で施すかによって、
最終コードの質が変わってくることがあります。というのは、人間にとっては
割と大丈夫なのですが、コンパイラにとっては、非常に複雑でそれ以上最適化
できないようなコードに見える状態に陥ってしまうことがあるからです。
普通は、少しずつ良いコードになるよな修正を何度も何度も繰り返して、それ以上
良いコードになる方法が分からなくなった時点で最適化が終わります。
ところが、いったん、悪いコードにしてから、もう一度最適化をしてみると、
最後のコードは良いコードになる場合があります。このような最適化は人間には
余り難しくないのですが、コンパイラにとっては大変なのです。
なぜなら、悪いコードになってもいい事を許しだすと、オセロの先読みの min, max
方の様な試行錯誤型の人工知能的なものが必要になるのですが、そのような最適化は、
普段は余り効果を発揮しにくいのに、処理時間が膨大になるためです。
人間は、一度最適化したコードは、何年もそのまま使います。ところが、コンパイラは、
10分に一度くらいは、ビルドし直します。ですので、最適化にかけられる時間が違うのです。
CPUが人間より速くても、このような事情があるので、人間より良いコードを出すのは
案外難しいのです。
402デフォルトの名無しさん
2019/11/16(土) 17:14:42.25ID:XECBqAmz 長いんだよ
403デフォルトの名無しさん
2019/11/16(土) 18:54:54.37ID:3SiuPEy1 最適化に関して
案外難しいのです。
案外難しいのです。
404デフォルトの名無しさん
2019/11/16(土) 22:40:57.80ID:moAaFJrn アルゴリズムの最適化なら組み込み関数でもできる
なのに、アセンブラを使う理由があるのかって話なのに、なんで組み込み関数のサンプルなんだ?
自慢のコード片ってのは、アセンブラで書いたのに決まってるでしょ
言い争いしてたどっちが>>316なんだ?
なのに、アセンブラを使う理由があるのかって話なのに、なんで組み込み関数のサンプルなんだ?
自慢のコード片ってのは、アセンブラで書いたのに決まってるでしょ
言い争いしてたどっちが>>316なんだ?
405デフォルトの名無しさん
2019/11/17(日) 08:46:55.15ID:Mp5WsRX6 「究極の最適化はアセンブラしかない」
これに反対する人はいないよな?
SIMDの高速化でIntrinsicsに対しての話
アルゴリズムの最適化?
そんなものIntrinsicsを使う必要すら無い
これに反対する人はいないよな?
SIMDの高速化でIntrinsicsに対しての話
アルゴリズムの最適化?
そんなものIntrinsicsを使う必要すら無い
406デフォルトの名無しさん
2019/11/17(日) 08:53:33.84ID:Mp5WsRX6 実際の開発現場では
(アセンブラではなくて)Intrinsicsを使うことが多い
これも別に誰も反対していない
(アセンブラではなくて)Intrinsicsを使うことが多い
これも別に誰も反対していない
407デフォルトの名無しさん
2019/11/17(日) 08:54:39.00ID:Mp5WsRX6 君はいったい誰と戦っているの?
408デフォルトの名無しさん
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化出来ずにいる)
なんかあんたの主張はずれてんだよな
本当に「究極」を求めるのなら、自分も>>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化出来ずにいる)
409デフォルトの名無しさん
2019/11/17(日) 12:23:27.78ID:9epihDl/ >>408
横からだけど、最後の方はわかるけどコンパイラオプションのは組み込み関係ないし
単一の浮動小数点演算をSSEのレジスタ使うだけっしょ
あとハードの制約を外すんならSSEだのAVXだの選択肢に入らんでしょ
一般のPCにみんなついてるGPUだって使えるんだから
CPUの拡張命令を使うのはそれなりにハードの制約があるからだ
横からだけど、最後の方はわかるけどコンパイラオプションのは組み込み関係ないし
単一の浮動小数点演算をSSEのレジスタ使うだけっしょ
あとハードの制約を外すんならSSEだのAVXだの選択肢に入らんでしょ
一般のPCにみんなついてるGPUだって使えるんだから
CPUの拡張命令を使うのはそれなりにハードの制約があるからだ
410デフォルトの名無しさん
2019/11/17(日) 13:15:14.50ID:Mp5WsRX6 ここはCPUの高速化のスレだから
GPUやFPGAの話は他で
GPUやFPGAの話は他で
411デフォルトの名無しさん
2019/11/17(日) 13:43:25.31ID:P0Gu6nYy BigInt用のSIMDがあったな
412デフォルトの名無しさん
2019/11/17(日) 15:39:11.30ID:254DddZo413デフォルトの名無しさん
2019/11/17(日) 19:51:32.97ID:ADq5wcSz >>1読めよ。
414デフォルトの名無しさん
2019/11/17(日) 21:03:25.34ID:254DddZo >>413
「弘法筆を選ばず」って諺があるように、本当に才能のある人はわざわざ手段限定してドヤ顔したりしないだろ
せこいマウント合戦繰り広げてたの見てると、器の小ささを感じてしまうんだよな
そんなの恥ずかしいから止めとけよ
それより、エレガントなコード片晒した方がかっこいいぞ
「弘法筆を選ばず」って諺があるように、本当に才能のある人はわざわざ手段限定してドヤ顔したりしないだろ
せこいマウント合戦繰り広げてたの見てると、器の小ささを感じてしまうんだよな
そんなの恥ずかしいから止めとけよ
それより、エレガントなコード片晒した方がかっこいいぞ
415デフォルトの名無しさん
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への移植の障害になるほど
そういうことで、現在では「アセンブリで究極の最適化」なんて、時代に取り残された年寄りの妄言みたいな
状態になってるから、組み込み関数使って保守性をよくしておけばいい
推進していて、Threading Building Block(TBB)とかOpenMPなんかを使って並列化で速度を稼げと言ってる
現在では、IntelのIPPやMKLもフリー化されて、定番の処理は予め用意されてる
動画処理なんかでも、フィルタやフレーム別に複数のバッファを用意してマルチスレッド化してると
スループットを稼ぐようになってるので、最適化が甘くてもハイパースレッディングで実行ユニットは埋められる
GPUで計算する場合はライブラリ呼び出しだし、64bitでインラインアセンブラを使えるIntelのコンパイラは
700ドル以上するし、GCCのasmは癖が強すぎてMASMやNASMへの移植の障害になるほど
そういうことで、現在では「アセンブリで究極の最適化」なんて、時代に取り残された年寄りの妄言みたいな
状態になってるから、組み込み関数使って保守性をよくしておけばいい
416デフォルトの名無しさん
2019/11/18(月) 07:50:50.36ID:3AU+PcKz マルチスレッド化してスループットを稼ぐようになってるので
417デフォルトの名無しさん
2019/11/18(月) 15:15:29.56ID:8gyrpVW6 Pen4の失敗で何を学習したんだか
418デフォルトの名無しさん
2019/11/19(火) 01:17:30.21ID:dHazNLDF 熱湯バーストか・・・
419デフォルトの名無しさん
2019/11/19(火) 03:23:02.67ID:MyJ9nvLK >>417
NetBurstと違って、スパコンの主流が数千から数十万コア以上の超並列マシンになって
そろそろ20年近く経つのに、まだこんなこと言ってるのがいるんだな
よくまあ、これで最適化を語ってたものだ
NetBurstと違って、スパコンの主流が数千から数十万コア以上の超並列マシンになって
そろそろ20年近く経つのに、まだこんなこと言ってるのがいるんだな
よくまあ、これで最適化を語ってたものだ
420デフォルトの名無しさん
2019/11/19(火) 06:56:46.21ID:MyJ9nvLK なんでPen4なんかを持ち出すのか引っかかってたけど、もしかしてNehalem以降のCPUで
ハイパースレッディングが復活してるのも知らなかったとか?
>>286や>>287で
>コンパイラの最適化なんぞ知れてる
>その辺を最適化したければガシガシアセンブラだが
とか書いてたのがおかしいと思ったんだよな
シングルスレッドでしか動かないCPUなんかで、
HaswellやSkylake、IceLakeみたいな実行部の強化をするはずないだろ
OpenMPやTBBでマルチスレッド化すればベクタ化は組み込み関数でも十分だし、
メモリアクセスがネックになってるのに、どうしてマルチスレッドによる並列化に言及しないのか不思議だったんだよな
ハイパースレッディングが復活してるのも知らなかったとか?
>>286や>>287で
>コンパイラの最適化なんぞ知れてる
>その辺を最適化したければガシガシアセンブラだが
とか書いてたのがおかしいと思ったんだよな
シングルスレッドでしか動かないCPUなんかで、
HaswellやSkylake、IceLakeみたいな実行部の強化をするはずないだろ
OpenMPやTBBでマルチスレッド化すればベクタ化は組み込み関数でも十分だし、
メモリアクセスがネックになってるのに、どうしてマルチスレッドによる並列化に言及しないのか不思議だったんだよな
421デフォルトの名無しさん
2019/11/19(火) 13:17:00.58ID:lt+0x6jo スレッド分けももちろん重要です
まあ安直にOpenMPでも良いんですが
これも究極はスクラッチ
スーパーコンピューターと違って
普通のPCだとせいぜいHTTとマルチコアなので
まあそれほど複雑ではないですが
>>300の例だと、
演算ポートもロードポートもガラガラなので
HTTは非常に有効です
データがL1にあれば性能はほぼ倍になります
一方>>394の場合は演算ポートもロードポートもフルに使ってるので、
HTTの効果はありません
汎用整数命令や整数ベクタを使うスレッドに分けてあげましょう
まとまった単純な処理でHTTの効果が大きい物は
ポートがスカスカな糞コードですね
メモリ帯域で大きく性能が変わるコードも糞コード
これは>>395の通り
まあ安直にOpenMPでも良いんですが
これも究極はスクラッチ
スーパーコンピューターと違って
普通のPCだとせいぜいHTTとマルチコアなので
まあそれほど複雑ではないですが
>>300の例だと、
演算ポートもロードポートもガラガラなので
HTTは非常に有効です
データがL1にあれば性能はほぼ倍になります
一方>>394の場合は演算ポートもロードポートもフルに使ってるので、
HTTの効果はありません
汎用整数命令や整数ベクタを使うスレッドに分けてあげましょう
まとまった単純な処理でHTTの効果が大きい物は
ポートがスカスカな糞コードですね
メモリ帯域で大きく性能が変わるコードも糞コード
これは>>395の通り
422デフォルトの名無しさん
2019/11/19(火) 13:19:58.60ID:lt+0x6jo スレッドの分け方はこのスレの趣旨とは違いそうなのでこの辺で
423デフォルトの名無しさん
2019/11/19(火) 16:25:51.48ID:8/4AEaZj > NetBurstと違って、スパコンの主流が数千から数十万コア以上の超並列マシンになってそろそろ20年近く経つ
というかこの人は何を言ってるのだろう。
スパコンなんて40年以上前から並列処理の性能ということも知らんとかまだ子供か学生かな?
当時のPen4のことも全然知らないんじゃないだろうか。NetBurstとスパコン比べて何が言いたかったのだろう。
というかこの人は何を言ってるのだろう。
スパコンなんて40年以上前から並列処理の性能ということも知らんとかまだ子供か学生かな?
当時のPen4のことも全然知らないんじゃないだろうか。NetBurstとスパコン比べて何が言いたかったのだろう。
424デフォルトの名無しさん
2020/03/19(木) 23:46:19.85ID:sn82uzw4 ちょいとメンテがてらにmasm弄ってるんだけど、
mov r/m64, imm32 形式のバイナリ吐かせる記述方法がわからん。
mov r/m64, imm32 形式のバイナリ吐かせる記述方法がわからん。
425デフォルトの名無しさん
2020/03/20(金) 00:09:21.01ID:/yJp+267 自己レスになるが、符号付き与えると符号拡張されるようだった
mov rax, -1
↓これと同じ結果
mov rax, 0FFFFFFFFFFFFFFFFh
VS2019だと
return 0xFFFFFFFFFFFFFFFF;
これが最適化されてコンパクトになっていたという話。やっぱアセンブラめんどい。
mov rax, -1
↓これと同じ結果
mov rax, 0FFFFFFFFFFFFFFFFh
VS2019だと
return 0xFFFFFFFFFFFFFFFF;
これが最適化されてコンパクトになっていたという話。やっぱアセンブラめんどい。
426デフォルトの名無しさん
2020/03/25(水) 00:15:18.17ID:JuA9otrT ICC 19.1って32bitで最適化してビルドすると、コード生成の拡張命令でSSE2やAVX未満を指定してもAVXのコード吐き出す事がある謎の仕様があって困る。というかたぶんバグ。
できあがったコードに正常でない無効なオペランドが含まれたり要はぶっ壊れてる。
これを回避するには、最適化 /Od 無効で任意の拡張命令を指定するとAVXが含まれずに正常なコードになるが、最適化はたぶんされていないだろうな・・・。
古い環境作ってレガシー用のビルド環境まだ要るんかなあ。
できあがったコードに正常でない無効なオペランドが含まれたり要はぶっ壊れてる。
これを回避するには、最適化 /Od 無効で任意の拡張命令を指定するとAVXが含まれずに正常なコードになるが、最適化はたぶんされていないだろうな・・・。
古い環境作ってレガシー用のビルド環境まだ要るんかなあ。
427デフォルトの名無しさん
2020/03/25(水) 08:28:03.35ID:iketgqFM そりゃヒドイなw
428デフォルトの名無しさん
2020/03/25(水) 12:40:22.26ID:BJmxk7sc さすがにバグレポート送るべき
再現できるコードとその時のオプションを添えて
とはいえ、既に世界の誰かが同じことをやっている可能性は大
再現できるコードとその時のオプションを添えて
とはいえ、既に世界の誰かが同じことをやっている可能性は大
429426
2020/03/25(水) 15:55:42.99ID:JuA9otrT 謎のAVX出力は_mulx_u32が原因だった。
てっきりただの乗算と思いきや、これBMI2つまりAVX2の命令セット世代なんですね。
おそらくベクトル化を試みるかをした時、コンパイラ内部の命令セットのフラグがAVX2に上書きされて処理がおかしくなっていると予想。
今回の問題が無かったにせよ、非AVX2環境では動かないコードになっていたので自分のバグでもあるが、普通に動く場合もあるので注意がいる。
てっきりただの乗算と思いきや、これBMI2つまりAVX2の命令セット世代なんですね。
おそらくベクトル化を試みるかをした時、コンパイラ内部の命令セットのフラグがAVX2に上書きされて処理がおかしくなっていると予想。
今回の問題が無かったにせよ、非AVX2環境では動かないコードになっていたので自分のバグでもあるが、普通に動く場合もあるので注意がいる。
430デフォルトの名無しさん
2020/07/10(金) 21:49:32.88ID:7RoGj1wV コンパイラのバグとさわぐ99%は自分のバグ
431デフォルトの名無しさん
2020/07/11(土) 10:55:26.06ID:J0INoyBc まあそうだね
432デフォルトの名無しさん
2020/07/11(土) 15:27:19.59ID:f0gqe2Et 正常な動作しなかったんだからそれは普通にバグでしょ
433デフォルトの名無しさん
2020/07/11(土) 19:00:18.09ID:zVc8luVQ 人によるな
わいの場合99%はCPUやOS、コンパイラのバグだな
わいの場合99%はCPUやOS、コンパイラのバグだな
434デフォルトの名無しさん
2020/07/12(日) 08:05:46.65ID:D8OEpmlP 人?
おまえ人だった?
おまえ人だった?
435デフォルトの名無しさん
2020/09/04(金) 00:13:07.71ID:951pQYyb レイトレでOpenMP使ったら早くなるかと試したけど却って遅くなった
各ピクセルの演算には特に共有するコンテキストとかあるわけじゃないのに
変に安全装置が働いているんだろうか?
各ピクセルの演算には特に共有するコンテキストとかあるわけじゃないのに
変に安全装置が働いているんだろうか?
436デフォルトの名無しさん
2020/09/04(金) 00:21:44.94ID:Znx8nm1Y437デフォルトの名無しさん
2020/09/04(金) 07:24:05.99ID:iEv5UTAi 細粒度もなにも、OpenMPはもともと4並列とか8並列とかコア数に合わせてやるもんだろう。
まさかピクセル数分だけ並列化すると思ってるのか?
まさかピクセル数分だけ並列化すると思ってるのか?
438デフォルトの名無しさん
2020/09/04(金) 11:27:09.07ID:INXShDjj439デフォルトの名無しさん
2020/09/04(金) 11:59:04.83ID:eJvaiWE4 chinebenchなんかもレイトレだけど普通にコア数分早くなるでしょ
設計がまずいだけじゃないの
設計がまずいだけじゃないの
440デフォルトの名無しさん
2020/09/06(日) 08:40:00.70ID:bVBmADbq 自作erレベルじゃなくム板なのでコード見てもう少し深く原因を解析してくれ。
441デフォルトの名無しさん
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に制御を返してる)
とりあえずThreadPool使って1行を3分割して3スレッドで描画
3つのスレッドのタスクが完了するまで待機
って感じのことをやってみたらOpenMPでやったのと同じような程度で
処理速度が劣化した
(毎行描画ごとにSDLに制御を返してる)
443デフォルトの名無しさん
2020/09/06(日) 19:19:09.98ID:yqdZF37w SIMDも気になるけど知識がないから時間かかりそう
444デフォルトの名無しさん
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板で聞いたほうが良いと思う。
447デフォルトの名無しさん
2020/09/06(日) 20:56:21.30ID:Ady7PdVC んなこといいはじめたら、SIGGRAPHとか論文のほうが。w
448デフォルトの名無しさん
2020/09/06(日) 21:02:03.50ID:PyqKwzZq SIGGRAPHで発表されたばかりの先端的アルゴリズムなら、ここで質問するよりMAC板で聞いたほうが良い。
あるいは、先端アルゴリズムの数学的な部分についてはLinux板も詳しい。
MAC板は、人工頭脳を使ったグラフィック表現なども研究してるので、世界で通用すると思う。
あるいは、先端アルゴリズムの数学的な部分についてはLinux板も詳しい。
MAC板は、人工頭脳を使ったグラフィック表現なども研究してるので、世界で通用すると思う。
449デフォルトの名無しさん
2020/09/06(日) 21:19:36.31ID:gGwX7R3F 3スレッドでやっても時間が変わらなかったという時点で何かポカしているんだと思うが、
じゃあレンダリングするピクセル数を減らしたらそれに比例して時間が短縮するだろうか。
じゃあレンダリングするピクセル数を減らしたらそれに比例して時間が短縮するだろうか。
450デフォルトの名無しさん
2020/09/06(日) 21:28:21.32ID:PyqKwzZq そういうのはLinux板で聞けば。
451デフォルトの名無しさん
2020/09/06(日) 21:41:48.21ID:q0H7dLCO >>442
vsならオプションでopenmp効かせてる?
vsならオプションでopenmp効かせてる?
452デフォルトの名無しさん
2020/09/06(日) 21:45:15.95ID:q0H7dLCO ってどっちでも遅くなったのかな
453デフォルトの名無しさん
2020/09/06(日) 22:25:50.00ID:PyqKwzZq ム板は基本がおろそかなので、数学的な質問はLinux板が良いです。
454デフォルトの名無しさん
2020/09/06(日) 22:34:12.06ID:gGwX7R3F 質問者の環境がLinuxなのかWindowsなのかも明らかじゃないのに
しきりにLinux板を薦めるのがメンヘラっぽくて怖いw
しきりにLinux板を薦めるのがメンヘラっぽくて怖いw
455デフォルトの名無しさん
2020/09/06(日) 23:25:15.48ID:PyqKwzZq ム板はバカの集まりなのでLinux板で聞いたほうが良いと教えてるだけ。
Windows10は関係ない。
Windows10は関係ない。
456デフォルトの名無しさん
2020/09/07(月) 10:28:57.49ID:syrYBlXo 元々犬板ってレベルが低い犬厨をUNIX板から隔離するためにできた板なんだけど
457デフォルトの名無しさん
2020/09/07(月) 17:45:05.46ID:FeHkNruR デバッグビルドでテストするアホの予感
458デフォルトの名無しさん
2020/09/07(月) 17:58:53.90ID:vcUD6VhW 1行を3分割て1行ループ回すごとにスレッド読んでるなら遅くて当たり前な気がするけど
横3分割って意味なのかな
横3分割って意味なのかな
459デフォルトの名無しさん
2020/09/07(月) 18:25:16.84ID:b75Xf7nO SIMDなんて-O3付けとけば自動で行われるじゃん。
それ以上は考えるだけ無駄でしょ。
それ以上は考えるだけ無駄でしょ。
460デフォルトの名無しさん
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);
}
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: 正
parallel for: 正
463デフォルトの名無しさん
2020/09/14(月) 02:42:30.59ID:5Y5z53c+ スレッド数も1〜4でいろいろ変えてみたら
1スレッド:一番早い
2スレッド:最悪
3スレッド:2スレよりマシ
4スレッド:3スレよりマシだけど1スレより遅い。CPU使用率100%に張り付く。
みたいな感じだった
1スレッド:一番早い
2スレッド:最悪
3スレッド:2スレよりマシ
4スレッド:3スレよりマシだけど1スレより遅い。CPU使用率100%に張り付く。
みたいな感じだった
464デフォルトの名無しさん
2020/09/14(月) 07:25:57.13ID:tgbt1xqp yのループどうなってんだこれ
465デフォルトの名無しさん
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
[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
467デフォルトの名無しさん
2020/09/14(月) 12:11:30.32ID:tgbt1xqp 実行時のコアの負荷どうなってるのかと
コンパイルオプションでopenmp有効にしてるの?
してるんだったらループ内の排他制御周りで時間食ってんじゃないの
コンパイルオプションでopenmp有効にしてるの?
してるんだったらループ内の排他制御周りで時間食ってんじゃないの
468デフォルトの名無しさん
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+ マルチスレッドにしてる部分は純粋な計算のみで結果を配列に書き込んでるだけ
471デフォルトの名無しさん
2020/09/14(月) 12:44:52.40ID:tgbt1xqp あとはxじゃなくてyのループをpararellにするぐらいしかないんじゃね
スレッド呼び出しの回数多くなってるでしょそれ
1行0.8秒もかかるならスレッドのコストあんま関係ないような気もするけど
俺に思いつくのはApplyresultがなにかしてんのかなってぐらい
スレッド呼び出しの回数多くなってるでしょそれ
1行0.8秒もかかるならスレッドのコストあんま関係ないような気もするけど
俺に思いつくのはApplyresultがなにかしてんのかなってぐらい
472デフォルトの名無しさん
2020/09/14(月) 12:45:56.25ID:Bl6WtuBD473デフォルトの名無しさん
2020/09/14(月) 12:55:20.98ID:5Y5z53c+ もともと外側ループに#pragma ompつけてたけどそれも遅かった(1スレッドに比べて)
Applyresultは画面に結果を表示させる(バッファ入れ替え)だけで
処理時間は0.01秒もかからない
Applyresultは画面に結果を表示させる(バッファ入れ替え)だけで
処理時間は0.01秒もかからない
474デフォルトの名無しさん
2020/09/14(月) 13:00:39.33ID:tgbt1xqp 画面表示は別スレッドにすべきだと思うが
バッファ入れ替えのみで別スレッドで描画させてるなら多分問題ないけど
あとは暗黙のコピーでもどっか発生してるのかね
vsのopen mpだとデフォでスレッドプールしてるっぽいけどgccどうなんだろ
バッファ入れ替えのみで別スレッドで描画させてるなら多分問題ないけど
あとは暗黙のコピーでもどっか発生してるのかね
vsのopen mpだとデフォでスレッドプールしてるっぽいけどgccどうなんだろ
475デフォルトの名無しさん
2020/09/14(月) 13:04:20.42ID:5Y5z53c+ あーコピーは有り得そうだなぁ
476デフォルトの名無しさん
2020/09/14(月) 13:41:47.43ID:5Y5z53c+ ラムダ式にthisをキャプチャしても単なるポインタのコピーだけだよね
うーんもうあきらめようかな
うーんもうあきらめようかな
477デフォルトの名無しさん
2020/09/14(月) 14:04:34.23ID:Bl6WtuBD478デフォルトの名無しさん
2020/09/14(月) 14:31:35.53ID:lDodbDrd > 1スレッド:一番早い
> 2スレッド:最悪
> 3スレッド:2スレよりマシ
> 4スレッド:3スレよりマシだけど1スレより遅い。CPU使用率100%に張り付く。
これで結論は出てる。同期コストを見積もれない馬鹿は並列化すんなってこと。
> 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+ 同期コストに目をつけるのが的外れってことはわかる
481デフォルトの名無しさん
2020/09/14(月) 15:07:54.11ID:lDodbDrd まだその小学生の理科の実験みたいな分析を続けるのはいかがなものか。ここはム板である。
答えはコードに書いてある。夏休みの宿題じゃないから答えを見ていい。
結果とコードがあるから後はそれを理解する脳みそが足りてるかどうかだけ。
>>480
結論は出たな。キミにはこのスレはまだ早い。並列化=同期。基礎知識が全く足りてない。
コードを見てコストが読めない人が一体なにを最適化するのだ。
キミのやってることはPCパーツをとっかえひっかえしてベンチ走らす自作マニアと同じだ。
答えはコードに書いてある。夏休みの宿題じゃないから答えを見ていい。
結果とコードがあるから後はそれを理解する脳みそが足りてるかどうかだけ。
>>480
結論は出たな。キミにはこのスレはまだ早い。並列化=同期。基礎知識が全く足りてない。
コードを見てコストが読めない人が一体なにを最適化するのだ。
キミのやってることはPCパーツをとっかえひっかえしてベンチ走らす自作マニアと同じだ。
482デフォルトの名無しさん
2020/09/14(月) 15:24:00.24ID:5Y5z53c+ よくしゃべる無能だな
483デフォルトの名無しさん
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+486デフォルトの名無しさん
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%)
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%)
487デフォルトの名無しさん
2020/09/14(月) 20:43:28.09ID:WpcYzJ76488デフォルトの名無しさん
2020/09/15(火) 00:54:25.17ID:cZkGG5+C489デフォルトの名無しさん
2020/09/15(火) 07:39:41.08ID:AdrM302u ここは昔から機械語レベルの最適化スレなんだが、
そういう丸投げ系の上流の話はスレ分けたほうがよくないか。バイナリは見る気ないんだろ?
そういう丸投げ系の上流の話はスレ分けたほうがよくないか。バイナリは見る気ないんだろ?
490デフォルトの名無しさん
2020/09/15(火) 13:44:37.95ID:xfAMzDEm 同期コストとかまったく関係無かったねw
491デフォルトの名無しさん
2020/09/18(金) 14:56:14.26ID:O98b4bbM ,、‐ " ̄:::゙:丶、
,r::::l3゙::::::::/ハヽ:ヽ::::、:ヽ
{::://:::::::// ヽ\ト、:::::::!
ヾ l:::::::/ 丶 `ヾ ィ、:::|
|;:r::| O` 'O ゙ハ| < ここ初心者がくるところじゃないから
ヽハ :.:. :.: レ
´\ r‐--‐、,ノ
r、 r、/ヾ ̄下ヘ
ヽヾ 三 |:l1、_ヽ/__ .ィヽ
\>ヽ/ |` } n_n| |
ヘ lノ `'ソ l゚ω゚| |
/´ /  ̄|. |
,r::::l3゙::::::::/ハヽ:ヽ::::、:ヽ
{::://:::::::// ヽ\ト、:::::::!
ヾ l:::::::/ 丶 `ヾ ィ、:::|
|;:r::| O` 'O ゙ハ| < ここ初心者がくるところじゃないから
ヽハ :.:. :.: レ
´\ r‐--‐、,ノ
r、 r、/ヾ ̄下ヘ
ヽヾ 三 |:l1、_ヽ/__ .ィヽ
\>ヽ/ |` } n_n| |
ヘ lノ `'ソ l゚ω゚| |
/´ /  ̄|. |
492デフォルトの名無しさん
2020/10/01(木) 16:30:20.85ID:C7xRzI9k なんだこの馬鹿議論は。
493デフォルトの名無しさん
2020/10/02(金) 14:52:54.88ID:R9hS5H3t494デフォルトの名無しさん
2020/10/02(金) 15:13:27.56ID:R9hS5H3t それすらできないと本当に馬鹿なのがどっちか疑われても仕方ない
495デフォルトの名無しさん
2020/10/02(金) 15:30:34.86ID:TECFGYHm sage入れずに書いているのは1人だけ・・・
496デフォルトの名無しさん
2020/10/02(金) 16:17:08.57ID:R9hS5H3t こんな機能あったのか
すまんな5ch使ったの最近なんだ
すまんな5ch使ったの最近なんだ
497デフォルトの名無しさん
2020/10/02(金) 16:21:49.97ID:rTJNlmL4 ID:PyqKwzZq
ID:5Y5z53c+
ID:R9hS5H3t
はいはい(笑)
ID:5Y5z53c+
ID:R9hS5H3t
はいはい(笑)
498デフォルトの名無しさん
2020/10/02(金) 16:32:57.58ID:R9hS5H3t もしかしてここって底辺の集まり?
499デフォルトの名無しさん
2020/10/02(金) 17:33:14.36ID:rTJNlmL4 えーえーそうでちゅよ(笑)
500デフォルトの名無しさん
2020/10/02(金) 18:21:05.73ID:OFlYu8W1 >>493
何の切り分けもしてない頓珍漢な結果ではなく全コード出しなよ。ここム板だよ?
アセンブラわかりませんとか、自分で書いたC++コードがどういうバイナリ吐くか想像もできないとか、
最適化、高速化スレでは話にならないんだけど初心者プログラマ君。
何の切り分けもしてない頓珍漢な結果ではなく全コード出しなよ。ここム板だよ?
アセンブラわかりませんとか、自分で書いたC++コードがどういうバイナリ吐くか想像もできないとか、
最適化、高速化スレでは話にならないんだけど初心者プログラマ君。
501デフォルトの名無しさん
2020/10/02(金) 18:26:33.85ID:R9hS5H3t 底辺が必死だなw
502デフォルトの名無しさん
2020/10/03(土) 09:40:53.11ID:F7oAx4CC 餓鬼に餌を与えないでください
503デフォルトの名無しさん
2020/10/09(金) 19:32:19.84ID:6ayaX4HS504デフォルトの名無しさん
2020/10/09(金) 19:56:21.81ID:zHpvTSgq HTが何か分かってないレベルでマルチスレッドにしたら遅くなったとか入門者スレでやれよ。
505デフォルトの名無しさん
2020/10/10(土) 07:36:17.00ID:Jl1ICDJn506デフォルトの名無しさん
2020/12/09(水) 21:38:54.77ID:2ICSyPg3 oneAPI って無料なん?
507デフォルトの名無しさん
2022/04/21(木) 11:21:49.16ID:uYH/mfeQ 基本無料やぞ
というかvtune使わずに最適化なんぞ出来る訳が無い
というかvtune使わずに最適化なんぞ出来る訳が無い
508デフォルトの名無しさん
2022/04/21(木) 11:53:42.82ID:9/r0Uuj1 OPPAIに見えた
509デフォルトの名無しさん
2022/07/30(土) 16:25:46.55ID:paa5jUiA 低俗化せいこう
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「飛行機は犬でできている」すら解けない異変…子どもの“読解力低下”を招くスマホ動画と文科省の迷走 (女性自身) [少考さん★]
- 【ドラフト会議】織田翔希「アメリカに挑戦する気持ちはまったくぶれません」 巨人強行指名も迷いなし [征夷大将軍★]
- 【野球】巨人、異例の“中学校卒”を指名 場内どよめき…15歳がプロに声 [THE FURYφ★]
- 【話題】「子供の声は騒音ではない」法制化は否定 こども政策担当相「温かく見守り支えることが重要」 [ひぃぃ★]
- 幾田りら、再生100億回でも札幌ドームが埋まらず「YOASOBIほどの認知度でもチケット余るのか」再生数と集客の残酷なギャップ★2 [muffin★]
- 【スクープ】超人気声優・小野賢章 美人声優M・A・Oと二人きりの「極秘誕生日会デート」撮った 花澤香菜との離婚前から親密な関係 [Ailuropoda melanoleuca★]
- アメリカ「共同介入時はユーロ円を円買いして介入した」 [907330772]
- 「NTR」って幅が広いけど、許せるNTRって案外幅が狭いよな。読後感がただただ悪いだけなのは苦手だわ。 [592058334]
- 【東京】クレーンゲームの景品に卵1パック(10個) [696684471]
- INMU KING削除の🏡
- 【悲報】「京都府の京都市以外のエリア」あまりにも謎すぎることが明らかになってしまう…😨いったい何があるんだよ… [562983582]
- 第一回選択希望選手 麦野沈利 投手(17)🏡