primesieve - تولید
اعداد اول
primesieve [START] STOP
[OPTION]...
تولید
اعداد اول
و/یا
چندتاییهای
اول (k-tuplets) درون
بازهٔ [START, STOP] (<
2^64) با
استفاده از
غربال
اراتستن
بخشبندیشده
(segmented sieve of Eratosthenes). ابزار
primesieve شامل
چندین
بهینهسازی
و الحاقیه
به غربال
اراتستن
است که
کارایی را
به طور
چشمگیری
افزایش
میدهند:
مضارب
اعداد اول
کوچک از پیش
غربال
میشوند،
از تجزیهٔ
چرخشی (wheel factorization)
برای
نادیده
گرفتن
مضارب با
عوامل اول
کوچک
استفاده
میکند و
الگوریتم
غربال سطلی
(bucket sieve) را به کار
میبرد که
کارایی
حافظهٔ
نهان (cache) را
هنگام
غربال
مقادیر > 2^32
بهبود
میبخشد.
همچنین primesieve
چندنخی (multi-threaded)
است؛ این
ابزار به
طور
پیشفرض از
تمام
هستههای
پردازندهٔ
موجود برای
شمارش
اعداد اول و
یافتن n-امین
عدد اول
استفاده
میکند.
غربال
اراتستن
بخشبندیشده
دارای
پیچیدگی
زمانی O(n log log n)
عملیات
بوده و از O(n^(1/2))
بیت حافظه
استفاده
میکند.
بهطور
دقیقتر، primesieve
به ازای هر
عدد اول در
حال غربال،
۸ بایت مصرف
میکند؛
بنابراین
حافظهٔ
مصرفی آن
تقریباً با
رابطهٔ PrimePi(n^(1/2)) * 8
بایت (به
ازای هر نخ)
قابل تقریب
است.
-c[NUM+], --count[=NUM+]
شمارش
اعداد اول
و/یا
چندتاییهای
اول، 1 <= NUM <= 6.
شمارش
اعداد اول: -c
یا --count،
شمارش
اعداد اول
دوقلو: -c2 یا
--count=2، شمارش
اعداد اول
سهگانه: -c3
یا --count=3، و
غیره.
همچنین
میتوانید
اعداد اول و
چندتاییهای
اول را
همزمان
بشمارید؛
برای نمونه
-c123 اعداد
اول، اول
دوقلو و اول
سهگانه را
میشمارد.
--cpu-info
چاپ
اطلاعات
پردازنده:
نام
پردازنده،
بسامد،
تعداد
هستهها،
اندازهٔ
حافظههای
نهان و
غیره.
-d, --dist=DIST
غربال
بازهٔ [START, START +
DIST].
-h, --help
نمایش
این منوی
راهنما.
-n, --nth-prime
یافتن
n-امین عدد
اول؛ برای
نمونه 100 -n
صدمین عدد
اول را
مییابد.
اگر دو عدد N
START مشخص
شوند، n-امین
عدد اول > START
را پیدا
میکند؛
برای نمونه 2
100 -n دومین
عدد اول > 100 را
مییابد.
--no-status
غیرفعال
کردن نمایش
وضعیت
پیشرفت.
-p[NUM], --print[=NUM]
چاپ
اعداد اول
یا
چندتاییهای
اول، 1 <= NUM <= 6.
چاپ اعداد
اول: -p، چاپ
اعداد اول
دوقلو: -p2،
چاپ اعداد
اول
سهگانه: -p3،
و غیره.
-q, --quiet
حالت
بیصدا،
خروجی
کمتری چاپ
میکند.
-R, --RiemannR
تقریب PrimePi(x)
با استفاده
از تابع R
ریمان: R(x).
--RiemannR-inverse
تقریب
n-امین عدد
اول با
استفاده از
معکوس تابع R
ریمان: R^-1(x).
-s, --size=SIZE
تنظیم
اندازهٔ
آرایهٔ
غربال بر
حسب KiB، به
طوری که 16 <= SIZE <=
8192 باشد. به
طور
پیشفرض primesieve
از
اندازهای
استفاده
میکند که
با اندازهٔ
حافظهٔ
نهان L1
پردازنده
(به ازای هر
هسته)
همخوانی
داشته باشد
یا کمی
کوچکتر از
اندازهٔ
حافظهٔ
نهان L2
پردازنده
باشد. این
تنظیم
تأثیر
چشمگیری بر
کارایی
دارد؛ در
پردازندههای
نامتعارف،
گاهی primesieve در
شناسایی
اندازهٔ
حافظهٔ
نهان
پردازنده
ناموفق است
که معمولاً
افت سرعت
شدیدی
ایجاد
میکند. در
این حالت
میتوانید
با تنظیم
دستی
اندازهٔ
غربال به
میزان
اندازهٔ
حافظهٔ
نهان L1 یا L2
پردازنده
(به ازای هر
هسته)،
کارایی را
بهطور
قابل توجهی
بهبود
بخشید.
-S, --stress-test[=MODE]
اجرای
آزمون
پایداری و
فشار (stress test).
مقدار MODE
میتواند CPU
(پیشفرض) یا
RAM باشد. حالت CPU
حافظهٔ کمی
مصرف
میکند (< 5 MiB به
ازای هر نخ) و
بیشترین
بار را بر
پردازنده
وارد
میکند. در
مقابل،
حالت RAM بسیار
بیشتر از
حالت CPU حافظه
مصرف
میکند (هر
نخ حدود 1.16 GiB)،
اما دمای
پردازنده
معمولاً به
اندازهٔ
حالت CPU بالا
نخواهد رفت.
آزمون فشار
تا زمانی که
یک خطای
محاسباتی
رخ دهد (به
دلیل نقص
سختافزاری)
یا مهلت
زمانی به
پایان
برسد، به
کار خود
ادامه
میدهد.
مهلت زمانی
پیشفرض ۲۴
ساعت است که
میتوان آن
را با
گزینهٔ --timeout=SECS
تغییر داد.
آزمون فشار
به طور
پیشفرض به
تعداد
هستههای
پردازنده
از نخها
استفاده
میکند؛
تعداد
نخها با
استفاده از
گزینهٔ --threads=NUM
قابل تغییر
است.
--test
اجرای
آزمونهای
درستیسنجی
گوناگون (< 1
دقیقه).
-t, --threads=NUM
تنظیم
تعداد
نخها، 1 <= NUM <=
تعداد
هستههای
پردازنده.
به طور
پیشفرض primesieve
از تمام
هستههای
پردازندهٔ
در دسترس
برای شمارش
اعداد اول و
یافتن n-امین
عدد اول
استفاده
میکند.
--time
چاپ زمان
سپریشده
بر حسب
ثانیه.
--timeout=SECS
تنظیم
مهلت زمانی
آزمون فشار
بر حسب
ثانیه.
واحدهای
زمانی برای
ثانیه،
دقیقه،
ساعت، روز و
سال با
پسوندهای s،
m، h، d یا y نیز
پشتیبانی
میشوند؛
برای نمونه
--timeout 10m مهلت
زمانی را
روی ۱۰
دقیقه
تنظیم
میکند.
مهلت
پیشفرض
آزمون فشار
۲۴ ساعت
است.
-v, --version
چاپ
نگارش و
اطلاعات
مجوز.
primesieve 1000
شمارش
اعداد اول <=
1000.
primesieve 1e6 --print
چاپ
اعداد اول <=
10^6.
primesieve 1e6 --print > primes.txt
ذخیرهٔ
اعداد اول <= 10^6
در یک فایل
متنی.
primesieve 2^32 --print=2
چاپ
اعداد اول
دوقلو <= 2^32.
primesieve 1e16 --dist=1e10 --threads=1
شمارش
اعداد اول
درون بازهٔ
[10^16, 10^16 + 10^10] با
استفاده از
تنها یک نخ.
Kim Walisch <kim.walisch@gmail.com>