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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 不管怎么选择,都会有遗憾「建议收藏」

    到底什么样的选择才是最好的,每一种选择都会有遗憾!最近有点想家,虽然在这个城市安了新家。那个小的城市–延安,和这个大的城市—长沙,两种感觉,不同的生活体验。现在都十一月了,要是在延安,那么现在已经是深秋,开始变得萧条,不想夏天那么生机盎然,而现在这个城市秋天和夏天在外观上看不出什么变化,只是现在的温度比夏天舒服了很多,不冷 不热。城市的车水马龙,霓虹灯,夜晚还是有很多的喧嚣,也看不到漫天的繁星。

  • 2019年最新PHP面试题

    2019年最新PHP面试题

  • Laravel5中使用阿里大于(鱼)发送短信验证码

    Laravel5中使用阿里大于(鱼)发送短信验证码

    2021年10月13日
  • TRILL

    TRILLTRILL  TRILL(TransparentInterconnectionofLotsofLinks)多链接半透明互联(TRILL)  在交换方面,IETF正在致力于多链接半透明互联(TRILL)标准的研究。IETF打算用该标准克服生成树协议(STP)在规模上和拓扑重聚方面存在的不足。在路由方面,IETF正在致力于制订位置标识与身…

    2022年10月22日
  • createthread dll「建议收藏」

    createthread dll「建议收藏」CreateThreadapi内部会调用waitforsingleobject等待互斥量对象。目的是同步顺序执行dll初始化。当该方法创建完线程内核对象和线程盏后,该函数内部会调用进程映射中所有dll的dllmain方法进行初始化。因此在自己写的dll中不要创建线程并使用waitforsingleobject等待线程创建。因为如果A线程创建的时候调用了dll中的dllmain函数,并且该

  • ubunru 7.10 source.list 标准的官方的

    ubunru 7.10 source.list 标准的官方的

发表回复

您的电子邮箱地址不会被公开。

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