C++ 当生产线已经平衡时,为什么asm会期望()呢

C++ 当生产线已经平衡时,为什么asm会期望()呢,c++,C++,我试图建立并运行金府重拍的演示 运行windows 10、cmake3.14.3和MS visual studio 2017 我在构建这些特定行时遇到错误(device.hpp line 132): template\uuu kf\u device\uuuu无效kfusion::device::gmem::StCs(const-TsdfVolume::elem\u type&val,TsdfVolume::elem\u type*&ptr) { 短cx=val.x,cy=val.y; asm(“

我试图建立并运行金府重拍的演示

运行windows 10、cmake3.14.3和MS visual studio 2017

我在构建这些特定行时遇到错误(device.hpp line 132):

template\uuu kf\u device\uuuu无效kfusion::device::gmem::StCs(const-TsdfVolume::elem\u type&val,TsdfVolume::elem\u type*&ptr)
{
短cx=val.x,cy=val.y;
asm(“st.global.cs.v2.u16[%0],{%1,%2};”:“=”\u asm\u PTR\u(PTR):“h”(重新解释投射(cx)),“h”(重新解释投射(cy));
}
错误读取:应为“)”

()似乎是平衡的,所以我不确定是什么导致了这个问题。我环顾四周,看到一些人在if语句中遇到了需要()的错误,但我认为这不是问题所在,原因有两个。 1) 我把()放在任何可能需要它的地方 2) 注释完这一行后,代码成功构建,使我相信错误就在这一行。(显然,注释掉并不是一个解决方案,因为我需要行来成功执行)


<>我对ASM命令没有太多的经验,并且会很感激如何继续执行。

< P>什么是造成这个问题的简单事实是GCC代码> ASM<代码>语法,上面的代码使用的是非标准的,因此,VisualC++没有理解。
asm
声明的“官方”语法为:

属性说明符seqopt
asm
(字符串文字)

除此之外,
asm
声明只是一种声明,这意味着标准中没有要求编译器必须支持
asm
声明。如果编译器确实支持
asm
声明,则其含义是实现定义的。VisualC++中的<代码> ASM<代码>声明是编译器将默默地吃它,但是

[…]不会生成任何有意义的代码。[……]

VisualC++有自己的非标准,但语法完全不同,内联汇编…< /P>


除了以上所有内容外,上面代码中的程序集似乎是,这意味着您试图用VisualC++编写CUDA GPU代码。这显然是行不通的。您需要使用支持CUDA的编译器编译CUDA代码。最有可能的是,你的构建配置有问题……

导致这个问题的是一个简单的事实,即GCC代码> ASM<代码>语法,上面的代码使用的是非标准的,因此,VisualC++没有理解。
asm
声明的“官方”语法为:

属性说明符seqopt
asm
(字符串文字)

除此之外,
asm
声明只是一种声明,这意味着标准中没有要求编译器必须支持
asm
声明。如果编译器确实支持
asm
声明,则其含义是实现定义的。VisualC++中的<代码> ASM<代码>声明是编译器将默默地吃它,但是

[…]不会生成任何有意义的代码。[……]

VisualC++有自己的非标准,但语法完全不同,内联汇编…< /P>


除了以上所有内容外,上面代码中的程序集似乎是,这意味着您试图用VisualC++编写CUDA GPU代码。这显然是行不通的。您需要使用支持CUDA的编译器编译CUDA代码。很可能是您的生成配置有问题…

\uuuu kf\u设备\uuuu
是为实现保留的名称。不要在自己的代码中使用此类名称。首先为什么要使用内联asm?
\uuukf\u device\uuu
是为实现保留的名称。不要在自己的代码中使用这样的名称。为什么要首先使用内联asm?
    template<> __kf_device__ void kfusion::device::gmem::StCs(const TsdfVolume::elem_type& val, TsdfVolume::elem_type*& ptr)
    {
        short cx = val.x, cy = val.y;
        asm("st.global.cs.v2.u16 [%0], {%1, %2};" : "="_ASM_PTR_(ptr) : "h"(reinterpret_cast<ushort&>(cx)), "h"(reinterpret_cast<ushort&>(cy)));
    }