CUDA—使用GPU暴力激活成功教程密码

CUDA—使用GPU暴力激活成功教程密码GPU支持大规模的并行加速运算,胜在量上,CPU处理大量的并行运算显得力不从心,它是胜在逻辑上。利用显卡加速的应用越来越多,但如果说GPU即将或最终将替代CPU还有点言过其实,二者最终将优势互补,各尽所能。使用显卡的无脑并行运算激活成功教程密码是一个不错的选择。这里选择一种简单的情况,限定密码是6位纯数字,并且不限定输入次数,这种情况下可以使用GPU暴力激活成功教程,当然…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

GPU支持大规模的并行加速运算,胜在量上,CPU处理大量的并行运算显得力不从心,它是胜在逻辑上。利用显卡加速的应用越来越多,但如果说GPU即将或最终将替代CPU还有点言过其实,二者最终将优势互补,各尽所能。


使用显卡的无脑并行运算激活成功教程密码是一个不错的选择。这里选择一种简单的情况,限定密码是6位纯数字,并且不限定输入次数,这种 情况下可以使用GPU暴力激活成功教程,当然仅供娱乐,并无任何实际的应用价值。


#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include <iostream>
#include "time.h"

using namespace std;

//密码激活成功教程入口函数
cudaError_t BreakWithCuda(const int *userKeyWord, int *keyWordByGPU);

//密码激活成功教程核函数
__global__ void BreakPasswordKernel(const int *userKeyWord, int *keyWordByGPU)
{
	//获取线程的索引号
	int blockId = blockIdx.y*gridDim.x + blockIdx.x;
	int threadID = blockId*blockDim.x + threadIdx.x;
	if (threadID == *userKeyWord)
	{
		*keyWordByGPU = threadID;
	}
}

int main()
{
	int userWord = 0;  //用户输入的密码
	int keyWordByGPU = 0;  //接收GPU激活成功教程的密码
	cout << "请输入你设置的密码(6位阿拉伯数字):" << endl;
	cin >> userWord;
	const int keyWord = userWord;
	getchar();

	//计算耗时变量
	clock_t startTime, endTime;
	startTime = clock();

	cudaError_t cudaStatus = BreakWithCuda(&keyWord, &keyWordByGPU);
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "BreakWithCuda failed!");
		return 1;
	}

	//重置GPU设备
	cudaStatus = cudaDeviceReset();
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "cudaDeviceReset failed!");
		return 1;
	}

	cout << "\n经GPU运算激活成功教程的用户密码是:" << endl;

	//输出激活成功教程的密码,不足6位前补0
	cout.fill('0');
	cout.width(6);  //总长度6位
	cout << keyWordByGPU << endl << endl;

	endTime = clock();  //激活成功教程耗时,以秒位单位
	float spendTime = (float)(endTime - startTime) / CLOCKS_PER_SEC;
	cout << "耗时:\n" << spendTime << "seconds" << endl;

	getchar();
	return 0;
}

cudaError_t BreakWithCuda(const int *userKeyword, int *keyWordByGPU)
{
	int *dev_userKeyWord = 0;
	int *dev_keyWordByGPU = 0;
	cudaError_t cudaStatus;

	//选择运行设备
	cudaStatus = cudaSetDevice(0);
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "cudaSetDevice failed!  Do you have a CUDA-capable GPU installed?");
		goto Error;
	}

	// 在GUP上分配显存
	cudaStatus = cudaMalloc((void**)&dev_userKeyWord, sizeof(int));
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "cudaMalloc failed!");
		goto Error;
	}
	cudaStatus = cudaMalloc((void**)&dev_keyWordByGPU, sizeof(int));
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "cudaMalloc failed!");
		goto Error;
	}

	// 把用户输入的密码从主机复制到设备显存上
	cudaStatus = cudaMemcpy(dev_userKeyWord, userKeyword, sizeof(int), cudaMemcpyHostToDevice);
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "cudaMemcpy failed!");
		goto Error;
	}

	dim3 grid(100, 100); //创建一个包含100*100个线程块的Grid    
	BreakPasswordKernel << <grid, 100 >> > (dev_userKeyWord, dev_keyWordByGPU);

	// GPU运行错误检查
	cudaStatus = cudaGetLastError();
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "BreakPasswordKernel launch failed: %s\n", cudaGetErrorString(cudaStatus));
		goto Error;
	}

	// cudaDeviceSynchronize waits for the kernel to finish, and returns
	// any errors encountered during the launch.
	cudaStatus = cudaDeviceSynchronize();
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "cudaDeviceSynchronize returned error code %d after launching BreakPasswordKernel!\n", cudaStatus);
		goto Error;
	}

	// 把激活成功教程的密码从GPU拷贝到CPU
	cudaStatus = cudaMemcpy(keyWordByGPU, dev_keyWordByGPU, sizeof(int), cudaMemcpyDeviceToHost);
	if (cudaStatus != cudaSuccess) {
		fprintf(stderr, "cudaMemcpy failed!");
		goto Error;
	}

Error:
	cudaFree(dev_keyWordByGPU);
	cudaFree(dev_userKeyWord);

	return cudaStatus;
}


运行后提示用户输入6位密码,第一位可以为0,如果检测到最终激活成功教程的密码不足6位,则可以判断用户在第一位输入的数字是0,所以自动在密码前补上0,补足6位


输入的密码第一位或之后若干位为0的情况:

CUDA—使用GPU暴力激活成功教程密码


正常情况:

CUDA—使用GPU暴力激活成功教程密码


转载于:https://www.cnblogs.com/mtcnn/p/9411872.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/172196.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 获取 Chromium 源代码以及环境配置

    一、获取代码a) 不下载代码,直接浏览,到这里:http://src.chromium.org/viewvc/chrome/ 或者这里:http://code.google.co

    2021年12月25日
    40
  • MAC OS X 系统怎么样?

    朝鲜的IT应用状况并不为外界所熟知,过去媒体纷纷报道,朝鲜已故领导人金正日酷爱苹果电子产品,而最近一份调查报告显示,在朝鲜个人电脑操作系统市场,苹果MACOSX系统位居第一名,遥遥领先微软

    2021年12月23日
    42
  • CubieBoard 简单入门

    CubieBoard 简单入门大约一个月之前折腾的部分记录,当时没有完全完成,就着手其他事情了,这是存在LiveWriter中的草稿,先发出来吧,后来花了一段时间移植Qt,一直遇到了点问题,并没有完全跑通,后续估计也没有时间再继

    2022年7月4日
    22
  • Java判断关系运算

    Java判断关系运算

    2021年9月1日
    61
  • discuz二次开发笔记

    discuz二次开发笔记禁止游客访问后,QQ互联登录失效在connect.php添加一行define(‘CURSCRIPT’,’member’);(自己翻源码看的,不保证不会造成其它问题,请自行测试)目录介绍代码 upload/(上线只要copy这个文件夹就可以了)模板文件 upload/template/ (要修改模板样式都在这里,改完要管理员去“工具”->”更新缓存”

    2022年5月19日
    41
  • classcastingexception_c++链接错误

    classcastingexception_c++链接错误转载自:http://www.blogjava.net/Sunday/archive/2007/08/18/137860.html现在java编程中经常碰到ClassCastException错误,ClassCastException是JVM在检测到两个类型间的转换不兼容时引发的运行时异常。此类错误通常会终止用户请求。本模式试图为您提供了解和排除ClassCastExcept

    2022年9月9日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号