WEBVTT 00:00.470 --> 00:01.040 分かった。 00:01.040 --> 00:02.750 どうなるか楽しみですか? 00:02.780 --> 00:04.130 試してみよう。 00:04.160 --> 00:15.890 そこで次のセクションでは、 πという文字列を作り、 その中に1マイナス3プラス5、 マイナス7プラス9という一連の計算をするコードを入れる。 00:15.890 --> 00:17.420 それは自分の目で確かめてほしい。 00:17.450 --> 00:18.770 ミスの数をチェックする。 00:18.770 --> 00:23.690 それを100万回繰り返すんだ。 00:24.170 --> 00:28.640 そのひとつひとつを見ることができるのだから。 00:28.670 --> 00:31.130 あのシリーズでは2つの要素を2つやっているようなものだ。 00:31.130 --> 00:33.710 だから、 このシリーズは2億本だ。 00:33.710 --> 00:38.300 そして、 πにどれだけ近づけるかを見て、 その結果をプリントする。 00:38.570 --> 00:40.700 だから、 そうしよう。 00:40.820 --> 00:46.970 もちろん、 自分たちが何をしているのかよくわかっているからこそできることだ。 00:46.970 --> 00:51.140 しかし、 誰かがexacと言うときはいつも少し疑ってかかるべきだ。 00:51.170 --> 00:56.690 ExACはもちろん、 文字列で指定されたPythonコードを実行するコマンドだ。 00:56.720 --> 01:02.820 そして今、 あなたはこのストリングが悪に対して何もしていないことを確信できる。 01:02.820 --> 01:04.350 このシリーズをやっているだけだよ。 01:04.350 --> 01:09.060 しかし、 誰かがあなたにexecを含むコードを渡すときは、 ファイルシステムやインターネット接続などにおかしなことがないか、 01:09.060 --> 01:13.530 常にダブルチェックする必要がある。 01:13.530 --> 01:17.820 しかし、 この場合はかなり安全であることが保証されるので、 試してみよう。 01:17.850 --> 01:18.600 正確な円周率。 01:18.630 --> 01:20.040 どうなるか見てみよう。 01:21.270 --> 01:23.400 だから間が空く。 01:23.430 --> 01:27.570 Pythonはそのうちの2億語を考えている。 01:27.570 --> 01:28.500 さあ、 行こう。 01:28.500 --> 01:31.080 では、 その後、 円周率がどの程度になるか見てみよう。 01:31.080 --> 01:33.090 3. 14159265. 01:33.090 --> 01:34.650 そしてその桁は間違っている。 01:34.890 --> 01:39.960 つまり、 2億の用語はそれほど大きなものではないのだ。 01:39.960 --> 01:40.320 円周率 01:40.350 --> 01:48.000 ご存じかもしれないが、 収束が非常に速い、 より優れたシリーズがある。 01:48.030 --> 01:51.840 これは、 書くのは超シンプルだが、 徐々に収束していくという利点だ。 01:51.840 --> 01:57.870 だから8回かかった。 5764秒かかる。 01:58.120 --> 02:03.100 これを何度か実行すれば、 マシン上で起こっている他のことのために、 かなりの量が変化することがわかるだろう。 02:03.100 --> 02:06.760 あなたのマシンと私のマシンは違うけど、 大まかなことはわかるだろう。 02:06.790 --> 02:07.390 オーケー。 02:07.420 --> 02:13.480 つまり、 GPT piを最適化すれば、 C+++のコードがストリームアウトされ、 GPT 4にユーザー・プロンプトの一部としてその文字列を送ることで、 02:13.480 --> 02:18.460 同じことができるはずだ。 02:18.490 --> 02:20.320 さて、 何が出てくるかな。 02:20.740 --> 02:22.690 ええと、 これは私が君に言ったことなんだ。 02:22.690 --> 02:28.030 これはファイルの先頭に置かれ、 ディスクに保存する前にこれを取り除く。 02:28.060 --> 02:29.800 これがその方法だ。 02:29.920 --> 02:42.370 あなたはC++の第一人者かもしれないし、 そうでないかもしれないが、 似たようなことの知識から、 これが同じことをやっているという事実を理解することはできるだろう。 02:42.520 --> 02:50.740 同じような計算を、 同じような項数で行っていて、 最適化されたCプラスプラスのファイルをここに書いている。 02:50.740 --> 02:52.390 そして、 そこにある。 02:52.390 --> 02:54.040 すべてがうまくいっているのがわかるだろう。 02:54.040 --> 03:01.370 そして、 このパッケージには、 セット精度機能を使用するため、 必要なものが含まれている。 03:01.370 --> 03:06.650 そして、 もしユーザー・プロンプトにそのように書かないと、 このパッケージが含まれていないことに気づき、 それが原因で壊れてしまう。 03:06.650 --> 03:07.910 そうだ。 03:08.030 --> 03:10.790 何はともあれ、 私たちはヒントを与え、 それを実行した。 03:11.330 --> 03:12.710 うーん、 わかった。 03:12.710 --> 03:14.090 次のセルを見てほしい。 03:14.090 --> 03:15.110 だから、 この次のセルだ。 03:15.110 --> 03:25.010 覚えているだろうか、 Jupyterで感嘆符をつけると、 それをターミナル・コマンドとして実行する。 03:25.010 --> 03:27.800 ここでやっているのはターミナル・コマンドだ。 03:27.800 --> 03:29.570 あー、 ガチャン++。 03:29.570 --> 03:35.030 そして、 この特別な声明は最適化されている。 03:35.030 --> 03:39.740 コンパイルして、 C++のコードを実行するのだ。 03:39.980 --> 03:44.000 ええと、 この後、 さらに最適化された方法を使います。 03:44.000 --> 03:47.750 しかし、 これは今のところ、 あなたのコンピューターには適している。 03:47.750 --> 03:51.350 コンパイルに何が必要なのか、 ググってみるといいだろう。 03:51.470 --> 03:57.690 ええと、 もしあなたがマックを使っているなら、 少なくともXcodeを開いて、 最新のXcodeツールがインストールされていることを確認し、 03:57.690 --> 04:02.070 最新バージョンのコンパイラがあることを確認する必要があるかもしれません。 04:02.190 --> 04:06.630 うーん、 でも、 でも、 そんなことはともかく、 ググればCプラス・プラス・ファイルのコンパイル方法がわかるよ。 04:06.690 --> 04:12.360 ええと、 この行を最適化されたCプラス・コンパイルに変更し、 最適化されたCPPファイルをコンパイルすれば、 04:12.390 --> 04:14.370 もちろんそれが実行方法となる。 04:14.370 --> 04:21.450 だから、 私たちが打ち負かそうとしているのは8点であることを忘れないでほしい。 57秒 04:21.450 --> 04:26.520 GPT4がどのような結果を残したか見てみよう。 04:26.520 --> 04:27.540 さあ、 始めよう。 04:29.280 --> 04:37.410 そして、 少なくとも658と同じ答えを持っている。 04:37.440 --> 04:37.920 そうだ。 04:37.920 --> 04:38.550 そのようだ。 04:38.550 --> 04:39.990 つまり、 多少は期待できるということだ。 04:40.020 --> 04:42.300 四捨五入の違いもない。 04:42.300 --> 04:44.310 まさにその通りだと思う。 04:44.310 --> 04:47.520 しかも、 ほんのわずかな時間でだ。 21. 04:47.610 --> 04:55.180 つまり、 10倍から100倍速いということだ。 04:55.330 --> 04:58.810 後で、 さらに最適化すれば、 これよりもっといいものができることがわかるだろう。 04:58.810 --> 04:59.020 でもね。 04:59.020 --> 05:01.360 しかし、 このフラッグのおかげで、 それが実現したのだ。 05:01.390 --> 05:02.980 かなり印象的だ。 05:03.010 --> 05:12.550 我々は、 PythonからCプラスプラスにコードを変換し、 何倍も速く実行できるものを作ったところだ。 05:12.580 --> 05:14.890 クロードがどうするか見てみよう。 05:18.340 --> 05:21.220 では、 早速コードを見比べてみよう。 05:22.960 --> 05:25.840 コードもよく似ている。 05:26.020 --> 05:29.260 見ていただければわかると思いますが、 微妙な違いがあります。 05:29.260 --> 05:35.470 例えば、 ここにこんなものがある。 05:35.470 --> 05:42.310 私はCプラスプラスの専門家ではないが、 1、 2年前にCプラスプラスでコーディングしたことはある。 05:42.460 --> 05:45.640 でも、 悲しいかな、 僕の中ではそれはすべて入れ替わっているんだ。 05:45.670 --> 05:48.610 それに、 このレベルに達することはなかっただろうね。 05:48.610 --> 05:54.590 並列化が可能であることを示唆するさまざまなヒントが含まれていると思うが、 このようなものについては、 05:54.620 --> 06:00.320 コンパイラーはどちらの場合にもそれを適用するのではないかと思う。 06:00.350 --> 06:07.820 同じコマンドを実行して、 実際に違いが出るかどうか見てみよう。 06:10.490 --> 06:11.780 あ、 ごめん、 今のは走ったかな? 06:11.780 --> 06:12.620 もう一度やってみよう。 06:12.650 --> 06:13.520 さあ、 始めよう。 06:14.810 --> 06:17.630 そして得られた答えがこれだ。 06:17.810 --> 06:27.770 ええと、 それで......もう一度、 やり直す必要がありそうなんだ。 06:27.770 --> 06:28.100 そんな。 06:28.100 --> 06:28.430 さあ、 始めよう。 06:28.460 --> 06:29.030 さあ、 始めよう。 06:29.030 --> 06:29.930 申し訳ない。 06:29.930 --> 06:35.360 これはGpgのバージョンだったので、 GPTは0だった。 2121. 06:35.540 --> 06:38.510 そして、 ここで私は先を急いだ。 06:38.510 --> 06:39.470 だから混乱しているんだ。 06:39.470 --> 06:40.040 申し訳ない。 06:40.040 --> 06:41.720 もう一度上に戻ろう。 06:42.260 --> 06:55.410 ええと、 これはメモしておかないといけないね。 2131 は GPT バージョンで、 クロードのバージョンは 0 です。 2121. 06:55.410 --> 06:58.500 だからクロードはGPTより少し速かった。 06:58.530 --> 07:02.340 でも、 これは誤差の範囲内なんだ。 07:02.340 --> 07:05.640 これを何度か実行すれば、 少なくともその程度の差は出るだろう。 07:05.640 --> 07:12.990 つまり、 基本的には両者とも、 マシン上で実行したときに同じスピードで動くコードを作ったということだ。 07:12.990 --> 07:19.140 私は、 実際にコンパイルされたマシンコードはどちらの場合も同じだと予想している。 07:19.290 --> 07:23.040 うーん、 かなり単純な問題だから、 そうなるんだろうね。 07:23.190 --> 07:33.540 GPT4もクロードも、 パイを生成するパイソンコードに最適化されたソリューションで、 それを打ち砕いたんだ。 07:33.870 --> 07:42.120 でも、 GPT4はクロードよりもう少しヒントが必要だったけど、 休憩を挟んで2人ともたどり着いた。 07:42.120 --> 07:48.300 もっと難しい問題、 もっと難しいコードに移行して、 彼らがどのように最適化できるかを見ていくつもりだ。 07:48.300 --> 07:50.220 また次のビデオで会おう。