Qiita 3 - キータぞ、 ..
188:デフォルトの名無しさん
23/07/13 04:12:18.63 CZaZatOK.net
意味不明
189:デフォルトの名無しさん
23/07/14 16:09:54.65 4ovVI8a0.net
chmateでテスト
190:デフォルトの名無しさん
23/07/15 11:01:20.20 cu5aVWd1.net
RISC-Vベクタ拡張を用いたCORDICアルゴリズムによる三角関数の実装
URLリンク(qiita.com)
glibc等で提供される三角関数と性能比較してないの意味わからんw
手段が目的になってるよなあ。
> 提案手法の定数項が想定よりかなり大きいのは,最適化オプションを
> 指定していないためです.最適化オプションを指定しなかった理由は,
> 現状の実装では最適化オプションを指定すると不具合を生じるためです.
> この原因は,アセンブリコードの生成にGCCのインラインアセンブラ
> 機能を使用したのですが,おそらく申告すべき使用レジスタの指定を
> 誤っているためではないかと考えられます.
無能っぽくて草w
191:デフォルトの名無しさん
23/07/15 12:56:57.26 ftXHcWzt.net
>>187
意味わからんといって性能比較を押し付けるな
やりたいなら自分でやればいいんじゃない?
タイトルからして意味わからん
意味わからん記事を読むべきでない
頭が混乱して性能比較を押し付け誹謗中傷もしてしまっている
192:デフォルトの名無しさん
23/07/15 13:42:45.20 cu5aVWd1.net
>>188
> 性能比較を押し付けるな
記事書いた当人が性能比較してるけど何言ってんの??
> ベクトルサイズと実行命令数の相関関係と相関係数は次のようになりました.
> * 提案手法(固定小数点数表記のRVVハンドコーディング実装): 36.932n + 406.53, 0.9611
> * 固定小数点数表記のC実装,GCC 12.2 (`-O2`): 349.35n + 31.996, 1
> * 固定小数点数表記のC実装,Clang 16.3.2 (Auto-vectorization): 175.16n + 52.681, 0.9887
193:デフォルトの名無しさん
23/07/15 14:02:39.96 ftXHcWzt.net
>>189
glibc等で提供される三角関数と性能比較してないの意味わからんw
↓
glibc等で提供される三角関数と性能比較するなら意味わかる
↓
glibc等で提供される三角関数と性能比較しろ
↓
性能比較を押し付けてる
と思ったんだが何が違うんだい?
194:デフォルトの名無しさん
23/07/15 14:16:46.67 cu5aVWd1.net
>>190
・CORDICによる三角関数の性能比較は記事書いた当人が行っており性能比較は>>187が言い出したことではない
・CORDICは手段であり目的ではない筈
以上2点ご確認ください。
195:デフォルトの名無しさん
23/07/15 14:44:06.82 cu5aVWd1.net
> タイトルからして意味わからん
> 意味わからん記事を読むべきでない
> 頭が混乱して性能比較を押し付け誹謗中傷もしてしまっている
自他の区別がつかない人かな
196:デフォルトの名無しさん
23/07/16 14:44:35.54 XISJjZ62.net
URLリンク(qiita.com)
全員福岡Elixirコミュだけど記事の内容読んで理解していいねつけてる気がしない
197:デフォルトの名無しさん
23/07/16 16:31:39.57 xE1/bf3K.net
Facebookでも上司の意味わからん投稿にいいねつけるだろ
それと一緒
198:デフォルトの名無しさん
23/07/16 18:25:53.17 KYJNnrdW.net
これだけ短期間に複数の改善提案される程度の記事にいいねつけなきゃならん部下も大変だなw >福岡Elixirコミュ
つか情報処理学会で発表ってマジか。マサカリハンパじゃないと思うが。
199:デフォルトの名無しさん
23/07/17 03:08:55.58 rXtg1WuQ.net
>>194
いや、組織でいいねを付けるのはQiitaのどの記事でも一緒
200:デフォルトの名無しさん
23/07/17 05:00:22.37 78hBZFZV.net
実際は経営企画なのに、ショッピングセンター勤務者という記事
201:エ高速の肉まんbunがnodeの5倍denoの2倍早いらしいんだがマジか
202:デフォルトの名無しさん
23/07/17 08:54:04.75 hEn8qU6L.net
>>197
「ノーコード」だってさ
203:デフォルトの名無しさん
23/07/17 21:03:43.84 8bW5lzxO.net
h URLリンク(qiita.com)
> なお、当方はRISC-Vの知識は持ち合わせておらず動作環境も手近にないのでこのコメント冒頭で言っているa5が使用されたコードが正しくないかは確認しておりません。
> 同様に、このコメントでの修正内容が正しいかは不明なので参考にされる方はご慎重に願います。
予防線張るのダッセエ
204:デフォルトの名無しさん
23/07/17 21:25:24.50 QgZem17P.net
知識ないのに突っかかるって凄いなw
働いたことないんだろうか
205:デフォルトの名無しさん
23/07/18 00:14:30.93 Mksqy4Tz.net
准教授
RISC-Vベクタ拡張を用いたCORDICアルゴリズムによる三角関数の実装
URLリンク(qiita.com)
> 提案手法の定数項が想定よりかなり大きいのは,最適化オプションを指定していないためです.
> 最適化オプションを指定しなかった理由は,現状の実装では最適化オプションを指定すると
> 不具合を生じるためです.この原因は,アセンブリコードの生成にGCCのインラインアセン
> ブラ機能を使用したのですが,おそらく申告すべき使用レジスタの指定を誤っているためでは
> ないかと考えられます.
に直球のツッコミ入ったわけだけどどうすんのかな?
学生さんに教える立場であれば自分の考えに固執するんじゃなくて何が正しい正しくないで語ってほしいところではあるかな
206:デフォルトの名無しさん
23/07/18 01:07:09.70 lNNKmJNL.net
というかこのレベルで科研費貰えるんだね
207:デフォルトの名無しさん
23/07/18 19:51:13.13 ddyb++Ww.net
> 本研究はJSPS科研費 22K04657の助成を受けたものである.
これかな
MPSoCとSAR衛星によるリアルタイム土砂災害情報提供システムの実現可能性検証
URLリンク(kaken.nii.ac.jp)
URLリンク(researchmap.jp)
208:デフォルトの名無しさん
23/07/18 23:22:11.86 ddyb++Ww.net
URLリンク(qiita.com)
> 要素数を左2ビットシフトしてアドレスレジスタに加算されてますが3ビットシフトして8倍にするのが適当なのではないかと思うのですが
指摘がその通りだとすると動作確認しないで記事書いてた可能性も出てくるのかな
URLリンク(qiita.com)
> "vsetvli t0, t1, e64, m8\n\t"
> "slli t0, t0, 2\n\t"
> "add %[v], %[v], t0\n\t"
でも同じことしてるみたいだけど准教授ダンマリになっちゃったけど折角記事読んでいいねつけてくれた福岡Elixirコミュのみんなのためにも責任もって回答して欲しいよね
209:デフォルトの名無しさん
23/07/19 23:06:58.07 55fzqRuF.net
SAR衛星によるリアルタイム土砂災害情報提供システムの実現に向けた衛星画像の分散並列処理の実現
URLリンク(researchmap.jp)
ダウンロードして読んだけどPythonより遅いElixirって意味あんのかよw
やっぱこの人手段が目的化してるわ。
210:デフォルトの名無しさん
23/07/19 23:34:30.52 kNuJR26J.net
>>205
URLリンク(elixir-fest.jp)
2019年に任天堂がElixir使ってzacky1972の名前もある
任天堂がつかってるからスポンサーがいる
211:デフォルトの名無しさん
23/07/20 00:35:39.00 UoPVdDeD.net
任天堂が何らかの用途にElixirを使っている(いた)というのと、
准教授が画像処理にElixir選んでクソ遅いPythonより性能出せなかったというのは
実は大して関係がある話ではない。
212:デフォルトの名無しさん
23/07/20 22:01:20.27 0SE6zv+i.net
CORDICアルゴリズムに必要なarctan(2^{-i})のテーブルを整数演算で作成する
URLリンク(qiita.com)
Elixirで?こういうことやる意味がわからんのだけど
URLリンク(qiita.com)
への対抗心かな?ひとっことも触れてはいないけども。
次に平方根の記事投稿したらオモロいのにw
213:デフォルトの名無しさん
23/07/22 22:44:05.02 2jjNAwT1.net
今ほぼコードレビュー専になってる私が、リーダブルなコードを書くうえで意識してほしいと考えている順番
URLリンク(qiita.com)
沢山いいねついてる記事だけど
> public function changeHeightByAbsoluteMeter($value) {
> $this->height = $value;
> }
AbsoluteMeterや$valueに誰も疑問持たないのかな。
214:デフォルトの名無しさん
23/07/23 04:34:12.13 cMMY3e8H.net
絶対値で高さを変えるか相対値で高さを変えるかで意味ある
valueは「日本人は何故英語が出来ないのか」に誰も疑問持たないのと同じ
215:デフォルトの名無しさん
23/07/23 13:06:54.90 2fSUkmWu.net
valueになってる理由は記事にもちゃんと書いてるだろうが
> 引数を丁寧に命名するなら $absoluteValue になるが、スコープの短さを考えると省略しても自然
216:デフォルトの名無しさん
23/07/23 13:14:12.17 UQ8GpMFP.net
>>211
リーダブルコード「汎用的な名前を避ける」は?
valueやarg、fooなどの空虚な名前はできるだけさけるべきである
217:デフォルトの名無しさん
23/07/23 13:48:36.00 2fSUkmWu.net
>>212
いや、俺に聞くなよ
俺が記事書いてるわけじゃないんだから
記事主としてはリーダブルコードの「無駄な単語は捨てる」を実践してるんだろう
今回のケースが適切かどうか知らんけど
218:デフォルトの名無しさん
23/07/23 14:06:16.50 UQ8GpMFP.net
>>213
記事の読み方の違いだが記事の
> 「変に削るより、長くてもいいから正確な命名を」という言説をしばしば見るように感じますし、私も同意
は「無駄な単語は捨てる」の逆だと思った
リーダブルコードは短いほうがいいで記事は長くてもいい
日本人は英語ができないから正確に削れないということだろう
219:デフォルトの名無しさん
23/07/23 16:57:38.73 Ljmpzq1Q.net
>>210
> 絶対値で高さを変えるか相対値で高さを変えるかで意味ある
change〜 なんてアホなメソッド名やめて set〜 や add〜 とかにすればおk
220:デフォルトの名無しさん
23/07/23 20:38:42.33 KrEjITHo.net
> 今ほぼコードレビュー専になってる私が、リーダブルなコードを書くうえで意識してほしいと考えている順番
ハンパな知識のオッサンが若い人のコードに思いつきでダメ出ししてる光景が目に浮かぶんだけど。
221:デフォルトの名無しさん
23/07/23 21:02:45.58 lN+Odn9h.net
今回のは結論ありきのお題だから突っ込むのは野暮かもしれんが
>>215に完全同意。この場合get/setのほうが百倍マシ。
メソッド名がシンプルで、メソッドの内容がシンプルで、メソッド間の直行性が高い。
$myCar->changeHeightByRelativeMeter(1); ←きがくるっとる
$myCar->changeHeightByRelativeMeter(0.2); ←きがくるっとる
$myCar->setHeight(1); ←きがくるってない
$myCar->setHeight($myCar->getHeight() + 0.2) ←きがくるってない
説明的な変数名、メソッド名をつけなきゃいけないのは
散らかったウンコを片付けずに消臭剤いっぱい振りかけるのと同じ
222:デフォルトの名無しさん
23/07/23 21:41:55.47 x6Y2rIay.net
確かにsetHeight, addHeightのほうがいいな
223:デフォルトの名無しさん
23/07/23 22:22:44.58 2fSUkmWu.net
>>215
絶対値相対値とか言われてもピンとこないよね普通は
224:デフォルトの名無しさん
23/07/24 13:45:58.84 6+/dyhSU.net
そもそも高さって何なん?
車高のこと?
なんで車高を変えんの?
225:デフォルトの名無しさん
23/07/24 15:07:41.98 4CElhr6b.net
シャコタンは文化だから理解しない人もいるかもね
226:デフォルトの名無しさん
23/07/24 15:39:05.61 6QZoLF36.net
ま、ユーザーがロードカーの車高を下げても良いことは何もないんだけどね
カッコいいと感じる感性の持ち主の部族のことは知らん
227:デフォルトの名無しさん
23/07/24 21:51:54.02 ntDhAqp5.net
2つの封筒問題(封筒のパラドックス)
URLリンク(qiita.com)
数学っぽいこと書いてる雰囲気なデタラメ記事。
> ※ 本記事へのコメントはしないでください。コメントがあった場合、すべて削除依頼します。
書いた本人にも自覚はあるんだろうな。
228:デフォルトの名無しさん
23/07/25 05:43:25.14 09XXQ3/E.net
>>223
2つの封筒問題(金額仮定版)の答えが「分からない」が真だとして、
なんで2つの封筒問題(未開封版)の答えが「変わらない」なのかが分からない。
金額仮定版は2つの事象が1/2で発生するか分からないから、という説明なのに対し
未開封版は2つの事象が1/2で発生することを前提にしているの?
229:デフォルトの名無しさん
23/07/25 06:41:00.76 /3oiUHuE.net
数学っぽいとかなんで2つの封筒問題(未開封版)の答えが「変わらない」なのかが分からないとか
記事を開く気がしない
230:デフォルトの名無しさん
23/07/25 06:42:02.53 /3oiUHuE.net
なんで人はわからないものや数学っぽいものに惹かれるのか
231:デフォルトの名無しさん
23/07/26 20:16:12.52 wSHYoxMZ.net
わからないものはわからない
232:デフォルトの名無しさん
23/07/26 21:41:05.02 1fb/10Y2.net
【検証してみた】株式会社ゆめみは、Organization対抗戦で不正をしているのか?
URLリンク(qiita.com)
組織票は現状ルール違反ではないことを前提として書いてるんだろうけど
トレンドが全く役に立たなくなったし迷惑行為であることは認識して欲しいもんだわ。
233:デフォルトの名無しさん
23/07/26 21:47:14.30 lkScsrJu.net
いやいやそもそも御本尊のキー太がね
検索結果のど真ん中に野糞置く教えだから
234:デフォルトの名無しさん
23/07/26 21:47:30.02 jPIzcFjy.net
詳しく読んでないけど、ベイズ推定にそんな説明あったね
235:デフォルトの名無しさん
23/07/27 09:48:07.83 B9bn33s7.net
>>223
無茶苦茶だな
これ本気で書いてんのか?
236:デフォルトの名無しさん
23/07/27 09:51:23.51 B9bn33s7.net
>>228
オーガニゼーション組織票問題はユーザーからは前から言われてることだけど運営は全く問題にしてないしむしろ推奨してるからな
トレンドが糞記事ばかりになるのは当然
237:デフォルトの名無しさん
23/07/27 11:58:29.93 FdKMOCta.net
QiitaはSEOに強かったからネットユーザーに認知されて参加するも
いいねが付かないことに悩み
オーガニゼーション(組織票)の存在に気づくのは1年以上後だろう
気づいたら参加モチベーションが下がる
不公平だからな
ほとんどのネットユーザーに認知され新規参加者がいなくなり組織に属さない人のモチベーションが下がったままで
全く上げようとしないのは問題かな
今後も組織参加者を増やすのかな
238:デフォルトの名無しさん
23/07/27 12:25:26.22 ORsGKxw3.net
スクール系組織票も野放し?
239:デフォルトの名無しさん
23/07/27 17:43:34.41 +lXodmcm.net
ゆめみでゴミ記事書くやつは、片っ端からミュートしてるわ
240:デフォルトの名無しさん
23/07/28 10:49:42.57 Zgvcm9f5.net
>>233
advent calendar ってなんなん?
241:デフォルトの名無しさん
23/07/28 12:20:44.76 9v9DJg3O.net
>>205
今読んだけどこれほんま草
242:デフォルトの名無しさん
23/08/03 08:01:34.37 tyCIsm4X.net
な
243:デフォルトの名無しさん
23/08/03 19:59:51.90 JeF/zddW.net
CとC++って低水準言語なの?
URLリンク(qiita.com)
244:170e31a8c075 Cは低水準言語であるという与太話を広めたい人の記事。 自分はそうは思わないと断りを入れつつ自説に都合の良い記事探してきて 主張するモチベーションはどこから来るのだろう?
245:デフォルトの名無しさん
23/08/03 20:28:59.91 8npqW66R.net
インラインアセンブラが可能なC/C++/Rustは低水準記述が可能な言語
246:デフォルトの名無しさん
23/08/03 21:01:12.75 MT8wuS4o.net
>>239
「犬が人を噛んでもニュースにならないが、人が犬を噛んだらニュースになる」が基本
Cは低水準言語でないという論文なら論文にならないが、Cは低水準言語であるという論文なら論文になる
Cは低水準言語でないというだけなら主張するモチベーションが起きないが、Cは低水準言語であるというなら主張するモチベーションが起きる
247:デフォルトの名無しさん
23/08/04 00:34:27.45 AtJZBxCM.net
んちゃ
248:デフォルトの名無しさん
23/08/04 09:05:52.31 XLfSEGlw.net
そもそも低水準は誤訳
低レイヤと考える方がしっくりくる
249:デフォルトの名無しさん
23/08/04 21:08:44.67 zB3gh1Xb.net
>>239
消えてるが
250:デフォルトの名無しさん
23/08/04 22:33:31.82 kIOCwZVw.net
URLリンク(megalodon.jp)
> 私としてはこのムーブメントが拡大されCが段々と当たり前のように低水準として
> 扱われていることついて例をいくつか紹介し将来的にどうなるのかを含め議論を
> したいと思って投稿したつもりでCが低水準か高水準についてしっかりと議論
> したかったわけではないのですが、このような投稿は初めてでしたので、うまく
> 伝えることができなかったのだと反省しております。
> 私の投稿に対しての誤解を閲覧者が生んでしまうのは申し訳ないのですが、急に
> 投稿を削除してしまうのもこれまでコメントされた方に失礼だと思いますので、
> しばらく時間をおいてから本日中に投稿は削除させていただきます。
うまく伝わらなかったのなら議論重ねりゃいいだけだし削除する言い訳にもなってない罠。
要は旗色悪いから逃げたんだろう。
251:デフォルトの名無しさん
23/08/04 22:34:10.96 vnzxSr9F.net
消えてるからなんだよ
webアーカイブでも探せばいいだろ
252:デフォルトの名無しさん
23/08/04 22:38:44.38 kIOCwZVw.net
しっかしコメントしてきた相手に対して長いコメント返してるなあ、例外なく。
負けん気の強さは人一倍だが本人の知識や能力が追い付いてない感じw
253:デフォルトの名無しさん
23/08/05 07:04:06.19 GPQId3vN.net
このスレに貼り付けた人もそうだが削除させる意図があるように見える
削除させなくてもいいんじゃない?
もしかしたら削除させる意図がないと言うかもしれないが
もしそうなら言い方を気をつけるべきだね
削除させる意図があるように見えるから
254:デフォルトの名無しさん
23/08/05 07:26:06.29 MfBtPlYk.net
>>248
「削除させる意図があるように見える」のはどの書き込みで
「削除させる意図があるように見える」ことがなくなるようにするには
その書き込みをどのように変えればいいと言うんだろ
255:デフォルトの名無しさん
23/08/05 07:26:57.96 nczC8/3G.net
>>246
Zuishinいいこと言うなー
256:デフォルトの名無しさん
23/08/07 01:22:53.86 6mWrUWyE6
女性ガ‐た゛のLGВтカ゛─た゛の障害者カ゛ーだの氣持ち悪いが、海に囲まれた日本て゛高い所と騒音か゛大好きなバ力か゛日本中クソ航空機飛は゛し
まくって騷音に温室効果カ゛スにコ囗ナにとまき散らして,気候変動させて海水温上昇させてかつてない量の水蒸氣を曰本列島に供給させて
曰本中で土砂崩れに洪水,暴風.猛暑.大雪,森林火災にと災害連発させて住民の人生を破壊どころか殺害しまくって静音か゛生命線の
知的産業に威カ業務妨害して他人の権利を強奪して私腹を肥やす強盗殺人を繰り返して.石油需給逼迫させて工ネ価格に物価にと高騰させて
經済も私権も人権もないデジタ儿後進國のポンコツ腐敗国家に陥れてる皆殺しにされるへ゛きJALた゛のАNAだのクソアヰ又ドゥた゛の
クサヰマークだのゴキフ゛リフラヰヤ―た゛のシ゛ェットクサ―だのJtBだのテ□リス├と天下り賄賂癒着してる世界最悪の殺人組織公明党
國土破壞省による史上最惡のシ゛ェノサイドをス儿─しなか゛らその正義もクソもない自己中心的なタ゛ブス夕っぷりに寝言は寝て言えってのな
痴漢カ゛−なんてのもそういう他人の権利を強奪して私腹を肥やすテ□リス├の‐味になるために受験とかしてるクス゛が大半なんじゃねえのかよ
創価学會員は.何百万人も殺傷して損害を与えて私腹を肥やし続けて逮捕者まて゛出てる世界最悪の殺人腐敗組織公明党を
池田センセ━が囗をきけて容認するとか本氣で思ってるとしたら侮辱にもほどか゛あるそ゛!
hтtРs://i.imgur.сοm/hnli1ga.jpeg
257:デフォルトの名無しさん
23/08/05 10:09:31.04 BuM8hDNP.net
削除は本人の判断だけど
> それにしてもCが低水準言語であると思っている人の数が圧倒的に多くそのような記事が当たり前のようにあるので驚いたところです。
とまで書いてた本人が記事を削除する意図が分からんのよね。
258:デフォルトの名無しさん
23/08/05 13:04:09.35 G0xPWQV0.net
低水準の意味を間違って捉えてるんだろ
ハッカーと同じ
259:デフォルトの名無しさん
23/08/08 19:36:07.20 bRo0TWoK.net
C言語における「bool型へのキャスト」が無限の(悪用)可能性を秘めている理由
URLリンク(webcache.googleusercontent.com)
程度低い記事だなあ、これはツッコまれるの不可避だわと思っていたら消えていた。
260:デフォルトの名無しさん
23/08/08 19:38:50.29 bRo0TWoK.net
「いいね」も付いてたし指摘された誤りは修正すれば消さんでも良かったんじゃないのとは思う。
己に対して完璧以外許さない性格かな。
261:デフォルトの名無しさん
23/08/10 10:14:42.42 P5HupFIS.net
誤り以前にboolに変換して掛け算するのはどうなのよ
262:デフォルトの名無しさん
23/08/10 10:17:08.67 P5HupFIS.net
C言語ならまだギリギリ許されることもあるけどセマンティクス的に汚いし他の言語だとNGだから積極的に学ぶ方法でもない
読みにくくなるだけでなくコーディング量もそれほど変わらない上に速度すら落ちてるから
263:デフォルトの名無しさん
23/08/10 10:19:04.97 P5HupFIS.net
あとデータが1と0に限定されるから拡張性にも欠ける
後で2を使いたくなった時に全コード見直す必要が出てくる
264:デフォルトの名無しさん
23/08/10 14:12:42.71 UgpRJI2F.net
キャスト使えばこういう悪事もできるよ(良い子は真似しないでね)という記事なんだから、掛け算以外の指摘に関しては論点ではない
265:デフォルトの名無しさん
23/08/10 14:15:03.93 4HGAEGv7.net
C言語だと別に悪事というほどではない
ひたすら汚いだけ
266:デフォルトの名無しさん
23/08/10 16:12:44.88 RFVZcdoC.net
>>254
考え自体は正しい
条件分岐はパイプラインを乱す
条件分岐とならないコードが生成されることが望ましい
しかし多くのケースではコンパイラのコード生成に任せることができる
今回のケースならばif文のままでも条件ムーブ(CMOVcc)命令などが生成され条件分岐とならないだろう
ソースコードの可読性からもif文のままが好ましい
ただしもっと複雑なケースで複数の条件分岐をなくして演算のみにできる場合もある
そしてコンパイラ任せではそのようなコード生成が無理な場合もある
その場合はベンチ測定比較すれば有意な差が出るためそれは正しい判断となる
267:デフォルトの名無しさん
23/08/10 19:42:46.48 c2H9n5TK.net
> しかし多くのケースではコンパイラのコード生成に任せることができる
> 今回のケースならばif文のままでも条件ムーブ(CMOVcc)命令などが生成され条件分岐とならないだろう
> ソースコードの可読性からもif文のままが好ましい
なにやら知ったようなことを言ってるので検証してみるとするか。
268:デフォルトの名無しさん
23/08/10 19:43:13.35 c2H9n5TK.net
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;
}
}
}
gcc 13.2 最適化オプション-O2でコンパイル
hoge:
testl %edi, %edi
jle .L1
movslq %edi, %rdi
leaq (%rsi,%rdi,4), %rax
.L4:
cmpl %edx, (%rsi)
jne .L3
movl $0, (%rsi)
.L3:
addq $4, %rsi
cmpq %rax, %rsi
jne .L4
.L1:
ret
URLリンク(godbolt.org)
条件分岐するじゃんw
269:デフォルトの名無しさん
23/08/10 19:46:00.32 c2H9n5TK.net
記事の計算による方法
void hoge(int n, int num[n], int deleteNum)
{
for (int i = 0; i < n; i++) {
for (int i = 0; i < 6; i++) {
num[i] -= deleteNum * (deleteNum == num[i]); // deleteNumで指定した要素を消す
}
}
}
hoge: xorl %r11d, %r11d
leaq 24(%rsi), %r10
xorl %r9d, %r9d
testl %edi, %edi
jle .L9
.L2: movq %rsi, %rax
.L4: movl (%rax), %ecx
movl %r9d, %r8d
cmpl %edx, %ecx
cmove %edx, %r8d
addq $4, %rax
subl %r8d, %ecx
movl %ecx, -4(%rax)
cmpq %r10, %rax
jne .L4
addl $1, %r11d
cmpl %r11d, %edi
jne .L2
ret
.L9: ret
URLリンク(godbolt.org)
cmov命令吐いてる
270:デフォルトの名無しさん
23/08/10 19:47:40.53 c2H9n5TK.net
ちなみに計算による方法でもこう書くと2行短くなった
void hoge(int n, int num[n], int deleteNum)
{
for (int i = 0; i < n; i++) {
for (int i = 0; i < 6; i++) {
num[i] *= deleteNum != num[i]; // deleteNumで指定した要素を消す
}
}
}
hoge: xorl %r10d, %r10d
leaq 24(%rsi), %r9
xorl %r8d, %r8d
testl %edi, %edi
jle .L9
.L2: movq %rsi, %rax
.L4: movl (%rax), %ecx
cmpl %edx, %ecx
cmove %r8d, %ecx
addq $4, %rax
movl %ecx, -4(%rax)
cmpq %r9, %rax
jne .L4
addl $1, %r10d
cmpl %r10d, %edi
jne .L2
ret
.L9: ret
URLリンク(godbolt.org)
271:デフォルトの名無しさん
23/08/10 19:51:41.79 UyoKACkM.net
したがって>>254の記事は全面的に正しい
bool値を数値演算として使うことを積極的に推奨する
272:デフォルトの名無しさん
23/08/10 19:57:21.15 c2H9n5TK.net
> したがって>>254の記事は全面的に正しい
boolへのキャストなんてしねーよ馬鹿か
273:デフォルトの名無しさん
23/08/10 20:01:44.72 s1ImWQTP.net
>>257
数学に出てくるクロネッカーのデルタみたいなもので汚くはないし、型に厳しい言語でなければ他の言語でも使えるだろ。
274:デフォルトの名無しさん
23/08/10 20:21:25.47 c2H9n5TK.net
>>264訂正
void hoge(int n, int num[n], int deleteNum)
{
for (int i = 0; i < 6; i++) {
num[i] -= deleteNum * (deleteNum == num[i]); // deleteNumで指定した要素を消す
}
}
hoge:
leaq 24(%rsi), %r8
xorl %edi, %edi
.L2:
movl (%rsi), %eax
movl %edi, %ecx
cmpl %edx, %eax
cmove %edx, %ecx
addq $4, %rsi
subl %
275:ecx, %eax movl %eax, -4(%rsi) cmpq %rsi, %r8 jne .L2 ret https://godbolt.org/z/br4nPfcEa
276:デフォルトの名無しさん
23/08/10 20:22:14.91 c2H9n5TK.net
>>265も訂正
void hoge(int n, int num[n], int deleteNum)
{
for (int i = 0; i < 6; i++) {
num[i] *= deleteNum != num[i]; // deleteNumで指定した要素を消す
}
}
hoge:
leaq 24(%rsi), %rdi
xorl %ecx, %ecx
.L2:
movl (%rsi), %eax
cmpl %edx, %eax
cmove %ecx, %eax
addq $4, %rsi
movl %eax, -4(%rsi)
cmpq %rdi, %rsi
jne .L2
ret
URLリンク(godbolt.org)
277:デフォルトの名無しさん
23/08/10 20:25:05.76 c2H9n5TK.net
すまん>>264再度訂正
void hoge(int n, int num[n], int deleteNum)
{
for (int i = 0; i < n; i++) {
num[i] -= deleteNum * (deleteNum == num[i]); // deleteNumで指定した要素を消す
}
}
hoge:
testl %edi, %edi
jle .L1
movslq %edi, %rdi
leaq (%rsi,%rdi,4), %r8
xorl %edi, %edi
.L3:
movl (%rsi), %eax
movl %edi, %ecx
cmpl %edx, %eax
cmove %edx, %ecx
addq $4, %rsi
subl %ecx, %eax
movl %eax, -4(%rsi)
cmpq %rsi, %r8
jne .L3
.L1:
ret
URLリンク(godbolt.org)
278:デフォルトの名無しさん
23/08/10 20:25:56.38 c2H9n5TK.net
>>265も再度訂正
void hoge(int n, int num[n], int deleteNum)
{
for (int i = 0; i < n; i++) {
num[i] *= deleteNum != num[i]; // deleteNumで指定した要素を消す
}
}
hoge:
testl %edi, %edi
jle .L1
movslq %edi, %rdi
xorl %ecx, %ecx
leaq (%rsi,%rdi,4), %rdi
.L3:
movl (%rsi), %eax
cmpl %edx, %eax
cmove %ecx, %eax
addq $4, %rsi
movl %eax, -4(%rsi)
cmpq %rsi, %rdi
jne .L3
.L1:
ret
URLリンク(godbolt.org)
279:デフォルトの名無しさん
23/08/10 22:01:59.49 4Znn5xIX.net
Rustでも同じ結果となった (diff -u 形式)
fn hoge(num_list: &mut [i32], delete_num: i32) {
for num in num_list {
- if *num == delete_num {
- *num = 0;
- }
+ *num *= (*num != delete_num) as i32;
}
}
アセンブラ出力の方はラベルと使用レジスタ名のズレだけ揃えてdiff
hoge:
test rsi, rsi
je .LBB1_4
shl rsi, 2
xor eax, eax
+ xor ecx, ecx
.LBB1_2:
- cmp dword ptr [rdi + rax], edx
- jne .LBB1_3
- mov dword ptr [rdi + rax], 0
-.LBB1_3:
+ mov r8d, dword ptr [rdi + rax]
+ cmp r8d, edx
+ cmove r8d, ecx
+ mov dword ptr [rdi + rax], r8d
add rax, 4
cmp rsi, rax
jne .LBB1_2
.LBB1_4:
ret
280:デフォルトの名無しさん
23/08/10 22:05:03.94 4Znn5xIX.net
つまりC言語もRustもどちらも同じく
if文の時は普通に条件分岐する
比較値を自己掛け算させるとcmoveを使う
生成コードで掛け算が消えてしまうのはいいね
代わりにやってることは
(1) レジスタの値にメモリから読み込む
(2) 比較
(3) 一致していた時のみレジスタに値0を入れる 【cmove】
(4) レジスタの値をメモリへ書き戻す
条件分岐がない代わりに0にしない時も常に書き込みが発生する
ただし読み込んだ位置への書き込みだから
1サイクルのみでキャッシュページミスのペナルティも無くて済むから問題なしか
一方で元の条件分岐ジャンプするコードと比較して速さはどうなの?
分岐予測ミスやパイプラインの乱れとやらがどれだけ効くのか教えて欲しい
281:デフォルトの名無しさん
23/08/10 22:05:48.11 MwGz91pK.net
何度訂正されても暑さでやられたやつが発狂してるようにしか見えんからもういいぞ
どうしても主張したいなら記事書けよ
282:デフォルトの名無しさん
23/08/10 22:36:14.41 4Znn5xIX.net
訂正してる人はコピペミスか実験かどちらかで二重ループになってしまったのを訂正してるっぽいけどよくわからん
アドバイスできることは
clangの方で-O2だとベクタ展開して比較わかりにくくなってるのを
-Os指定すれば展開がなくなりgccとほぼ同じコードになるよ
283:デフォルトの名無しさん
23/08/11 06:16:54.95 YfwUjgK1.net
>>274
元の条件分岐ジャンプするコードと比較して速さはどうなの?と聞いてるが
元のコードが何か分からないし
比較対象のコードが何か分からない
元のコードと比較対象のコードは何?
284:デフォルトの名無しさん
23/08/11 08:15:21.50 jaK9CZIt.net
if文を使ったコードと使わないコードの2種類が示されている状況で
何と何を比較しているのかわからないのは深刻な脳のバグだよw
285:デフォルトの名無しさん
23/08/11 08:34:14.26 YfwUjgK1.net
>>278
暗号解読の趣味はない
そもそも1レス内で完結してるの?
暗号みたいなレスだから他のレスは全く読まない
286:デフォルトの名無しさん
23/08/11 08:59:40.37 WAWJg8ep.net
発狂してる俺様のレスを追いかけて全部読めとかいう頭のバグったやつ
287:デフォルトの名無しさん
23/08/11 09:03:31.51 YfwUjgK1.net
本人が気づいてない可能性があるからボランティアで教えてあげている
君の文章では他の人間は全く理解できないと
そもそも自分と他人を区別できてるのかなw
288:デフォルトの名無しさん
23/08/11 09:09:23.31 Y8RASnRQ.net
Cの人のレスは複数に分かれて訂正もあって二つの比較がわかりにくいけど
Rustの人のレス>>273はdiff形式で一つのレスに書かれているから何と何を比較しているか一目瞭然でしょ
289:デフォルトの名無しさん
23/08/11 09:26:13.77 sVlBLJlv.net
RustとRubyとMAUIをNGしてるやつは多いと思う
290:デフォルトの名無しさん
23/08/11 09:34:13.85 YXKl/G3F.net
単語NG設定してるやつがそいつだけ重要なレスを読めていないことが原因で勘違いな書き込みを繰り返すパターンはよくあるよな
しかし今回のアホな>>277はNGしていないからレスしてるわけで単なるアホなパターンかと
291:デフォルトの名無しさん
23/08/11 15:23:23.45 Dz1zKJwc.net
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で指定した要素を消す
}
}
↑を
292:デフォルトの名無しさん
23/08/11 15:24:31.74 Dz1zKJwc.net
#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);
}
↑で測定した。
293:デフォルトの名無しさん
23/08/11 15:29:01.99 Dz1zKJwc.net
gcc 12.2.0に-O2を指定
hoge: 0.279982
piyo: 0.059988
hogera: 0.051996
URLリンク(wandbox.org)
clang 15.0.7に-O2を指定
hoge: 0.283996
piyo: 0.036019
hogera: 0.028001
URLリンク(wandbox.org)
clang 15.0.7に-O2 -march=nativeを指定
hoge: 0.028001
piyo: 0.028001
hogera: 0.027980
URLリンク(wandbox.org)
294:デフォルトの名無しさん
23/08/11 15:40:51.42 Dz1zKJwc.net
gccとclangの両方で最適化指示に-O2だけを指定した場合にhogeの結果が極端に悪いのは
・条件分岐命令が生成されている
・配列の内容をrand()で生成しているため分岐予測が外れまくる
ことが原因と思われる。
clangに-O2 -march=nativeを指定した場合にhogeの結果が他と変わらなくなったのは恐らくはAVX命令が使用され条件分岐がなくなったため。
試しに-O2 -mavx2を指定しても
hoge: 0.028001
piyo: 0.028002
hogera: 0.028002
URLリンク(wandbox.org)
変わらない結果となった。
295:デフォルトの名無しさん
23/08/11 15:42:39.23 k/CU0rlR.net
別スレ立ててそこでやって
リンク貼っていいから
Qiitaと関係なくてスレチだし
元の記事はQiitaから削除されて存在しない
1つのテーマを掘り下げる目的がありそうだし
長くなりそう
296:デフォルトの名無しさん
23/08/11 22:03:23.82 n9doW6N2.net
>>287
if文を使うと10倍遅くなるのが衝撃的だ
今後はif文を無くせる場合は無くそうと思う
if文の中で代入してるだけならコンパイラが頑張ってcmoveを使って分岐を避けてくれればいいのにね
297:デフォルトの名無しさん
23/08/12 02:16:01.85 MQtFcy0V.net
「なんでそんな書き方するの?」
「こっちのが速いから」
「へー、どれくらい?」
「100万回実行して数msかな」
「でもここ数回しか実行されないよ?」
298:デフォルトの名無しさん
23/08/12 10:23:43.34 BDIecCFX.net
長々と空気読めないこと喋るやつおるよな
299:デフォルトの名無しさん
23/08/12 10:28:09.42 w3tn+9YE.net
>>290
if文を無くせる場合はどんな場合がある?
ifがあるなら無くせないんじゃないの?
その場合を見つけたとしてこのスレで発表する?
それともこのスレを出典にする?
このスレにリンクを貼らないとif文を使うと10倍遅くなることを証明できないから
300:デフォルトの名無しさん
23/08/12 12:27:02.41 kvrjqk0I.net
常にこんな書き方をするべきとかではなくてスループットを上げたい場合に考えられる手段の一つ、くらいの話だと思うんだが顔真っ赤にして否定してる奴なんなの
301:デフォルトの名無しさん
23/08/12 13:09:09.17 VjFL1AwM.net
処理系やプロセッサ依存のソースを書く時代は終わったんだよ顔真っ赤なおじいちゃん
何度も言われてるようにここじゃなくQiitaに記事書きなよw
302:デフォルトの名無しさん
23/08/12 13:13:42.09 kvrjqk0I.net
> 処理系やプロセッサ依存のソースを書く時代は終わったんだよ
組み込みとか念頭にない人は世の中が単純に見えて幸せそうですね。
303:デフォルトの名無しさん
23/08/12 14:21:39.40 VjFL1AwM.net
組み込みの現場も知らない癖に何をイキッてるんだ無職くんはw
いいから記事を書きなよ
そしたらここで話題にしてもいいからさ
スレ違いってわかる?
304:デフォルトの名無しさん
23/08/12 16:29:25.06 QkMalqzA.net
URLリンク(qiita.com)
金持ち喧嘩せず
305:デフォルトの名無しさん
23/08/12 16:53:18.46 wD60IGH3.net
>>293
if文を無くせる場合があるというのが>>254の記事
そしてif文を無くした方が10倍速くなる場合を示してくれたのが>>287の測定
何がトレードオフになっているかというと
if文があるとCPUは条件分岐によるパイプラインの乱れのペナルティを喰らう
if文がないとCPUは条件に関わらず同じ命令群を実行する (=条件の片方では無意味なことをする可能性がある)
したがってif文を無くせる場合はまず大雑把に言うとif文の(条件部ではなく)実行部がある程度短く実行サイクルも短いこと
例えば軽い数値の演算やその代入などならばif文を無くせる場合に合致することが多いだろう
306:デフォルトの名無しさん
23/08/12 16:55:33.58 dxjaE8PG.net
プロセッサに依存していいならどう最適化されるか決まってないCよりアセンブラ使う方が確実だぞ
307:デフォルトの名無しさん
23/08/12 17:42:26.72 LEE4+Uqf.net
終わった記事に関してウダウダと
そんなんだからいつまで経っても独り身なんだぞ
308:デフォルトの名無しさん
23/08/12 17:51:13.60 yNBhBfdR.net
>>300
CMOV命令はintelにもamdにもあるから一般的な環境でプロセッサ依存ではないですよね
もしCMOVがない特殊な環境でも条件フラグをレジスタに入れる命令があればそれが使われて大丈夫ですね
gccとclangどちらでも速くなったようだからコンパイラ処理系依存のテクニックではなさそう
C言語だけでなくRustでも同じ生成コードとなったから言語に依存したテクニックでもなさそう
309:デフォルトの名無しさん
23/08/12 18:39:13.58 mEHRZZZJ.net
>>299
> if文を無くせる場合があるというのが253の記事
記事にあるif文を無くせる場合はこれ1つだけ
if (num==1) { num=0 } else { num=1 }
↓
num = !(bool)num
他の読者のために書いてあげる
機会が非常に少なくて残念!!
レスの後半部分は間違ってる
310:デフォルトの名無しさん
23/08/12 18:45:47.87 mEHRZZZJ.net
if文の高速化が検索したら
ifとswitchで迷ったらswitchを使う
IF K=6 THEN X=X+1→X=X-(K=6)
が出てきてif文の高速化は有名な話だったようだ
補足訂正
311:デフォルトの名無しさん
23/08/12 19:08:27.81 dqIchbhY.net
>>303
プログラムも読めないのか
そんなバカが必死に否定してたのか
記事以外にもこのスレで他のコード例やコンパイラによるその生成アセンブラも出ている
さらにベンチマーク比較で大きく速度向上まで結果が出ている
この状況で必死に否定し続けるのはみっともないぜ
312:デフォルトの名無しさん
23/08/12 22:28:25.82 TiqzNocE.net
>>302
組み込みの意味がわからない人?w
313:デフォルトの名無しさん
23/08/12 23:03:51.71 dqIchbhY.net
記事読んでも組み込みなんて限定はないな
必死に否定してるバカが勝手に組み込みの話と思い込んでいるのか
314:デフォルトの名無しさん
23/08/13 00:15:07.75 NKbs7DmP.net
なんでそんなに必死なのか知らんけどここまで言われても記事を書こうとしないのは自分が間違ってることを薄々でもわかってるんだろ?w
無理すんな無職
315:デフォルトの名無しさん
23/08/13 01:15:32.46 qIH8AICq.net
>>308
if文を無くす高速化の話は昔から有名かつ実用なので記事なんていくらでもあるよ
自分で検索してごらん
316:デフォルトの名無しさん
23/08/13 10:23:41.63 427/I8XL.net
> 記事を書こうとしないのは
日本の技術力の底上げのために
検索結果の健全化のために
クソ記事書くのはもうやめてクレメンス
お願いですから書くのやめてクレメンス
書かないことでみんなが助かる
書かないことでみんなが嬉しい
わかってクレメンス
クソ記事書いてはいけないと
正常な人間ははじめから知っているんです
317:デフォルトの名無しさん
23/08/13 10:23:43.05 ea9tHaSQ.net
逃げたw
318:デフォルトの名無しさん
23/08/13 12:06:02.55 mxfdwtiA.net
クソ記事は批判して良いと思うが
クソ記事に対する批判がみんなのためになるのなら賛成
ただ暇でやってるだけならもうちょっと時間を有効に使えと言いたい
319:デフォルトの名無しさん
23/08/13 13:52:34.26 bmBefS74.net
if文をなくすのが高速化に繋がってると解釈してる人がいるようなので補足。
>>287の投稿で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;
}
}
内容が変わろうが変わるまいが常にメモリへの書き込みが行われるよう変更したらどうなるか。
320:デフォルトの名無しさん
23/08/13 13:57:12.40 bmBefS74.net
gcc 12.2.0に-O2を指定
hoge: 0.044001
piyo: 0.060001
hogera: 0.052001
URLリンク(wandbox.org)
clang 15.0.7に-O2を指定
hoge: 0.032001
piyo: 0.032002
hogera: 0.031992
URLリンク(wandbox.org)
hoge()の実行時間はpiyo()やhogera()と大差なくなる。
if文の使用がhoge()が遅かった原因ではない。
321:デフォルトの名無しさん
23/08/13 14:09:26.02 aL79QjVh.net
Qiitaアカウント持ってないからここでウダウダコメントするしかない雑魚w
322:デフォルトの名無しさん
23/08/13 14:28:13.37 xVDxBOfX.net
URLリンク(qiita.com)
自分でもキモいとわかっていながらなぜこんなキャラで発信してしまうのか
いいねは組織票かな?
323:デフォルトの名無しさん
23/08/13 14:59:12.83 427/I8XL.net
> Qiitaアカウント持ってない
つまりそれは
正常な思考力を持ってるってこと
324:デフォルトの名無しさん
23/08/13 16:34:36.74 Z5uDnRRN.net
Qiitaに日記を書くんじゃない
325:デフォルトの名無しさん
23/08/13 16:43:33.83 Z5uDnRRN.net
IT技術と関係ない記事、不愉快
URLリンク(qiita.com)
URLリンク(qiita.com)
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
13日前に更新/295 KB
担当:undef