C Python на C++ с использованием CUDA

Техническое задание (ТЗ) на переписывание программы с Python на C++ с использованием CUDA
1. Общая информация
Цель данного ТЗ — переписать существующую реализацию программы на Python для генерации и проверки криптографических ключей с использованием Bloom-фильтров на языке C++ с добавлением поддержки параллельных вычислений на GPU с помощью технологии CUDA. Основная задача программы заключается в генерации большого количества приватных ключей и их проверке на совпадение с известными криптовалютными адресами (BTC и ALT).

2. Задачи и функциональные требования
2.1. Переписать код на C++
Полностью переписать текущую Python-реализацию на C++.
Обеспечить функциональное соответствие между Python-версией и новой C++-версией.
2.2. Добавление CUDA для использования GPU
Реализовать параллельные вычисления с использованием CUDA для генерации приватных ключей и их проверки по Bloom-фильтрам.
Ускорить генерацию криптографических ключей и хэш-функций за счет вычислительных мощностей GPU.
2.3. Ключевые функции программы:
SecureRandom: Создать класс для генерации случайных чисел на основе seed (посевного значения) с использованием криптографически стойкого генератора случайных чисел.
Генерация приватных ключей: Реализовать функционал генерации приватных ключей в шестнадцатеричной форме.
Генерация адресов P2PKH: Реализовать функцию создания P2PKH-адресов (сжатых публичных ключей) с использованием алгоритмов SHA-256 и RIPEMD-160.
Поддержка Bloom-фильтров: Загрузка и использование Bloom-фильтров для проверки сгенерированных публичных ключей.
Параллельная генерация и проверка ключей:
Реализовать генерацию приватных ключей и их проверку с использованием нескольких потоков CPU (с помощью стандартной многопоточности C++).
Добавить поддержку CUDA для многопоточной генерации ключей на GPU.
Сохранение результатов: При нахождении совпадений сохранять приватные ключи и соответствующие публичные адреса в файл.
2.4. Параллельные вычисления на GPU (CUDA)
Использовать CUDA для ускорения:
Генерации приватных ключей.
Выполнения хэширования (SHA-256 и RIPEMD-160).
Проверки ключей с использованием Bloom-фильтров.
Обеспечить распределение задач на GPU таким образом, чтобы генерация и проверка адресов выполнялась максимально эффективно на графическом процессоре.
2.5. Оптимизация и производительность
Оптимизировать код с учетом архитектуры GPU для минимизации времени выполнения программы.
Использовать параллельные блоки и потоки CUDA для равномерной загрузки вычислительных блоков GPU.
3. Требования к архитектуре
Модульная структура:

Код должен быть разбит на отдельные модули для легкости сопровождения и тестирования:
Модуль генерации случайных чисел.
Модуль генерации приватных ключей.
Модуль хэширования и генерации адресов.
Модуль работы с Bloom-фильтрами.
Модуль параллельных вычислений (CUDA).
Поддержка многопоточности на CPU и GPU:

Генерация ключей должна поддерживать многопоточность как на CPU (с использованием стандартных библиотек C++ для многопоточности), так и на GPU (с использованием CUDA).
4. Требования к производительности (с поддержкой multi-GPU)
Программа должна поддерживать параллельные вычисления на минимум 8 графических картах NVIDIA GeForce RTX 4090 для обеспечения максимальной производительности при генерации приватных ключей и проверке адресов через Bloom-фильтры.
5. Требования к среде разработки
Язык программирования: C++ (стандарт C++17 и выше).
Для CUDA: минимальная версия CUDA 10.0.
Использование библиотек для криптографии: возможно использование готовых библиотек для работы с SHA-256 и RIPEMD-160 (например, OpenSSL или встроенные CUDA-функции).
Поддержка многопоточности: библиотека std::thread для многопоточности на CPU.
Компилятор: GCC или Clang для CPU; NVCC для компиляции CUDA-кода.
Операционная система: Linux или Windows.
6. Требования к вводу и выводу
Ввод:
Seed (посевное значение) для генерации приватных ключей.
Путь к Bloom-фильтрам для BTC и ALT.
Вывод:
Сохранение найденных приватных ключей и соответствующих адресов в файл.
Логирование процесса генерации (количество сгенерированных ключей, время выполнения, и т.д.).
7. Тестирование и валидация
Провести тестирование всех модулей, включая:
Тестирование генерации ключей на GPU и CPU.
Проверку правильности хэширования и генерации адресов.
Валидацию результатов проверки через Bloom-фильтры.
Обеспечить, чтобы результаты программы на C++ были идентичны результатам программы на Python.
8. Документация
Код должен быть снабжен комментариями для облегчения понимания.
Предоставить инструкцию по сборке проекта и его запуску.
Объяснить, как использовать CUDA для ускорения вычислений в программе.
9. Оценка сроков и этапы выполнения
Этап 1: Переписать Python-код на C++ с поддержкой многопоточности на CPU — 2 недели.
Этап 2: Реализовать поддержку CUDA и оптимизировать программу для работы с GPU — 3 недели.
Этап 3: Провести тестирование и отладку, устранить ошибки — 1 неделя.
Итого: 6 недель на выполнение задания.
10. Требования к квалификации исполнителя
Опыт программирования на C++.
Опыт разработки приложений с использованием CUDA.
Знание криптографических алгоритмов (SHA-256, RIPEMD-160).
Знание работы с Bloom-фильтрами.
Опыт работы с многопоточными приложениями.
11. Примерный результат
Переписанная на C++ программа с поддержкой многопоточности и ускорением на GPU с помощью CUDA, которая выполняет генерацию криптографических ключей, хэширование и проверку на совпадения через Bloom-фильтры с высокой производительностью.

Читайте на 123ru.net