Hello hackers !
Qiitaは、エンジニアリングに関する知識を記録・共有するためのサービスです。
コードを書いていて気づいたことや、自分がハマったあの仕様について、
他のエンジニアと知見を共有しましょう ;)
https://qiita.com/
Qiita(キータ)は、Incrementsが運営するプログラミング情報のナレッジコミュニティ。
2016年現在で日本最大のプログラマーコミュニティとされている[1]。
https://internet.watch.impress.co.jp/docs/news/1025972.html
前スレ Qiita
https://mevius.5ch.net/test/read.cgi/tech/1542357242/
Qiita 2 - キータぞ、来たぞ、キータだぞー
https://mevius.5ch.net/test/read.cgi/tech/1658762410/
探検
Qiita 3 - キータぞ、来たぞ、キータだぞー
■ このスレッドは過去ログ倉庫に格納されています
2023/05/28(日) 09:56:01.47ID:twg6yDS4
278デフォルトの名無しさん
2023/08/11(金) 08:34:14.26ID:YfwUjgK1279デフォルトの名無しさん
2023/08/11(金) 08:59:40.37ID:WAWJg8ep 発狂してる俺様のレスを追いかけて全部読めとかいう頭のバグったやつ
280デフォルトの名無しさん
2023/08/11(金) 09:03:31.51ID:YfwUjgK1 本人が気づいてない可能性があるからボランティアで教えてあげている
君の文章では他の人間は全く理解できないと
そもそも自分と他人を区別できてるのかなw
君の文章では他の人間は全く理解できないと
そもそも自分と他人を区別できてるのかなw
281デフォルトの名無しさん
2023/08/11(金) 09:09:23.31ID:Y8RASnRQ Cの人のレスは複数に分かれて訂正もあって二つの比較がわかりにくいけど
Rustの人のレス>>272はdiff形式で一つのレスに書かれているから何と何を比較しているか一目瞭然でしょ
Rustの人のレス>>272はdiff形式で一つのレスに書かれているから何と何を比較しているか一目瞭然でしょ
282デフォルトの名無しさん
2023/08/11(金) 09:26:13.77ID:sVlBLJlv RustとRubyとMAUIをNGしてるやつは多いと思う
283デフォルトの名無しさん
2023/08/11(金) 09:34:13.85ID:YXKl/G3F 単語NG設定してるやつがそいつだけ重要なレスを読めていないことが原因で勘違いな書き込みを繰り返すパターンはよくあるよな
しかし今回のアホな>>276はNGしていないからレスしてるわけで単なるアホなパターンかと
しかし今回のアホな>>276はNGしていないからレスしてるわけで単なるアホなパターンかと
284デフォルトの名無しさん
2023/08/11(金) 15:23:23.45ID:Dz1zKJwc void hoge(int n, int num[n], int deleteNum)
{
for (int i = 0; i < n; i++) {
if (num[i] == deleteNum) { // deleteNumで指定した要素を0にする
num[i] = 0;
}
}
}
void piyo(int n, int num[n], int deleteNum)
{
for (int i = 0; i < n; i++) {
num[i] -= deleteNum * (deleteNum == num[i]); // deleteNumで指定した要素を消す
}
}
void hogera(int n, int num[n], int deleteNum)
{
for (int i = 0; i < n; i++) {
num[i] *= deleteNum != num[i]; // deleteNumで指定した要素を消す
}
}
↑を
{
for (int i = 0; i < n; i++) {
if (num[i] == deleteNum) { // deleteNumで指定した要素を0にする
num[i] = 0;
}
}
}
void piyo(int n, int num[n], int deleteNum)
{
for (int i = 0; i < n; i++) {
num[i] -= deleteNum * (deleteNum == num[i]); // deleteNumで指定した要素を消す
}
}
void hogera(int n, int num[n], int deleteNum)
{
for (int i = 0; i < n; i++) {
num[i] *= deleteNum != num[i]; // deleteNumで指定した要素を消す
}
}
↑を
285デフォルトの名無しさん
2023/08/11(金) 15:24:31.74ID:Dz1zKJwc #include <stdio.h>
#include <stdlib.h>
#include <time.h>
void __attribute__((noinline)) bench(const char* name, void (*func)(int, int[], int))
{
const int n = 100000000;
int* a = calloc(n, sizeof(int));
if (a) {
for (int i = 0; i < n; i++) {
a[i] = rand() % 2;
}
clock_t s = clock();
func(n, a, 0);
double t = (double)(clock() - s) / CLOCKS_PER_SEC;
printf("%s:\t%f\n", name, t);
free(a);
}
}
int main(void)
{
bench("hoge", hoge);
bench("piyo", piyo);
bench("hogera", hogera);
}
↑で測定した。
#include <stdlib.h>
#include <time.h>
void __attribute__((noinline)) bench(const char* name, void (*func)(int, int[], int))
{
const int n = 100000000;
int* a = calloc(n, sizeof(int));
if (a) {
for (int i = 0; i < n; i++) {
a[i] = rand() % 2;
}
clock_t s = clock();
func(n, a, 0);
double t = (double)(clock() - s) / CLOCKS_PER_SEC;
printf("%s:\t%f\n", name, t);
free(a);
}
}
int main(void)
{
bench("hoge", hoge);
bench("piyo", piyo);
bench("hogera", hogera);
}
↑で測定した。
286デフォルトの名無しさん
2023/08/11(金) 15:29:01.99ID:Dz1zKJwc gcc 12.2.0に-O2を指定
hoge: 0.279982
piyo: 0.059988
hogera: 0.051996
https://wandbox.org/permlink/cLGAj1OcfqmjdJeZ
clang 15.0.7に-O2を指定
hoge: 0.283996
piyo: 0.036019
hogera: 0.028001
https://wandbox.org/permlink/jEA3G3XMSKeCUKbZ
clang 15.0.7に-O2 -march=nativeを指定
hoge: 0.028001
piyo: 0.028001
hogera: 0.027980
https://wandbox.org/permlink/cMJSCT2nnvyhpSpD
hoge: 0.279982
piyo: 0.059988
hogera: 0.051996
https://wandbox.org/permlink/cLGAj1OcfqmjdJeZ
clang 15.0.7に-O2を指定
hoge: 0.283996
piyo: 0.036019
hogera: 0.028001
https://wandbox.org/permlink/jEA3G3XMSKeCUKbZ
clang 15.0.7に-O2 -march=nativeを指定
hoge: 0.028001
piyo: 0.028001
hogera: 0.027980
https://wandbox.org/permlink/cMJSCT2nnvyhpSpD
287デフォルトの名無しさん
2023/08/11(金) 15:40:51.42ID:Dz1zKJwc gccとclangの両方で最適化指示に-O2だけを指定した場合にhogeの結果が極端に悪いのは
・条件分岐命令が生成されている
・配列の内容をrand()で生成しているため分岐予測が外れまくる
ことが原因と思われる。
clangに-O2 -march=nativeを指定した場合にhogeの結果が他と変わらなくなったのは恐らくはAVX命令が使用され条件分岐がなくなったため。
試しに-O2 -mavx2を指定しても
hoge: 0.028001
piyo: 0.028002
hogera: 0.028002
https://wandbox.org/permlink/XqiQgGEs1BZJmpmp
変わらない結果となった。
・条件分岐命令が生成されている
・配列の内容をrand()で生成しているため分岐予測が外れまくる
ことが原因と思われる。
clangに-O2 -march=nativeを指定した場合にhogeの結果が他と変わらなくなったのは恐らくはAVX命令が使用され条件分岐がなくなったため。
試しに-O2 -mavx2を指定しても
hoge: 0.028001
piyo: 0.028002
hogera: 0.028002
https://wandbox.org/permlink/XqiQgGEs1BZJmpmp
変わらない結果となった。
288デフォルトの名無しさん
2023/08/11(金) 15:42:39.23ID:k/CU0rlR 別スレ立ててそこでやって
リンク貼っていいから
Qiitaと関係なくてスレチだし
元の記事はQiitaから削除されて存在しない
1つのテーマを掘り下げる目的がありそうだし
長くなりそう
リンク貼っていいから
Qiitaと関係なくてスレチだし
元の記事はQiitaから削除されて存在しない
1つのテーマを掘り下げる目的がありそうだし
長くなりそう
289デフォルトの名無しさん
2023/08/11(金) 22:03:23.82ID:n9doW6N2290デフォルトの名無しさん
2023/08/12(土) 02:16:01.85ID:MQtFcy0V 「なんでそんな書き方するの?」
「こっちのが速いから」
「へー、どれくらい?」
「100万回実行して数msかな」
「でもここ数回しか実行されないよ?」
「こっちのが速いから」
「へー、どれくらい?」
「100万回実行して数msかな」
「でもここ数回しか実行されないよ?」
291デフォルトの名無しさん
2023/08/12(土) 10:23:43.34ID:BDIecCFX 長々と空気読めないこと喋るやつおるよな
292デフォルトの名無しさん
2023/08/12(土) 10:28:09.42ID:w3tn+9YE >>289
if文を無くせる場合はどんな場合がある?
ifがあるなら無くせないんじゃないの?
その場合を見つけたとしてこのスレで発表する?
それともこのスレを出典にする?
このスレにリンクを貼らないとif文を使うと10倍遅くなることを証明できないから
if文を無くせる場合はどんな場合がある?
ifがあるなら無くせないんじゃないの?
その場合を見つけたとしてこのスレで発表する?
それともこのスレを出典にする?
このスレにリンクを貼らないとif文を使うと10倍遅くなることを証明できないから
293デフォルトの名無しさん
2023/08/12(土) 12:27:02.41ID:kvrjqk0I 常にこんな書き方をするべきとかではなくてスループットを上げたい場合に考えられる手段の一つ、くらいの話だと思うんだが顔真っ赤にして否定してる奴なんなの
294デフォルトの名無しさん
2023/08/12(土) 13:09:09.17ID:VjFL1AwM 処理系やプロセッサ依存のソースを書く時代は終わったんだよ顔真っ赤なおじいちゃん
何度も言われてるようにここじゃなくQiitaに記事書きなよw
何度も言われてるようにここじゃなくQiitaに記事書きなよw
295デフォルトの名無しさん
2023/08/12(土) 13:13:42.09ID:kvrjqk0I > 処理系やプロセッサ依存のソースを書く時代は終わったんだよ
組み込みとか念頭にない人は世の中が単純に見えて幸せそうですね。
組み込みとか念頭にない人は世の中が単純に見えて幸せそうですね。
296デフォルトの名無しさん
2023/08/12(土) 14:21:39.40ID:VjFL1AwM 組み込みの現場も知らない癖に何をイキッてるんだ無職くんはw
いいから記事を書きなよ
そしたらここで話題にしてもいいからさ
スレ違いってわかる?
いいから記事を書きなよ
そしたらここで話題にしてもいいからさ
スレ違いってわかる?
297デフォルトの名無しさん
2023/08/12(土) 16:29:25.06ID:QkMalqzA298デフォルトの名無しさん
2023/08/12(土) 16:53:18.46ID:wD60IGH3299デフォルトの名無しさん
2023/08/12(土) 16:55:33.58ID:dxjaE8PG プロセッサに依存していいならどう最適化されるか決まってないCよりアセンブラ使う方が確実だぞ
300デフォルトの名無しさん
2023/08/12(土) 17:42:26.72ID:LEE4+Uqf 終わった記事に関してウダウダと
そんなんだからいつまで経っても独り身なんだぞ
そんなんだからいつまで経っても独り身なんだぞ
301デフォルトの名無しさん
2023/08/12(土) 17:51:13.60ID:yNBhBfdR >>299
CMOV命令はintelにもamdにもあるから一般的な環境でプロセッサ依存ではないですよね
もしCMOVがない特殊な環境でも条件フラグをレジスタに入れる命令があればそれが使われて大丈夫ですね
gccとclangどちらでも速くなったようだからコンパイラ処理系依存のテクニックではなさそう
C言語だけでなくRustでも同じ生成コードとなったから言語に依存したテクニックでもなさそう
CMOV命令はintelにもamdにもあるから一般的な環境でプロセッサ依存ではないですよね
もしCMOVがない特殊な環境でも条件フラグをレジスタに入れる命令があればそれが使われて大丈夫ですね
gccとclangどちらでも速くなったようだからコンパイラ処理系依存のテクニックではなさそう
C言語だけでなくRustでも同じ生成コードとなったから言語に依存したテクニックでもなさそう
302デフォルトの名無しさん
2023/08/12(土) 18:39:13.58ID:mEHRZZZJ >>298
> if文を無くせる場合があるというのが253の記事
記事にあるif文を無くせる場合はこれ1つだけ
if (num==1) { num=0 } else { num=1 }
↓
num = !(bool)num
他の読者のために書いてあげる
機会が非常に少なくて残念!!
レスの後半部分は間違ってる
> if文を無くせる場合があるというのが253の記事
記事にあるif文を無くせる場合はこれ1つだけ
if (num==1) { num=0 } else { num=1 }
↓
num = !(bool)num
他の読者のために書いてあげる
機会が非常に少なくて残念!!
レスの後半部分は間違ってる
303デフォルトの名無しさん
2023/08/12(土) 18:45:47.87ID:mEHRZZZJ if文の高速化が検索したら
ifとswitchで迷ったらswitchを使う
IF K=6 THEN X=X+1→X=X-(K=6)
が出てきてif文の高速化は有名な話だったようだ
補足訂正
ifとswitchで迷ったらswitchを使う
IF K=6 THEN X=X+1→X=X-(K=6)
が出てきてif文の高速化は有名な話だったようだ
補足訂正
304デフォルトの名無しさん
2023/08/12(土) 19:08:27.81ID:dqIchbhY >>302
プログラムも読めないのか
そんなバカが必死に否定してたのか
記事以外にもこのスレで他のコード例やコンパイラによるその生成アセンブラも出ている
さらにベンチマーク比較で大きく速度向上まで結果が出ている
この状況で必死に否定し続けるのはみっともないぜ
プログラムも読めないのか
そんなバカが必死に否定してたのか
記事以外にもこのスレで他のコード例やコンパイラによるその生成アセンブラも出ている
さらにベンチマーク比較で大きく速度向上まで結果が出ている
この状況で必死に否定し続けるのはみっともないぜ
305デフォルトの名無しさん
2023/08/12(土) 22:28:25.82ID:TiqzNocE >>301
組み込みの意味がわからない人?w
組み込みの意味がわからない人?w
306デフォルトの名無しさん
2023/08/12(土) 23:03:51.71ID:dqIchbhY 記事読んでも組み込みなんて限定はないな
必死に否定してるバカが勝手に組み込みの話と思い込んでいるのか
必死に否定してるバカが勝手に組み込みの話と思い込んでいるのか
307デフォルトの名無しさん
2023/08/13(日) 00:15:07.75ID:NKbs7DmP なんでそんなに必死なのか知らんけどここまで言われても記事を書こうとしないのは自分が間違ってることを薄々でもわかってるんだろ?w
無理すんな無職
無理すんな無職
308デフォルトの名無しさん
2023/08/13(日) 01:15:32.46ID:qIH8AICq309デフォルトの名無しさん
2023/08/13(日) 10:23:41.63ID:427/I8XL > 記事を書こうとしないのは
日本の技術力の底上げのために
検索結果の健全化のために
クソ記事書くのはもうやめてクレメンス
お願いですから書くのやめてクレメンス
書かないことでみんなが助かる
書かないことでみんなが嬉しい
わかってクレメンス
クソ記事書いてはいけないと
正常な人間ははじめから知っているんです
日本の技術力の底上げのために
検索結果の健全化のために
クソ記事書くのはもうやめてクレメンス
お願いですから書くのやめてクレメンス
書かないことでみんなが助かる
書かないことでみんなが嬉しい
わかってクレメンス
クソ記事書いてはいけないと
正常な人間ははじめから知っているんです
310デフォルトの名無しさん
2023/08/13(日) 10:23:43.05ID:ea9tHaSQ 逃げたw
311デフォルトの名無しさん
2023/08/13(日) 12:06:02.55ID:mxfdwtiA クソ記事は批判して良いと思うが
クソ記事に対する批判がみんなのためになるのなら賛成
ただ暇でやってるだけならもうちょっと時間を有効に使えと言いたい
クソ記事に対する批判がみんなのためになるのなら賛成
ただ暇でやってるだけならもうちょっと時間を有効に使えと言いたい
312デフォルトの名無しさん
2023/08/13(日) 13:52:34.26ID:bmBefS74 if文をなくすのが高速化に繋がってると解釈してる人がいるようなので補足。
>>286の投稿でhogeの結果が極端に悪いのは条件分岐命令が生成されていることが原因だが条件分岐命令が生成されているのはif文を使用しているからではない。条件によってメモリへの書き込みが行われたり行われなかったりするロジックのためである。
試しにhoge()の実装を
void hoge(int n, int num[n], int deleteNum)
{
for (int i = 0; i < n; i++) {
int x = num[i];
if (x == deleteNum) { // deleteNumで指定した要素を0にする
x = 0;
}
num[i] = x;
}
}
内容が変わろうが変わるまいが常にメモリへの書き込みが行われるよう変更したらどうなるか。
>>286の投稿でhogeの結果が極端に悪いのは条件分岐命令が生成されていることが原因だが条件分岐命令が生成されているのはif文を使用しているからではない。条件によってメモリへの書き込みが行われたり行われなかったりするロジックのためである。
試しにhoge()の実装を
void hoge(int n, int num[n], int deleteNum)
{
for (int i = 0; i < n; i++) {
int x = num[i];
if (x == deleteNum) { // deleteNumで指定した要素を0にする
x = 0;
}
num[i] = x;
}
}
内容が変わろうが変わるまいが常にメモリへの書き込みが行われるよう変更したらどうなるか。
313デフォルトの名無しさん
2023/08/13(日) 13:57:12.40ID:bmBefS74 gcc 12.2.0に-O2を指定
hoge: 0.044001
piyo: 0.060001
hogera: 0.052001
https://wandbox.org/permlink/Na7RxYGEttdpuCnR
clang 15.0.7に-O2を指定
hoge: 0.032001
piyo: 0.032002
hogera: 0.031992
https://wandbox.org/permlink/1FZCQD2WsnbvifWw
hoge()の実行時間はpiyo()やhogera()と大差なくなる。
if文の使用がhoge()が遅かった原因ではない。
hoge: 0.044001
piyo: 0.060001
hogera: 0.052001
https://wandbox.org/permlink/Na7RxYGEttdpuCnR
clang 15.0.7に-O2を指定
hoge: 0.032001
piyo: 0.032002
hogera: 0.031992
https://wandbox.org/permlink/1FZCQD2WsnbvifWw
hoge()の実行時間はpiyo()やhogera()と大差なくなる。
if文の使用がhoge()が遅かった原因ではない。
314デフォルトの名無しさん
2023/08/13(日) 14:09:26.02ID:aL79QjVh Qiitaアカウント持ってないからここでウダウダコメントするしかない雑魚w
315デフォルトの名無しさん
2023/08/13(日) 14:28:13.37ID:xVDxBOfX316デフォルトの名無しさん
2023/08/13(日) 14:59:12.83ID:427/I8XL > Qiitaアカウント持ってない
つまりそれは
正常な思考力を持ってるってこと
つまりそれは
正常な思考力を持ってるってこと
317デフォルトの名無しさん
2023/08/13(日) 16:34:36.74ID:Z5uDnRRN Qiitaに日記を書くんじゃない
318デフォルトの名無しさん
2023/08/13(日) 16:43:33.83ID:Z5uDnRRN319デフォルトの名無しさん
2023/08/13(日) 16:56:52.28ID:427/I8XL > 不愉快
彼らに不愉快という概念はないぞ
クソを食い
クソを出し
周囲をクソまみれにしても
そのとき
むしろ笑顔だから
彼らに不愉快という概念はないぞ
クソを食い
クソを出し
周囲をクソまみれにしても
そのとき
むしろ笑顔だから
320デフォルトの名無しさん
2023/08/14(月) 05:02:03.98ID:flQ8vQku >>315
以前「キモッ」だけのコメントをQiitaでしたことあるが、運営から「削除しろ。しなければ垢バンまである」というメールがきたw
以前「キモッ」だけのコメントをQiitaでしたことあるが、運営から「削除しろ。しなければ垢バンまである」というメールがきたw
321デフォルトの名無しさん
2023/08/14(月) 10:45:24.67ID:5M9frLMH >>320
草
草
322デフォルトの名無しさん
2023/08/14(月) 10:59:15.20ID:K6AS1572 >>321
草で済まない
ここでも言うべきでない
開示請求して制裁するように日本社会が変化
法律上は不特定多数に言うのがアウト
ここの発言は必然的に不特定多数
どうしても言いたいなら少数の友人だけに言えばいい
草で済まない
ここでも言うべきでない
開示請求して制裁するように日本社会が変化
法律上は不特定多数に言うのがアウト
ここの発言は必然的に不特定多数
どうしても言いたいなら少数の友人だけに言えばいい
323デフォルトの名無しさん
2023/08/14(月) 11:55:14.49ID:ra8tFfd0324デフォルトの名無しさん
2023/08/14(月) 14:52:20.96ID:ZSYq0zux > 運営からメールが来るのは運営に不都合なことを書いた人だけだよ
運営に不都合関係なくユーザーからの報告がある程度以上あると運営からコメントを直せってメールくるよ。
若年者や女性が書いたという体(てい)の記事に絶賛のコメントが多数付いてるところに水差すようなコメント書いて運営からメール貰ったこと何回かあるわ。
運営に自分の投稿したコメントのどこが問題なのか尋ねても「多数の苦情が来てるのだからお前のコメントが悪い」と埒が明かぬ。運営が苦情の数を気にして機械的に対応してることは確かだと思われる。
運営に不都合関係なくユーザーからの報告がある程度以上あると運営からコメントを直せってメールくるよ。
若年者や女性が書いたという体(てい)の記事に絶賛のコメントが多数付いてるところに水差すようなコメント書いて運営からメール貰ったこと何回かあるわ。
運営に自分の投稿したコメントのどこが問題なのか尋ねても「多数の苦情が来てるのだからお前のコメントが悪い」と埒が明かぬ。運営が苦情の数を気にして機械的に対応してることは確かだと思われる。
325デフォルトの名無しさん
2023/08/15(火) 16:44:03.65ID:0AvN5XPe326デフォルトの名無しさん
2023/08/15(火) 17:06:16.32ID:TjAS9EkF327デフォルトの名無しさん
2023/08/15(火) 18:05:42.32ID:zL0242H+ 「なんで、for文ってforなの?」って、みんな思ったはず。
https://qiita.com/jin237/items/444688df1b6bfad3bd75
> 皆さまのありがたいお声の数々
> 叩かれ放題の記事となっております(笑)
> はてなブックマーク
> https://b.hatena.ne.jp/entry/s/qiita.com/jin237/items/444688df1b6bfad3bd75
> twitterでの記事の検索結果
> https://twitter.com/search?q=https%3A%2F%2Fqiita.com%2Fjin237%2Fitems%2F444688df1b6bfad3bd75
https://twitter.com/jin2372/status/1691061293107859457
> ・釣りタイトルにする。
> ・正解も不正解もある内容にする。
> ・叩き放題でマウント取れるものにする。
> ・文を下手にしてみる。
> ・タグの中で見られやすいものを選ぶ。
> ・別の場所にスレを作る。
> ・見られやすいトレンドにとりあえず載せる。
> 結果:プチ炎上できた。
https://twitter.com/5chan_nel (5ch newer account)
https://qiita.com/jin237/items/444688df1b6bfad3bd75
> 皆さまのありがたいお声の数々
> 叩かれ放題の記事となっております(笑)
> はてなブックマーク
> https://b.hatena.ne.jp/entry/s/qiita.com/jin237/items/444688df1b6bfad3bd75
> twitterでの記事の検索結果
> https://twitter.com/search?q=https%3A%2F%2Fqiita.com%2Fjin237%2Fitems%2F444688df1b6bfad3bd75
https://twitter.com/jin2372/status/1691061293107859457
> ・釣りタイトルにする。
> ・正解も不正解もある内容にする。
> ・叩き放題でマウント取れるものにする。
> ・文を下手にしてみる。
> ・タグの中で見られやすいものを選ぶ。
> ・別の場所にスレを作る。
> ・見られやすいトレンドにとりあえず載せる。
> 結果:プチ炎上できた。
https://twitter.com/5chan_nel (5ch newer account)
328デフォルトの名無しさん
2023/08/15(火) 18:38:37.81ID:ZksP2F0f 苦情の数の話はその人の体験談で話が具体的で信じられる
創作の可能性もあるがそこまで疑わないぞ
運営にメールで尋ねたなどの体験談はwelcomeで書いてほしい
welcomeなレスに騙されやすいなどとくだらない批判をいれるべきでない
何を言いたいかと言うと話の構造が根本的に違うだろと
創作の可能性もあるがそこまで疑わないぞ
運営にメールで尋ねたなどの体験談はwelcomeで書いてほしい
welcomeなレスに騙されやすいなどとくだらない批判をいれるべきでない
何を言いたいかと言うと話の構造が根本的に違うだろと
329デフォルトの名無しさん
2023/08/15(火) 18:46:26.63ID:ZksP2F0f330デフォルトの名無しさん
2023/08/15(火) 18:47:04.69ID:hWbexh2P331デフォルトの名無しさん
2023/08/15(火) 19:07:59.33ID:ZksP2F0f332デフォルトの名無しさん
2023/08/15(火) 19:09:41.51ID:ZzYADMsV と思いたいんだなw
だからやってみればわかると言ってるのにw
https://qiita.com/youwht
こいつが組織票でトレンドに載ってることをバラした記事があったのでこいつを通報したら逆にその記事が消えたのをどう説明するんだよw
だからやってみればわかると言ってるのにw
https://qiita.com/youwht
こいつが組織票でトレンドに載ってることをバラした記事があったのでこいつを通報したら逆にその記事が消えたのをどう説明するんだよw
333デフォルトの名無しさん
2023/08/15(火) 19:27:20.24ID:ZksP2F0f >>332
youwhtで前スレ1から3を検索したが1つもレスがない
話すまでもないというのがQiitaスレの共通認識
説明しようにも何を言ってるのかわからん
陰謀論って早く忘れたほうがいい
いつまでも引きずるのが精神衛生上良くない
起きたときにスレに投稿すべきだった
youwhtで前スレ1から3を検索したが1つもレスがない
話すまでもないというのがQiitaスレの共通認識
説明しようにも何を言ってるのかわからん
陰謀論って早く忘れたほうがいい
いつまでも引きずるのが精神衛生上良くない
起きたときにスレに投稿すべきだった
334デフォルトの名無しさん
2023/08/16(水) 08:17:39.47ID:L1EQEMLK >>333
他の記事やコメント含めてそれだけ徹底的に消されたってことだよw
一時期話題になってたから知ってるやつに聞けよ
こいつの組織票はえげつなかったぞ
なにせqiitaを読みもしないまるで関係ない職場の人間に大量にアカウント作らせて記事をアップすると同時にそいつらに一斉送信していいねさせてたことを自白してたからな
そのいいねの付き方があまりに不自然すぎることに気づいたやつが計測して記事にしたところ数日して削除されて今は痕跡も残ってない
こんな話はその辺にゴロゴロしてるが何せこんなふうに証拠隠滅してるからな
他の記事やコメント含めてそれだけ徹底的に消されたってことだよw
一時期話題になってたから知ってるやつに聞けよ
こいつの組織票はえげつなかったぞ
なにせqiitaを読みもしないまるで関係ない職場の人間に大量にアカウント作らせて記事をアップすると同時にそいつらに一斉送信していいねさせてたことを自白してたからな
そのいいねの付き方があまりに不自然すぎることに気づいたやつが計測して記事にしたところ数日して削除されて今は痕跡も残ってない
こんな話はその辺にゴロゴロしてるが何せこんなふうに証拠隠滅してるからな
335デフォルトの名無しさん
2023/08/16(水) 08:19:13.27ID:L1EQEMLK あとスレに関してはこのスレのできる前の出来事だから話題になってないのは当然だ
336デフォルトの名無しさん
2023/08/16(水) 08:26:56.16ID:L1EQEMLK https://www.google.com/search?q=youwht%20site%3Amegalodon.jp
魚拓にyouwhtが無いのも不思議だろ?
あれだけ人気記事書いて本も書いて人気ソフト作ってテレビにも出演してるのに一切アーカイブされてないんだぜ?
そんなことあり得ると思う?
答えは一つ
消したんだよ
魚拓にyouwhtが無いのも不思議だろ?
あれだけ人気記事書いて本も書いて人気ソフト作ってテレビにも出演してるのに一切アーカイブされてないんだぜ?
そんなことあり得ると思う?
答えは一つ
消したんだよ
337デフォルトの名無しさん
2023/08/16(水) 18:44:29.95ID:8EM0gubg > 魚拓にyouwhtが無いのも不思議だろ?
別に不思議はないなあ。
> あれだけ人気記事書いて本も書いて人気ソフト作ってテレビにも出演してるのに一切アーカイブされてないんだぜ?
> そんなことあり得ると思う?
魚拓取られるのってやらかした奴の証拠保全が目的だからなあ、人気記事たくさん書いてる人気者なら問題行動起こす可能性も低そうだし魚拓取られる機会もそうそうないんじゃないの。つか
> 答えは一つ
> 消したんだよ
妄想乙w
別に不思議はないなあ。
> あれだけ人気記事書いて本も書いて人気ソフト作ってテレビにも出演してるのに一切アーカイブされてないんだぜ?
> そんなことあり得ると思う?
魚拓取られるのってやらかした奴の証拠保全が目的だからなあ、人気記事たくさん書いてる人気者なら問題行動起こす可能性も低そうだし魚拓取られる機会もそうそうないんじゃないの。つか
> 答えは一つ
> 消したんだよ
妄想乙w
338デフォルトの名無しさん
2023/08/16(水) 18:55:47.22ID:8EM0gubg > こいつが組織票でトレンドに載ってることをバラした記事があったのでこいつを通報したら逆にその記事が消えたのをどう説明するんだよw
妄想記事が消された以外の解釈あるかな?
つかどこの誰が書いたか正しいかもわからん記事が「あった」というだけで通報って大分イカれてるぞ
妄想記事が消された以外の解釈あるかな?
つかどこの誰が書いたか正しいかもわからん記事が「あった」というだけで通報って大分イカれてるぞ
339デフォルトの名無しさん
2023/08/16(水) 18:56:47.72ID:cRvVyw2V そんなに発狂するなよw
正体がバレるぞw
正体がバレるぞw
340デフォルトの名無しさん
2023/08/16(水) 19:04:30.78ID:8EM0gubg > 正体がバレるぞw
妄想持ちならではのセリフw
妄想持ちならではのセリフw
341デフォルトの名無しさん
2023/08/17(木) 09:06:45.29ID:6LvfXp3I 妄想ブーメランで火消しに必死になってるのは本人なんだろうなあ
342デフォルトの名無しさん
2023/08/17(木) 09:27:37.89ID:vPTmktkt いつでも本人がいると思うのは都合が良すぎる
病気なんだろうなあ
精神病棟で隔離されてそう
病気なんだろうなあ
精神病棟で隔離されてそう
343デフォルトの名無しさん
2023/08/17(木) 09:30:01.29ID:vPTmktkt このスレ3人しかいない
344デフォルトの名無しさん
2023/08/17(木) 13:58:17.84ID:iq59CIRP まあこれだけ発狂してたらそりゃ本人かくらい言われるだろ
みんな知ってる事件なんだし
みんな知ってる事件なんだし
345デフォルトの名無しさん
2023/08/17(木) 13:59:32.09ID:iq59CIRP 精神病棟とか3人とか妄想がきっついな
こういうのって大概自分が言われなれてることを言うんだよな
こういうのって大概自分が言われなれてることを言うんだよな
346デフォルトの名無しさん
2023/08/18(金) 20:22:10.84ID:O8jCLexo カタカタ
|| ̄ Λ_Λ
||_(Д`; ) 「なに?このスレ・・・」
\⊂´ )
( ┳'
|| ̄ Λ_Λ
||_(Д`; ) 「なに?このスレ・・・」
\⊂´ )
( ┳'
347デフォルトの名無しさん
2023/08/19(土) 09:59:43.77ID:8IQY/lun qiitaのスレということがわかってないやつが病棟から常駐してるな
自説の主張を話題にしたいなら記事書けと何度も言われてるのに
自説の主張を話題にしたいなら記事書けと何度も言われてるのに
348デフォルトの名無しさん
2023/08/23(水) 21:43:18.69ID:xWiJzaGi ナイーブな再帰フィボナッチでマイクロベンチマーク
https://qiita.com/Nabetani/items/19ea2d3f8c18d862497f
> もともと
> https://qiita.com/fsdg-adachi_h/items/5feeda2ed19f879fdf9a
> という URL で公開されていた記事に
> > int の長さが処理系によって違うので公平じゃないかもしれません。
> > それと
> > > ネイティブコンパイルの優位性
> > とありますが、Go が Java に負けてますね。
> > int の長さの影響かもしれません。
> というコメントを書いたら、その記事は削除されて。
> 同じ方が、全く同じような内容で
> C++ はどれくらい速いのか?:フィボナッチ数列の演算で比較してみる - Qiita
> https://qiita.com/fsdg-adachi_h/items/c54135cf0a562019295c
> という記事を公開されて。
> なぜか私はコメントできない(ブロックされてるのかな)ようなので、コメントで書きたかった追加情報に関する記事を書こうと思った。
まとめると、
・コメントしたらブロックされた
・コメントされたことをなかったことにしたいのか元記事は削除、同じ内容で再投稿
で、
> C++ はどれくらい速いのか?:フィボナッチ数列の演算で比較してみる - Qiita
> https://qiita.com/fsdg-adachi_h/items/c54135cf0a562019295c
見に行ったらこっちも既に削除済みw 誰かコメントしたんだろうなw
新記事が↓らしい。
C++ はどれくらい速いのか?:フィボナッチ数列の演算で比較してみる
https://qiita.com/fsdg-adachi_h/items/74764a835be31c1e73c6
どうでもいい内容の記事だったけど、タイトルのC++はg++じゃね? 言語じゃなくて処理系の話してるよね? くらいは誰でも言いそうになると思う罠。
https://qiita.com/Nabetani/items/19ea2d3f8c18d862497f
> もともと
> https://qiita.com/fsdg-adachi_h/items/5feeda2ed19f879fdf9a
> という URL で公開されていた記事に
> > int の長さが処理系によって違うので公平じゃないかもしれません。
> > それと
> > > ネイティブコンパイルの優位性
> > とありますが、Go が Java に負けてますね。
> > int の長さの影響かもしれません。
> というコメントを書いたら、その記事は削除されて。
> 同じ方が、全く同じような内容で
> C++ はどれくらい速いのか?:フィボナッチ数列の演算で比較してみる - Qiita
> https://qiita.com/fsdg-adachi_h/items/c54135cf0a562019295c
> という記事を公開されて。
> なぜか私はコメントできない(ブロックされてるのかな)ようなので、コメントで書きたかった追加情報に関する記事を書こうと思った。
まとめると、
・コメントしたらブロックされた
・コメントされたことをなかったことにしたいのか元記事は削除、同じ内容で再投稿
で、
> C++ はどれくらい速いのか?:フィボナッチ数列の演算で比較してみる - Qiita
> https://qiita.com/fsdg-adachi_h/items/c54135cf0a562019295c
見に行ったらこっちも既に削除済みw 誰かコメントしたんだろうなw
新記事が↓らしい。
C++ はどれくらい速いのか?:フィボナッチ数列の演算で比較してみる
https://qiita.com/fsdg-adachi_h/items/74764a835be31c1e73c6
どうでもいい内容の記事だったけど、タイトルのC++はg++じゃね? 言語じゃなくて処理系の話してるよね? くらいは誰でも言いそうになると思う罠。
349デフォルトの名無しさん
2023/08/23(水) 23:22:56.21ID:vW0JBYYG >>348
その最後の記事
CとRustで速さ約2倍は明らかにおかしいので
手元で実行してみたらCとRustは同じ速さとなった
CとRustのこの種のベンチマークで2倍差となったのを見たことがない
少なくとも今回のような類いのコードならば同じ速さとなっている
今回よほど何か特殊な環境下で実行計測しているのか
あるいは記事が間違っているのか
その最後の記事
CとRustで速さ約2倍は明らかにおかしいので
手元で実行してみたらCとRustは同じ速さとなった
CとRustのこの種のベンチマークで2倍差となったのを見たことがない
少なくとも今回のような類いのコードならば同じ速さとなっている
今回よほど何か特殊な環境下で実行計測しているのか
あるいは記事が間違っているのか
350デフォルトの名無しさん
2023/08/23(水) 23:47:17.93ID:7ZcdnLBa 間違ってない
(非線形)再帰に関してはgcc/g++の最適化が進んでいる
(非線形)再帰に関してはgcc/g++の最適化が進んでいる
351デフォルトの名無しさん
2023/08/23(水) 23:50:22.47ID:7ZcdnLBa GOに関してもtinygoを使えばLLVMの速度がでると思われる
352デフォルトの名無しさん
2023/08/23(水) 23:59:13.29ID:KHKtVRzu 実名だけでなく会社名も晒してるけど問題ないのか?
誰もレビューしてないのかしら
誰もレビューしてないのかしら
353デフォルトの名無しさん
2023/08/23(水) 23:59:14.64ID:vW0JBYYG >>350
やってみた
その指摘は正しいようだ
ただしこちらも正しいという結果になった
速さの結果
Rust = C (gcc) > C (clang)
これによりRustがLLVMに渡す前にその最適化しているっぽいな
やってみた
その指摘は正しいようだ
ただしこちらも正しいという結果になった
速さの結果
Rust = C (gcc) > C (clang)
これによりRustがLLVMに渡す前にその最適化しているっぽいな
354デフォルトの名無しさん
2023/08/24(木) 00:23:12.72ID:3T5NvKnH >>353
Rust=C(gcc)は再現しない
gcc 13.2.0
rustc 1.71.1
gcc -o fibonacci_c fibonacci.c -O2
time ./fibonacci_c
Result: 701408733
Time: 0.00069 seconds <-- time関数が別物(1/1000)
real 0m0.774s <--コマンド実時間
clang -o fibonacci_clang fibonacci.c -O2
time ./fibonacci_clang
Result: 701408733
Time: 0.00157 seconds
real 0m1.592s
rustc -C opt-level=2 -o fibonacci_rs fibonacci.rs
time ./fibonacci_rs
Result: 701408733
Time: 1.55644 seconds
real 0m1.641s
Rust=C(gcc)は再現しない
gcc 13.2.0
rustc 1.71.1
gcc -o fibonacci_c fibonacci.c -O2
time ./fibonacci_c
Result: 701408733
Time: 0.00069 seconds <-- time関数が別物(1/1000)
real 0m0.774s <--コマンド実時間
clang -o fibonacci_clang fibonacci.c -O2
time ./fibonacci_clang
Result: 701408733
Time: 0.00157 seconds
real 0m1.592s
rustc -C opt-level=2 -o fibonacci_rs fibonacci.rs
time ./fibonacci_rs
Result: 701408733
Time: 1.55644 seconds
real 0m1.641s
355デフォルトの名無しさん
2023/08/24(木) 00:39:14.97ID:3T5NvKnH GOROOT=... tinygo build -opt=2 -o fibonacci_tinygo
time ./fibonacci_tinygo
Result: 701408733
Time: 1.55111 seconds
real 0m1.626s
LLVM(Clang/Rust/tinygo)=1.55s
GCC=0.7s
以上
time ./fibonacci_tinygo
Result: 701408733
Time: 1.55111 seconds
real 0m1.626s
LLVM(Clang/Rust/tinygo)=1.55s
GCC=0.7s
以上
356デフォルトの名無しさん
2023/08/24(木) 04:19:18.96ID:ejJL7Sq0357デフォルトの名無しさん
2023/08/24(木) 08:31:12.59ID:jcLl4hPI こちらでも Rust(rustc)=C(gcc)>>>C(clang) となった
gccとrustcが同じ最適化をしてると思われる
確認のためLLVM IRを吐くrustcとclangでどのようにコードが異なるか調べてみた
まずclangによるLLVM IR生成
$ clang -S -emit-llvm -O2 -o fibonacci_cl.ll fibonacci.c
そのうちfibonacci()関数部分を抜粋すると以下のコードとなった
; Function Attrs: nounwind readnone uwtable
define dso_local i32 @fibonacci(i32 %0) local_unnamed_addr #0 {
%2 = icmp ult i32 %0, 2
br i1 %2, label %9, label %3
3: ; preds = %1
%4 = add nsw i32 %0, -2
%5 = tail call i32 @fibonacci(i32 %4)
%6 = add nsw i32 %0, -1
%7 = tail call i32 @fibonacci(i32 %6)
%8 = add nsw i32 %7, %5
ret i32 %8
9: ; preds = %1
ret i32 %0
}
元のCコードそのままでnが2未満すなわち0と1の時はそのまま返して
それ以外は fibonacci(n-2) + fibonacci(n-1) を返している
最適化をしていないのでclangがgccよりも遅いのはこれで納得
gccとrustcが同じ最適化をしてると思われる
確認のためLLVM IRを吐くrustcとclangでどのようにコードが異なるか調べてみた
まずclangによるLLVM IR生成
$ clang -S -emit-llvm -O2 -o fibonacci_cl.ll fibonacci.c
そのうちfibonacci()関数部分を抜粋すると以下のコードとなった
; Function Attrs: nounwind readnone uwtable
define dso_local i32 @fibonacci(i32 %0) local_unnamed_addr #0 {
%2 = icmp ult i32 %0, 2
br i1 %2, label %9, label %3
3: ; preds = %1
%4 = add nsw i32 %0, -2
%5 = tail call i32 @fibonacci(i32 %4)
%6 = add nsw i32 %0, -1
%7 = tail call i32 @fibonacci(i32 %6)
%8 = add nsw i32 %7, %5
ret i32 %8
9: ; preds = %1
ret i32 %0
}
元のCコードそのままでnが2未満すなわち0と1の時はそのまま返して
それ以外は fibonacci(n-2) + fibonacci(n-1) を返している
最適化をしていないのでclangがgccよりも遅いのはこれで納得
358デフォルトの名無しさん
2023/08/24(木) 08:33:36.30ID:jcLl4hPI 次にrustcによるLLVM IR生成
$ rustc -C opt-level=2 --emit llvm-ir -o fibonacci_rs.ll fibonacci.rs
そのうちfibonacci()関数部分を抜粋すると以下のコードとなった
; fibonacci::fibonacci
; Function Attrs: nofree nosync nounwind nonlazybind memory(none) uwtable
define internal fastcc noundef i32 @_ZN9fibonacci9fibonacci17h1af4b62ef57b502cE(i32 noundef %n) unnamed_addr #4 {
start:
%switch1 = icmp ult i32 %n, 2
br i1 %switch1, label %bb8, label %bb5
bb5: ; preds = %start, %bb5
%n.tr3 = phi i32 [ %_7, %bb5 ], [ %n, %start ]
%accumulator.tr2 = phi i32 [ %0, %bb5 ], [ 0, %start ]
%_5 = add i32 %n.tr3, -2
; call fibonacci::fibonacci
%_4 = tail call fastcc noundef i32 @_ZN9fibonacci9fibonacci17h1af4b62ef57b502cE(i32 noundef %_5)
%_7 = add i32 %n.tr3, -1
%0 = add i32 %_4, %accumulator.tr2
%switch = icmp ult i32 %_7, 2
br i1 %switch, label %bb8, label %bb5
bb8: ; preds = %bb5, %start
%accumulator.tr.lcssa = phi i32 [ 0, %start ], [ %0, %bb5 ]
%n.tr.lcssa = phi i32 [ %n, %start ], [ 1, %bb5 ]
%accumulator.ret.tr = add i32 %n.tr.lcssa, %accumulator.tr.lcssa
ret i32 %accumulator.ret.tr
}
clangの場合>>357とは異なり「call」によるfibonacci()呼び出しが一つとなり最適化されている
$ rustc -C opt-level=2 --emit llvm-ir -o fibonacci_rs.ll fibonacci.rs
そのうちfibonacci()関数部分を抜粋すると以下のコードとなった
; fibonacci::fibonacci
; Function Attrs: nofree nosync nounwind nonlazybind memory(none) uwtable
define internal fastcc noundef i32 @_ZN9fibonacci9fibonacci17h1af4b62ef57b502cE(i32 noundef %n) unnamed_addr #4 {
start:
%switch1 = icmp ult i32 %n, 2
br i1 %switch1, label %bb8, label %bb5
bb5: ; preds = %start, %bb5
%n.tr3 = phi i32 [ %_7, %bb5 ], [ %n, %start ]
%accumulator.tr2 = phi i32 [ %0, %bb5 ], [ 0, %start ]
%_5 = add i32 %n.tr3, -2
; call fibonacci::fibonacci
%_4 = tail call fastcc noundef i32 @_ZN9fibonacci9fibonacci17h1af4b62ef57b502cE(i32 noundef %_5)
%_7 = add i32 %n.tr3, -1
%0 = add i32 %_4, %accumulator.tr2
%switch = icmp ult i32 %_7, 2
br i1 %switch, label %bb8, label %bb5
bb8: ; preds = %bb5, %start
%accumulator.tr.lcssa = phi i32 [ 0, %start ], [ %0, %bb5 ]
%n.tr.lcssa = phi i32 [ %n, %start ], [ 1, %bb5 ]
%accumulator.ret.tr = add i32 %n.tr.lcssa, %accumulator.tr.lcssa
ret i32 %accumulator.ret.tr
}
clangの場合>>357とは異なり「call」によるfibonacci()呼び出しが一つとなり最適化されている
359デフォルトの名無しさん
2023/08/24(木) 08:41:31.44ID:jcLl4hPI ちなみに>>358のRustコンパイラが吐いたLLVM IRのコードを
見やすくC言語に翻訳するとこういうコードになっている
(このコードはLLVM自体による最適化をする前であることに注意)
int fibonacci(int n) {
if (n < 2) {
return n;
}
int f = 0;
while (1) {
f += fibonacci(n - 2);
n = n - 1;
if (n < 2) {
return f + 1;
}
}
}
これはgccが吐いたアセンブラコードと同じ構造であり
rustcとgccは同様の最適化をしていることがわかる
したがって実測結果の Rust(rustc)=C(gcc)>>>C(clang) が生成コードによっても裏付けられた
結論「同様の最適化をしているRustとC(gcc)の両者が最も速い」
見やすくC言語に翻訳するとこういうコードになっている
(このコードはLLVM自体による最適化をする前であることに注意)
int fibonacci(int n) {
if (n < 2) {
return n;
}
int f = 0;
while (1) {
f += fibonacci(n - 2);
n = n - 1;
if (n < 2) {
return f + 1;
}
}
}
これはgccが吐いたアセンブラコードと同じ構造であり
rustcとgccは同様の最適化をしていることがわかる
したがって実測結果の Rust(rustc)=C(gcc)>>>C(clang) が生成コードによっても裏付けられた
結論「同様の最適化をしているRustとC(gcc)の両者が最も速い」
360デフォルトの名無しさん
2023/08/24(木) 13:00:39.60ID:LKMQI7nB で、それぞれの実行時間は?
うちでは clangもrustcも>>358相当の.llを吐くけど実行したらgccより激遅い
うちでは clangもrustcも>>358相当の.llを吐くけど実行したらgccより激遅い
361デフォルトの名無しさん
2023/08/24(木) 13:10:33.06ID:LKMQI7nB https://godbolt.org/z/96ePGvT76
これがgccより激遅い
これがgccより激遅い
362デフォルトの名無しさん
2023/08/24(木) 13:17:53.54ID:LKMQI7nB あぁ、この人か? スルーしよ
https://mevius.5ch.net/test/read.cgi/tech/1690610746/759
https://mevius.5ch.net/test/read.cgi/tech/1690610746/759
363デフォルトの名無しさん
2023/08/24(木) 22:58:58.23ID:4A/i1xa5 俺のところではこうなった
>>348の記事の再帰呼び出し2つのfibonacci.rsとfibonacci.c
$ rustc -C opt-level=2 -o fibonacci_rs fibonacci.rs ; ./fibonacci_rs
Time: 1.90858 seconds
$ gcc -o fibonacci_gcc fibonacci.c -O2 ; ./fibonacci_gcc
Time: 1.90691 seconds
$ clang -o fibonacci_clang fibonacci.c -O2; ./fibonacci_clang
Time: 3.16011 seconds
>>359の再帰呼び出し1つと片方ループ化のfibonacci_opt.rsとfibonacci_opt.c
$ rustc -C opt-level=2 -o fibonacci_opt_rs fibonacci_opt.rs ; ./fibonacci_opt_rs
Time: 1.94240 seconds
$ gcc -o fibonacci_opt_gcc fibonacci_opt.c -O2 ; ./fibonacci_opt_gcc
Time: 1.92169 seconds
$ clang -o fibonacci_opt_clang fibonacci_opt.c -O2 ; ./fibonacci_opt_clang
Time: 1.94741 seconds
ループ化した最適化コードをLLVMに渡さないclangだけが遅い
>>348の記事の再帰呼び出し2つのfibonacci.rsとfibonacci.c
$ rustc -C opt-level=2 -o fibonacci_rs fibonacci.rs ; ./fibonacci_rs
Time: 1.90858 seconds
$ gcc -o fibonacci_gcc fibonacci.c -O2 ; ./fibonacci_gcc
Time: 1.90691 seconds
$ clang -o fibonacci_clang fibonacci.c -O2; ./fibonacci_clang
Time: 3.16011 seconds
>>359の再帰呼び出し1つと片方ループ化のfibonacci_opt.rsとfibonacci_opt.c
$ rustc -C opt-level=2 -o fibonacci_opt_rs fibonacci_opt.rs ; ./fibonacci_opt_rs
Time: 1.94240 seconds
$ gcc -o fibonacci_opt_gcc fibonacci_opt.c -O2 ; ./fibonacci_opt_gcc
Time: 1.92169 seconds
$ clang -o fibonacci_opt_clang fibonacci_opt.c -O2 ; ./fibonacci_opt_clang
Time: 1.94741 seconds
ループ化した最適化コードをLLVMに渡さないclangだけが遅い
364デフォルトの名無しさん
2023/08/25(金) 06:29:41.57ID:VxJ2jdC3 >>363
バージョン上げて全部やり直しだ
バージョン上げて全部やり直しだ
365デフォルトの名無しさん
2023/08/25(金) 18:02:25.77ID:eC6oNaXJ なんかバブルソートで同じような記事最近見たぞ
node.jsはインタプリタじゃなくてjitだろと突っ込まれてたがこっちでもインタプリタになってんな
node.jsはインタプリタじゃなくてjitだろと突っ込まれてたがこっちでもインタプリタになってんな
366デフォルトの名無しさん
2023/08/25(金) 18:06:50.53ID:eC6oNaXJ367デフォルトの名無しさん
2023/08/25(金) 20:01:49.79ID:mcq6RCWT gcc のバージョン10以前か以降かで生成されるコードが全然違う。
https://godbolt.org/z/93sxnq9xP
gcc 9.3.0 -O2
https://wandbox.org/permlink/PWLc6EFfecavDZ0m
> Time: 1.58398 seconds
gcc 10.2.0 -O2
https://wandbox.org/permlink/9OYZBH14tYooZHF7
> Time: 0.89583 seconds
https://godbolt.org/z/93sxnq9xP
gcc 9.3.0 -O2
https://wandbox.org/permlink/PWLc6EFfecavDZ0m
> Time: 1.58398 seconds
gcc 10.2.0 -O2
https://wandbox.org/permlink/9OYZBH14tYooZHF7
> Time: 0.89583 seconds
368デフォルトの名無しさん
2023/08/26(土) 12:00:16.58ID:IgS9MY2X Nim 2.0.0 速すぎ
https://wandbox.org/permlink/WoYP0STRKxaRBGCY
>Time= 0.240s Result=701408733
>Time= 0.238s Result=701408733
>Time= 0.238s Result=701408733
>Time= 0.238s Result=701408733
>Time= 0.241s Result=701408733
https://wandbox.org/permlink/WoYP0STRKxaRBGCY
>Time= 0.240s Result=701408733
>Time= 0.238s Result=701408733
>Time= 0.238s Result=701408733
>Time= 0.238s Result=701408733
>Time= 0.241s Result=701408733
369デフォルトの名無しさん
2023/08/26(土) 12:08:31.17ID:IgS9MY2X nim.cfgファイルでwanboxのgcc 12.2.0を指定
gcc.path%="/opt/wandbox/gcc-12.2.0/bin"
gcc.path%="/opt/wandbox/gcc-12.2.0/bin"
370デフォルトの名無しさん
2023/08/26(土) 12:11:38.14ID:IgS9MY2X ローカルマシンではもっと速い
$ ./fibonacci_nim_gcc 44
Time= 0.182s Result=701408733
Time= 0.186s Result=701408733
Time= 0.188s Result=701408733
Time= 0.184s Result=701408733
Time= 0.184s Result=701408733
$ ./fibonacci_nim_gcc 44
Time= 0.182s Result=701408733
Time= 0.186s Result=701408733
Time= 0.188s Result=701408733
Time= 0.184s Result=701408733
Time= 0.184s Result=701408733
371デフォルトの名無しさん
2023/08/26(土) 12:19:34.15ID:IgS9MY2X --cc:clangだとLLVM速度(ローカルマシン)
$ ./fibonacci_nim_clang 44
Time= 1.620s Result=701408733
Time= 1.628s Result=701408733
Time= 1.630s Result=701408733
Time= 1.674s Result=701408733
Time= 1.647s Result=701408733
Nimのトランスパイルとgccの最適化が相性が良いのかな
$ ./fibonacci_nim_clang 44
Time= 1.620s Result=701408733
Time= 1.628s Result=701408733
Time= 1.630s Result=701408733
Time= 1.674s Result=701408733
Time= 1.647s Result=701408733
Nimのトランスパイルとgccの最適化が相性が良いのかな
372デフォルトの名無しさん
2023/08/26(土) 18:41:17.51ID:COx+K1vh C(gcc)よりNimが3倍も速いのか
計測方法に問題があるんしゃないか?
計測方法に問題があるんしゃないか?
373デフォルトの名無しさん
2023/08/26(土) 21:58:15.99ID:6K2VICrE 室温超伝導サ〇wって言われない様に真っ先にwandboxに提出したんだわ
あとclangでもNimが多少速かった(朝方とはLTOの有無が違う)
Nim 2.0.0 + clang 16.0.5
$ nim c --cc:clang --verbosity:0 -d:release -d:danger -o:fibonacci_nim_clang -u:lto fibonacci.nim
$ time ./fibonacci_nim_clang 44
Time= 1.43200s Result=701408733
Time= 1.42200s Result=701408733
Time= 1.44100s Result=701408733
Time= 1.43800s Result=701408733
Time= 1.43900s Result=701408733
real 0m7.250s
Nim 2.0.0 + clang 15.0.7
https://wandbox.org/permlink/quetpnT592ONdM2x
>Time= 1.48272s Result=701408733
生clang 15.0.7
https://wandbox.org/permlink/U97PecZYrzymnfH4
>Time=1.58712s Result=701408733
生clang 16.0.1はstack frame limitエラー?
https://wandbox.org/permlink/TXPiXPLUJ8WX3kTK
生clang HEAD(18.0.0)
https://wandbox.org/permlink/caGw8uqCS8tW0fnt
>Time=1.57598s Result=701408733
あとclangでもNimが多少速かった(朝方とはLTOの有無が違う)
Nim 2.0.0 + clang 16.0.5
$ nim c --cc:clang --verbosity:0 -d:release -d:danger -o:fibonacci_nim_clang -u:lto fibonacci.nim
$ time ./fibonacci_nim_clang 44
Time= 1.43200s Result=701408733
Time= 1.42200s Result=701408733
Time= 1.44100s Result=701408733
Time= 1.43800s Result=701408733
Time= 1.43900s Result=701408733
real 0m7.250s
Nim 2.0.0 + clang 15.0.7
https://wandbox.org/permlink/quetpnT592ONdM2x
>Time= 1.48272s Result=701408733
生clang 15.0.7
https://wandbox.org/permlink/U97PecZYrzymnfH4
>Time=1.58712s Result=701408733
生clang 16.0.1はstack frame limitエラー?
https://wandbox.org/permlink/TXPiXPLUJ8WX3kTK
生clang HEAD(18.0.0)
https://wandbox.org/permlink/caGw8uqCS8tW0fnt
>Time=1.57598s Result=701408733
374デフォルトの名無しさん
2023/08/26(土) 22:00:21.79ID:6K2VICrE こっちもtimeコマンド付きで
Nim 2.0.0 + gcc 13.2.0
$ nim c --cc:gcc --verbosity:0 -d:release -d:danger -o:fibonacci_nim_gcc -u:lto fibonacci.nim
$ time ./fibonacci_nim_gcc 44
Time= 0.18500s Result=701408733
Time= 0.19200s Result=701408733
Time= 0.18400s Result=701408733
Time= 0.18400s Result=701408733
Time= 0.18600s Result=701408733
real 0m1.005s
これこそQiitaの面々に検証してもらいたい
Nim 2.0.0 + gcc 13.2.0
$ nim c --cc:gcc --verbosity:0 -d:release -d:danger -o:fibonacci_nim_gcc -u:lto fibonacci.nim
$ time ./fibonacci_nim_gcc 44
Time= 0.18500s Result=701408733
Time= 0.19200s Result=701408733
Time= 0.18400s Result=701408733
Time= 0.18400s Result=701408733
Time= 0.18600s Result=701408733
real 0m1.005s
これこそQiitaの面々に検証してもらいたい
375デフォルトの名無しさん
2023/08/26(土) 22:10:21.63ID:6K2VICrE ループ1回にして試したらスタートアップタイムが多少大きめ(~70ms)なのが見えるけど
fibonacci関数自体は複数ループ版と整合的で、同一引数複数ループ版で何か省略している訳でもなさそう
$ time ./fibonacci_nim_gcc 44
Time= 0.18100s Result=701408733
real 0m0.252s
$ time ./fibonacci_nim_clang 44
Time= 1.43300s Result=701408733
real 0m1.505s
fibonacci関数自体は複数ループ版と整合的で、同一引数複数ループ版で何か省略している訳でもなさそう
$ time ./fibonacci_nim_gcc 44
Time= 0.18100s Result=701408733
real 0m0.252s
$ time ./fibonacci_nim_clang 44
Time= 1.43300s Result=701408733
real 0m1.505s
376デフォルトの名無しさん
2023/08/26(土) 22:12:34.92ID:Q2zunHjq クソ課題にクソ計測方法をまだやっているのか
NimがCより何倍も速くなったのもクソなせいだと気付かないのは愚なことだ
この課題でこの継続方法なら極論すれば0秒にできる
例えばC++ならば
constexpr int TERM = 44;
constexpr int fibonacci(int n) {
if (n == 0 || n == 1) {
return n;
} else {
return fibonacci(n - 2) + fibonacci(n - 1);
}
}
結果
Result: 701408733
Time: 0.00000 seconds
もちろん言語によって最適化や事前計算の仕様は異なる
C++はconstexpr指定が必要だが指定不要な言語もあるだろう
NimがCより何倍も速くなったのもクソなせいだと気付かないのは愚なことだ
この課題でこの継続方法なら極論すれば0秒にできる
例えばC++ならば
constexpr int TERM = 44;
constexpr int fibonacci(int n) {
if (n == 0 || n == 1) {
return n;
} else {
return fibonacci(n - 2) + fibonacci(n - 1);
}
}
結果
Result: 701408733
Time: 0.00000 seconds
もちろん言語によって最適化や事前計算の仕様は異なる
C++はconstexpr指定が必要だが指定不要な言語もあるだろう
377デフォルトの名無しさん
2023/08/26(土) 22:15:58.64ID:6K2VICrE 44は定数にせずにコマンドライン引数にしのよ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★3 [ぐれ★]
- パラドゲーやってる人に聞きたい総理の発言がそのまま国家意思になるって中世かよ [279479878]
- 米シンクタンク「アメリカは台湾問題で"あいまい戦略"を取っている。高市早苗はこの方針から逸脱している」 [603416639]
- 【高市早苗】バス会社、中国からのキャンセルで12月で2000万円~3000万円の損失へ [115996789]
- かしこいワンコっていうVtuberの子知ってる?
- 【速報】Gemini 3 正式リリース。世界最強 LLMs の座は再び Google へ [803137891]
- 岡田克也「軽々しく存立危機事態とか言うべきじゃない」高市早苗「台湾で武力攻撃が発生したらどう考えても日本の存立危機事態」 [931948549]
