はてなキーワード: メモリとは
検索ヒット1件につき10MBのメモリを食うAPIをメモリ4GBのインスタンスで動かしてて、そこで400件のヒットが出たらどうなる?
それが実際はメモリ32GBで、「1件につき10MB」じゃなくて「ヒット件数の2乗 * 1MB」で、ヒット件数がやっぱり400件だったら、400件 * 400件 * 1MB = 160GB > 32GBになるじゃん?
どうすればいい? 簡単だよな。インスタンスのメモリ量を1.8TBに増加ヨシ! 稟議書急ぎで作成ヨシ! 事後承認の手配ヨシ! SNSで気付いて騒ぎ始めたやつに恐喝ヨシ! な? お前もこうやって成長すんだよ。
んー。
書いたコードの計算量のオーダーをつねに意識するってのは,十分にコンピューター・サイエンスの知識の応用だと思うけどな。
CPU時間でO(n log n),メモリ量でO(n)を超えるオーダーの処理を書いてしまったときには「やばい」と本能が訴えかけてきて,パラメーターチェックを厳密にするなり,別のアルゴリズムを探すなりして欲しい。けどCSを全くやっておらず,ランダウの記法を習ってない人間には,何を言ってるかすらわからないでしょ?
計算に必要なCPUサイクルやメモリ量を,オーダーで表現する方法を習う。で,どういうアルゴリズムがどういうオーダーを持つのかをいくつかの例で習い,コードを実行するのに必要な資源の規模を見積もることができるようになる。
じゃぁ実際にソートが遅いとかあった場合にこっちに何ができるんだ?OSSだから自分たちで直して独自ビルドにして使うのか?プルリクするのか?しないだろ?「っていう問題があるのでアップデートきたら対応します」だろ?
DBならインデックスを貼る、メモリ上ならデータ量が減らせないか検討する
データがメモリから溢れてswap領域を使っている状態で、かつ減らせないとなった場合は、ディスクIOを速くすることが解決策になることもある
ある業務用Webシステムは検索結果の表示件数を5/10/20件から選べるようになっててて,URLのパラメーターで「?n=20」とかやって送ってた。メニューからは三つの値しか選べないが手で書き換えれば100とか200とか選べる穴が空いてた。
で,よりによってメモリ使用量がO(n^2)になるコードを書いていやがった。n=500でOutOfMemoryError。リモートから面白いようにサービスを落とせた。
CSを知ってるやつなら,コードを書いた瞬間から「これnの上限チェック入れないとまずいな」とわかるんだよ。というか,普通にこのコードはまずいと考えてアルゴリズムをなおして,O(1)でDBレコード全件持ってきても落ちないコードにできてたはず。
申し訳ないが、コンピュータサイエンスを履修せずにプログラマーになった人に多いのは
まずそもそも困っていることに気付けていないのでスタートラインに立ててない
スラムダンクでいうところの「下手くその 上級者への道のりは 己が下手さを知りて一歩目」というやつだ
ちなみにコンピュータサイエンスってのはオーダの話だけではなくて
例えばメモリとCPUキャッシュ、スワップなどのスピードやその使い方、コンパイラによる最適化、OSのリソース共有、状態管理の考え方なんかも含まれる
性能をもっと上げたいっていうときにオーダだけじゃなくてそういうことを網羅的に考える必要がある
ところがそもそもコンピュータサイエンスを履修してないと「性能向上が必要かどうか」を分かって無い人が多い
「これ、1秒で処理終わってるけど、本来なら1msec以内に終わるはずじゃない?」
というのに気付けてない場合が多い
1秒で処理が終わればユーザ体験は満足してしまうので気付けないんだが、ユーザが増えてくるとユーザ体験が途端に悪くなってくる
そのときに「プログラミング上のミスがあって性能が劣化している」ということに気付くか、「性能限界だからさらなるリソースが必要」と誤解するかによってビジネス上の戦略まで変わってくる
それだけではなくてクリーンアーキテクチャみたいな話も「機能が増えたんだから実装に時間がかかってバグが増えるのは当たり前」というところに落とし込んでしまうか
「もっとアーキテクチャを整理して考えれば機能追加も楽になるはず」という考えに至るか、というところで大きな差がある
この辺りでビジネス上の戦略まで変わってしまうからGoogleやMicrosoftなんかは積極的にコンピュータサイエンスを履修してる人を雇う
もう少し簡単に言うと、コンピュータサイエンスを履修してないプログラマーに多いのが
「今は動いているけれど触るとどうなるかわからない」
というソフトウェアを作りがちなところだと思う
レビューしてても
というコメントをするが、大抵
「動いているのでいいでしょwww」
みたいな感じで返してくるからどうしようもない
思惑どおり2nmチップ作る技術が出来たとして、何向けのチップを作るかが重要だ。
車載はルネと被る。
富士通はスパコン向け作ったが国内民間市場まで作れなかったし、半導体から撤退ムードだ。
ソフトバンクArm CPU+AI演算処理+キオクシアメモリ+NTT光通信という構成。
NVIDIAがArm+GPUをやろうとしていたが、GPUをAI演算処理としたもの。
光通信になって処理速度が劇的に上がるわけではないが、発熱元を離すことが出来るので、
冷却の設計自由度が上がる。(もちろんサーバーとして集約したいニーズがあるので離し過ぎは出来ないが)
NECがサーバーと、PCIeボード担当(NVIDIAのようにPCIeじゃないボードかもしれないが)
NVIDIA RTX4090x8個だと3500ワットほどでで動作するが、これを超えないといけない。
数年後だからRTX4090の次の次が出ているはずだ。それも超えないといけない。
桁で性能を超えないと意味がない。
作れたとしても数を揃えれば上回れる性能であれば、わざわざ使いにくい物を使わないし、
世代が進めば追い越される。
あとは、京で分かっていることがだが、スパコン向けをシュリンクしたサーバーは性能良くても売れない。
GPUボードのような形で売りに出さないと、ソフトを書こうという人口も増えない。
動画編集ソフトに何を使うかで、Win か Mac かわかれると思う。
Mac の iMovie 使いたいのに、Win 選んだら可哀そうだし。
でまぁ、ユーザ数から言って Win 選ぶほうがいろいろ便利。
最初は、PowerDirector Essential を使って、
本格的にやり始めたら、 DaVinci Resolve に乗り換えたらいい。
SSDを 1TB搭載してる。
メモリが 32GB ある。
[USB3.2 Gen2x2]以降のUSB Type-C端子が必須。
https://jp.ext.hp.com/notebooks/personal/spectre_x360_16_f/
とかね。