小编Mic*_*idl的帖子

CUDA和固定(页面锁定)内存根本没有页面锁定?

当我需要固定(页面锁定)内存时,我试图弄清楚CUDA(或OpenCL实现)是否说实话.

我尝试cudaMallocHost并查看了/proc/meminfo值,Mlocked并且Unevictable都保持在0并且从不上升(/proc/<pid>/status报告VmLck也为0).我曾经使用mlock页面锁定内存,并且值按预期上升.

因此,这种行为的两个可能原因可能是:

  1. 我没有从CUDA API获取页面锁定内存,而cudaSuccess是假的
  2. CUDA绕过用于页面锁定内存的OS计数器,因为CUDA对linux内核有一定的魔力

所以实际问题是:当我使用CUDA分配页面锁定内存时,为什么我不能从操作系统中获取页面锁定内存的值?

另外:我在哪里可以得到正确的价值观如果不从/proc/meminfo/proc/<pid>/status

谢谢!

系统:Ubuntu 14.04.01 LTS; CUDA 6.5; Nvidida Driver 340.29; Nvidia Tesla K20c

c++ linux memory cuda

6
推荐指数
2
解决办法
1246
查看次数

使用LLVM传递添加内在函数

我使用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)

c++ linker llvm undefined-reference llvm-ir

6
推荐指数
1
解决办法
1724
查看次数

是否有可能找出多态C++ 14 lambda的参数类型和返回类型?

从这个问题开始(是否可以找出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)

c++ lambda metaprogramming template-meta-programming c++14

6
推荐指数
1
解决办法
371
查看次数