为什么英特尔线程构建模块(TBB)parallel_for有如此大的开销?根据第3.2.2 自动分块在Tutorial.pdf其周围半毫秒.这是教程中的一个重点:
注意:对于parallel_for,循环通常需要至少一百万个时钟周期才能提高其性能.例如,在2 GHz处理器上占用至少500微秒的环路可能会受益于parallel_for.
从我到目前为止所读到的内容,TBB在内部使用了线程池(工作线程池)模式,它通过最初只生成工作线程(这需要数百微秒)来防止这种不良开销.
那么花时间呢?使用互斥锁进行数据同步并不是那么慢吗?此外,TBB不使用无锁数据结构进行同步吗?
我已经~/alt在Ubuntu 12.04上使用GCC-4.6成功构建并安装(在前缀下)LLVM-Clang主干(2012年4月23日),并使用此Clang-build成功使用libc ++.当我想使用它时,我必须提供两种-lc++,-libstdc++如下所示
/home/per/alt/bin/clang -x c++ -I/home/per/alt/include/v1 -L/home/per/alt/lib -std=gnu++0x -g -Wall ~/f.cpp -lm -lc++ -lstdc++ -lpthread -o f
Run Code Online (Sandbox Code Playgroud)
编译f.cpp包含
#include <iostream>
using std::cout;
using std::endl;
int main(int argc, const char * argv[]) {
cout << "sxx" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我省略,-lstdc++我会收到链接错误
/home/per/alt/include/v1/ostream:989: error: undefined reference to '__cxa_begin_catch'
/home/per/alt/include/v1/ostream:993: error: undefined reference to '__cxa_end_catch'
/home/per/alt/include/v1/ostream:993: error: undefined reference to '__cxa_end_catch'
/tmp/f-4l9mgl.o(.eh_frame+0xd3): error: undefined reference to '__gxx_personality_v0'
clang: error: linker command …Run Code Online (Sandbox Code Playgroud) 是否有人编写了类似于Boost.Filesystem的D库,提供了可以进行文件系统目录树遍历的迭代器/范围?
Python源文件具有使用该模式既可以作为模块也可以作为独立程序(工具)的良好属性
if __name__ == "__main__":
Run Code Online (Sandbox Code Playgroud)
是否有可能为D模块源文件获得相同的行为?
我正在尝试实现经典的高阶范围zipWith,如下所示
import std.traits: allSatisfy;
import std.range: isInputRange;
auto zipWith(fun, Ranges...)(Ranges ranges) if (Ranges.length >= 2 && allSatisfy!(isInputRange, Ranges))
{
import std.range: zip;
return zip(ranges).map!fun;
}
Run Code Online (Sandbox Code Playgroud)
但是
unittest
{
auto x = [1, 2, 3, 4, 5];
zipWith!((a, b) => a + b)(x, x);
}
Run Code Online (Sandbox Code Playgroud)
失败,错误
template algorithm_ex.zipWith cannot deduce function from argument types !((a, b) => a + b)(int[], int[]), candidates are: (d-dmd-unittest)
algorithm_ex.zipWith(fun, Ranges...)(Ranges ranges) if (Ranges.length && allSatisfy!(isInputRange, Ranges))
Run Code Online (Sandbox Code Playgroud)
而且我不明白为什么.有线索吗?
更新:
在CyberShadows很好的回答后,我现在有了
import std.traits: allSatisfy; …Run Code Online (Sandbox Code Playgroud) 如果一个文件位于由Subversion repo支持的目录中,该目录以其中任何一个trunk或branches/X如何在模式行中显示trunk或X显示为与Git支持的文件中显示的相似SVN-trunk或SVN-X类似Git-master.
在使用或时,是否有一种方便且功能性(类似with-...)的临时修改环境变量的方法?shell-comandstart-process
提前谢谢,Per
emacs shell temporary environment-variables convenience-methods
是否存在连接两个或更多个的高阶范围模式InputRanges?
就像是
foreach (e; a) {
// do stuff with e
}
foreach (e; b) {
// do stuff with e
}
...
Run Code Online (Sandbox Code Playgroud)
应改为写成
foreach (e; someMagic(a, b, ...)) {
// do stuff with e
}
Run Code Online (Sandbox Code Playgroud) 有没有人想过在D中实现某种自动数据(对象)持久性?我对这个问题的理想解决方案是:
@persistent int x = 1;
Run Code Online (Sandbox Code Playgroud)
这对于静态变量大多数都是无效的,但动态变量也是可能的.
这些变量将存储在键值存储数据库中.键可以是基于范围变量名称和类型的指纹摘要加上当前加载的代码的一些摘要.
d ×5
emacs ×3
c++ ×2
range ×2
buffer ×1
clang ×1
executable ×1
filesystems ×1
gcc ×1
git ×1
iterator ×1
list ×1
lock-free ×1
modeline ×1
module ×1
object ×1
overhead ×1
persistence ×1
python ×1
redundancy ×1
reflection ×1
shell ×1
svn ×1
tbb ×1
temporary ×1