- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在并行化方面遇到了很大的问题 BLAKE使用 OMP。他们在规范中建议可以并行化“列步”和“对角线步”。我尝试这样做,但结果与我预期的相反(比单线程慢 10 倍)。我需要更多有经验的 OMP 用户的帮助,因为现在我不知道如何并行化这个循环:(
更新:
我知道 BLAKE 的作者发布了 BLAKE2,它是 BLAKE 的改进(更快)版本,但它的实现(树哈希)与 BLAKE 不同,这对我来说很难理解。我的任务是比较使用 OMP 的单线程和多线程实现。因此,我尝试在我理解的实现上执行此操作。我不是 OMP 专家,我想以最简单的方式使 BLAKE 成为多线程。即使性能可能不会更好,我也必须使用 OMP 进行正确的实现。 (对不起我的英语,我希望你能理解我)这是我的代码的一部分:
#pragma omp parallel shared(n)
{
for(round=0; round<n; ++round)
{
/* column step, I want to run this 4 G32 functions in parallel, but don't know,
that is proper approach to this problem */
#pragma omp critical
G32( 0, 4, 8,12, 0);
#pragma omp critical
G32( 1, 5, 9,13, 1);
#pragma omp critical
G32( 2, 6,10,14, 2);
#pragma omp critical
G32( 3, 7,11,15, 3);
/* diagonal step, and same here */
#pragma omp critical
G32( 0, 5,10,15, 4);
#pragma omp critical
G32( 1, 6,11,12, 5);
#pragma omp critical
G32( 2, 7, 8,13, 6);
#pragma omp critical
G32( 3, 4, 9,14, 7);
}
}
这是 G32 函数:
#define G32(a,b,c,d,i)\
do { \
v[a] = ADD32(v[a],v[b])+XOR32(m[sigma[round][2*i]], c32[sigma[round][2*i+1]]);\
v[d] = ROT32(XOR32(v[d],v[a]),16);\
v[c] = ADD32(v[c],v[d]);\
v[b] = ROT32(XOR32(v[b],v[c]),12);\
v[a] = ADD32(v[a],v[b])+XOR32(m[sigma[round][2*i+1]], c32[sigma[round][2*i]]);\
v[d] = ROT32(XOR32(v[d],v[a]), 8);\
v[c] = ADD32(v[c],v[d]);\
v[b] = ROT32(XOR32(v[b],v[c]), 7);\
} while (0)
最佳答案
我认为他们想到的那种并行化是在现代 CPU 下利用 SIMD 指令。在这种情况下,OMP 式并行化的问题有两个:
关于c - 并行化 BLAKE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14261171/
我在并行化方面遇到了很大的问题 BLAKE使用 OMP。他们在规范中建议可以并行化“列步”和“对角线步”。我尝试这样做,但结果与我预期的相反(比单线程慢 10 倍)。我需要更多有经验的 OMP 用户的
是否有人知道或有关于 Blake-512 hashing algorithm 的开放实现的示例?为 JavaScript 编写和优化? 最佳答案 我最近写了一个这个算法的JS实现。源代码可在此处获得:
我正在尝试使用 C 中的 python ctypes 制作简单的库 blake 哈希函数包装器。但只是为了首先测试我的简单 C 辅助函数是否能正常工作,我编写了小的 python 脚本 blake 哈
我是一名优秀的程序员,十分优秀!