在 SSE2 CPU 上为 0.3.6 并行计算 4 个哈希

中本聪SN-1912

在 MinGW GCC 4.4.1 和 4.5.0 上,我都是用 test.cpp 能跑通,但被 BitcoinMiner 调用时就 SIGSEGV。所以现在看来不是 GCC 版本的问题,而是别的什么,可能只是看栈是否碰巧对齐了。

On both MinGW GCC 4.4.1 and 4.5.0 I have it working with test.cpp but SIGSEGV when called by BitcoinMiner. So now it doesn't look like it's the version of GCC, it's something else, maybe just the luck of how the stack is aligned.

在 Ubuntu 32 位的 GCC 4.3.3 上我这边运行正常。

I have it working fine on GCC 4.3.3 on Ubuntu 32-bit.

我找到了 MinGW 4.5.0 上 Crypto++ 的问题。这是对应的补丁:

I found the problem with Crypto++ on MinGW 4.5.0. Here's the patch for that:

--- \old\sha.cpp Mon Jul 26 13:31:11 2010
+++
ew\sha.cpp Sat Aug 14 20:21:08 2010
@@ -336,7 +336,7 @@
  ROUND(14, 0, eax, ecx, edi, edx)
  ROUND(15, 0, ecx, eax, edx, edi)

- ASL(1)
+    ASL(label1)   // Bitcoin: fix for MinGW GCC 4.5
  AS2(add WORD_REG(si), 4*16)
  ROUND(0, 1, eax, ecx, edi, edx)
  ROUND(1, 1, ecx, eax, edx, edi)
@@ -355,7 +355,7 @@
  ROUND(14, 1, eax, ecx, edi, edx)
  ROUND(15, 1, ecx, eax, edx, edi)
  AS2( cmp  WORD_REG(si), K_END)
- ASJ( jne, 1, b)
+    ASJ(    jne,    label1,  )   // Bitcoin: fix for MinGW GCC 4.5

  AS2( mov  WORD_REG(dx), DATA_SAVE)
  AS2( add  WORD_REG(dx), 64)
上下文
译文校对、修订与纠错

当前版本尚未建立逐条校对状态记录。来源核验、历史审校与当前译文校对是不同事项。

查看历史审校与代表修订 →

译文内容版本:b3460f002877。用于比对文本,不代表校对等级或更新时间。

准备纠错说明

请填写对应原文、现译文、建议译法和理由。复制后通过你联系本站作者的渠道提交;此处不会自动发送。

来源
英文原标题

4 hashes parallel on SSE2 CPUs for 0.3.6

Bitcointalk · 原始链接 ↗ 记录编号 SN-1912

阅读字号

选择适合你的字号,之后阅读会继续使用。