
前回
量子コンピュータのざっくりとした説明も終わったところで、
いよいよなんちゃって量子コンピュータの作成です!!
さてどのように作成するかですが、前回の説明を踏まえまして
要するに普通のコンピュータは1から順に計算しているが、
量子コンピュータは量子ビットによって、同時に多数の計算を並列に実施していると見えなくもない!
(専門家がいたら突っ込まれそうですが)
後はどのような計算を使って、疑似的な量子コンピュータを感じられるかですが、
大分前にブログで記載した、素数を計算するBashスクリプトを使いたいと思います。
素数の計算のブログ①
素数の計算のブログ②
この計算をあたらめて、1,000,000まで実施してみます。
スクリプトが以下。
------------------------------------------------
#!/bin/bash
for num in {2..1000000}
do
is_prime=1
for ((i=2; i*i<=num; i++))
do
if ((num % i == 0))
then
is_prime=0
break
fi
done
if ((is_prime))
then
echo $num
fi
done
------------------------------------------------
実際の計算ですが、3分25秒かかりますね。
前回のブログの時は適当な検証のVPSサーバーを利用していたので、同じスクリプトでも15分かかってますね。
ちなみに今回、実施したのは物理サーバーでスペックは以下です。
CPU:Intel Xeon Silver 4309Y(16スレッド)
メモリ:16GB
サーバースペックによって、10分以上早くなってますね。
同じスクリプトでも、実行環境でこれだけ差が出るのは面白いところです。
※少しはインフラエンジニアらしくしないとね。
サーバースペックはともかく、スクリプトが1から順に計算しているので、調べる数の範囲が大きくなると、処理時間もどんどん増えていきます。
これを1から計算するのではなく、数字を分割して、同時並行で計算結果を出すことで、計算結果がとても短くなるはず。
そうなんちゃって量子コンピュータです!
はい。ただの並列やんけ、とか、どこが量子コンピュータやねん、と言った抗議は受け付けません。
だって、普通のコンピュータを使う以上しょうがないじゃないか…。
だから、なんちゃってって付けてるじゃないか…。
ということで、1,000,000の数字を素数の分布に従って、以下のように分割します。
2~78,000 A
78,001~156,500 B
156,501~238,500 C
238,501~322,000 D
322,001~408,000 E
408,001~496,500 F
496,501~588,000 G
588,001~682,500 H
682,501~780,000 I
780,001~1,000,000 J
先ほどのスクリプトを上記の数字範囲に合わせてA.sh~J.shまで分割作成します。
その分割したスクリプトをまとめて実施し、ファイル出力をまとめるスクリプトを作成します。
------------------------------------------------
#!/bin/bash
OUTPUT_FILE="prime_all.txt"
# 各スクリプトを並列実行
./A.sh > prime_A.txt &
./B.sh > prime_B.txt &
./C.sh > prime_C.txt &
./D.sh > prime_D.txt &
./E.sh > prime_E.txt &
./F.sh > prime_F.txt &
./G.sh > prime_G.txt &
./H.sh > prime_H.txt &
./I.sh > prime_I.txt &
./J.sh > prime_J.txt &
# 全部終わるまで待つ
wait
# 結果を結合
cat prime_A.txt prime_B.txt prime_C.txt prime_D.txt prime_E.txt \
prime_F.txt prime_G.txt prime_H.txt prime_I.txt prime_J.txt \
> "$OUTPUT_FILE"
------------------------------------------------
さて、ということで、結果ですが…。
また、次回。なんちゃって量子コンピュータ完結編で。

