当我需要固定(页面锁定)内存时,我试图弄清楚CUDA(或OpenCL实现)是否说实话.
我尝试cudaMallocHost并查看了/proc/meminfo值,Mlocked并且Unevictable都保持在0并且从不上升(/proc/<pid>/status报告VmLck也为0).我曾经使用mlock页面锁定内存,并且值按预期上升.
因此,这种行为的两个可能原因可能是:
所以实际问题是:当我使用CUDA分配页面锁定内存时,为什么我不能从操作系统中获取页面锁定内存的值?
另外:我在哪里可以得到正确的价值观如果不从/proc/meminfo或/proc/<pid>/status?
谢谢!
系统:Ubuntu 14.04.01 LTS; CUDA 6.5; Nvidida Driver 340.29; Nvidia Tesla K20c
我使用LLVM传递为输入代码添加了内在函数.我能够看到内部调用,但我无法弄清楚如何将代码编译到我的目标体系结构(x86_64).我正在运行以下命令:
clang++ $(llvm-config --ldflags --libs all) ff.s -o foo
Run Code Online (Sandbox Code Playgroud)
但链接器抱怨未定义的引用:
/tmp/ff-2ada42.o: In function `fact(unsigned int)':
/home/rubens/Desktop/ff.cpp:9: undefined reference to `llvm.x86.sse3.mwait.i32.i32'
/tmp/ff-2ada42.o: In function `fib(unsigned int)':
/home/rubens/Desktop/ff.cpp:16: undefined reference to `llvm.x86.sse3.mwait.i32.i32'
/home/rubens/Desktop/ff.cpp:16: undefined reference to `llvm.x86.sse3.mwait.i32.i32'
/home/rubens/Desktop/ff.cpp:16: undefined reference to `llvm.x86.sse3.mwait.i32.i32'
Run Code Online (Sandbox Code Playgroud)
尽管使用llvm-config中的ldflags,但编译仍未进行.关于应该如何正确编译代码的任何想法?
要生成汇编代码,我已完成以下操作:
# Generating optimized code
clang++ $(llvm-config --cxxflags) -emit-llvm -c ff.cpp -o ff.bc
opt ff.bc -load path/to/mypass.so -mypass > opt_ff.bc
# Generating assembly
llc opt_ff.bc -o ff.s
Run Code Online (Sandbox Code Playgroud)
我目前正在使用llvm版本3.4.2; clang版本3.4.2(标签/ RELEASE_34/dot2-final); gcc版本4.9.2(GCC); 和Linux 3.17.2-1-ARCH x86_64.
编辑:添加内在的IR:
文件〜/ llvm/include/llvm/IR/IntrinsicsX86.td:
...
589 …Run Code Online (Sandbox Code Playgroud) 从这个问题开始(是否可以找出lambda的参数类型和返回类型?)我使用function_traits了很多建议.然而,随着C++ 14的多态性lambda已经到来,他们给了我一个艰难的时间.
template <typename T>
struct function_traits
: public function_traits<decltype(&T::operator())>
{};
// For generic types, directly use the result of the signature of its 'operator()'
template <typename ClassType, typename ReturnType, typename... Args>
struct function_traits<ReturnType(ClassType::*)(Args...) const>
// we specialize for pointers to member function
{
enum { arity = sizeof...(Args) };
// arity is the number of arguments.
typedef ReturnType result_type;
template <size_t i>
struct arg
{
typedef typename std::tuple_element<i, std::tuple<Args...>>::type type;
// the i-th argument is …Run Code Online (Sandbox Code Playgroud)