我想生成一个随机数,并使用带有this基本代码的SHA256
在我的GPU上使用OpenCL
进行哈希处理(而不是哈希那些预先给定的纯文本,它哈希随机数)
我得到了所有的哈希工作在我的GPU上,但有一个问题:
使用OpenCL时,每秒的哈希量是否会降低?
是的,你没听错,目前只使用CPU比使用GPU更快。
我的GPU仅在~10%
运行,而我的CPU运行在~100%
我的问题是:这怎么可能,更重要的是,我该如何解决?
这是我用于生成Pseudo-Random Number
的代码(在两次运行之间根本没有变化):
long Miner::Rand() {
std::mt19937 rng;
// initialize the random number generator with time-dependent seed
uint64_t timeSeed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
std::seed_seq ss{ uint32_t(timeSeed & 0xffffffff), uint32_t(timeSeed >> 32) };
rng.seed(ss);
// initialize a uniform distribution between 0 and 1
std::uniform_real_distribution<double> unif(0, 1);
double rnd = unif(rng);
return floor(99999999 * rnd);
}
以下是为我计算哈希值的代码:
void Miner::ticker() {
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
while (true) {
Sleep(1000);
HashesPerSecond = hashes;
hashes = 0;
PrintInfo();
}
}
从这里调用:
void Miner::Start() {
std::chrono::system_clock::time_point today = std::chrono::system_clock::now();
startTime = std::chrono::system_clock::to_time_t(today);
std::thread tickT(&Miner::ticker, this);
PostHit();
GetAPIBalance();
while (true) {
std::thread t[32]; //max 32
hashFound = false;
if (RequestNewBlock()) {
for (int i = 0; i < numThreads; ++i) {
t[i] = std::thread(&Miner::JSEMine, this);
}
for (auto& th : t)
if (th.joinable())
th.join();
}
}
}
反过来这样被称为:
Miner m(threads);
m.Start();
答案 0 :(得分:4)
CPU具有比GPU更好的延迟特性。也就是说,CPU可以采用一种操作方式,比GPU可以快得多WAAAAYYYY。这甚至没有考虑到CPU - &gt;主RAM - &gt; PCIe总线 - &gt; GDDR5“全球”GPU - &gt; GPU寄存器 - &gt; “全球GPU” - &gt; PCIe总线返回 - &gt;主RAM - &gt; CPU往返时间(我在这里跳过几步,比如固定和L1缓存)
GPU具有比CPU更好的带宽特性(假设数据集可以适合GPU有限的本地内存)。 GPU可以比CPU执行数十亿次的SHA256哈希值更快地执行数十亿的SHA256哈希值。
比特币需要数百万,数十亿甚至数万亿的哈希才能达到有竞争力的哈希率。此外,计算可以在GPU上进行而无需与CPU进行太多协作(无需通过PCIe进行缓慢的往返)。
这是一个基本设计问题。 CPU旨在最大限度地减少延迟,但GPU旨在最大化带宽。看起来您的问题是延迟限制的(您计算的SHA256哈希值太少,无法使GPU有效)。 32是......我们谈论的规模真的很小。
AMD GCN架构甚至没有全速运行,直到你有至少64个工作项目,并且可以说你真的需要256个工作项来最大化44个计算单位中的一个......比如R9 290x
我想我想说的是:再次尝试使用11264个工作项(或更多),这是GPU设计使用的工作项数。不是32.我从每计算单位R9 290x * 4矢量单位的44个计算单位得到这个数字*每个矢量单位64个工作项目。