如何编译包含offload的汇编文件到mic

时间:2014-02-27 09:48:09

标签: assembly intel intel-mic

我写了一个名为“test.c”的C文件,其中包含对麦克风的卸载操作。然后我使用命令“icc -S test.c”将其编译为汇编文件。这产生了两个名为“test.s”和“testMIC.s”的汇编文件。当我继续将它们编译为可执行文件时,会出现以下错误。

  1. 使用commad“icc test.s”

    /tmp/iccG8ZTVA.o:在函数main': test.c:(.text+0x30): undefined reference to __ kmpc_begin'中 test.c :(。text + 0x6f):对__offload_target_acquire' test.c:(.text+0x11f): undefined reference to __ offload_offload'的未定义引用 test.c :(。text + 0x15b):未定义引用`__kmpc_end'

  2. 使用commad“icc testMIC.s”

    /tmp/icc7qv8qX.o:在函数__offload_entry_test_c_10main': test.c:(.text+0x1d): undefined reference to __ intel_new_proc_init_R' test.c :(。text + 0xd5):对__offload_target_enter' test.c:(.text+0x111): undefined reference to __ offload_target_leave'的未定义引用 /tmp/icc7qv8qX.o:在函数main': test.c:(.text+0x140): undefined reference to __ intel_new_proc_init_R'

  3. 使用commad“icc test.s testMIC.s”

    /tmp/iccEOtVAs.o:在函数foo': test.c:(.text+0x170): multiple definition of foo'中 /tmp/icczmGFBD.o:test.c:(.text+0x170):首先在这里定义 /tmp/iccEOtVAs.o:在函数main': test.c:(.text+0x128): multiple definition of main'中 /tmp/icczmGFBD.o:test.c:(.text+0x0):首先在这里定义 /tmp/icczmGFBD.o:在函数main': test.c:(.text+0x30): undefined reference to __ kmpc_begin'中 test.c :(。text + 0x6f):对__offload_target_acquire' test.c:(.text+0x11f): undefined reference to __ offload_offload'的未定义引用 test.c :(。text + 0x15b):对__kmpc_end' /tmp/iccEOtVAs.o: In function __ offload_entry_test_c_10main'的未定义引用: test.c :(。text + 0x1d):对__intel_new_proc_init_R' test.c:(.text+0xd5): undefined reference to __ offload_target_enter'的未定义引用 test.c :(。text + 0x111):对__offload_target_leave' /tmp/iccEOtVAs.o: In function main'的未定义引用: test.c :(。text + 0x140):未定义引用`__intel_new_proc_init_R'

  4. 有没有人可以帮我解决这个问题?

    test.c:

    __attribute__((target(mic)))
    int foo(int a, int b){
        return a+b;
    }
    
    int main()
    {
        int c = 0;
        int a=1, b=2;
        #pragma offload target (mic)
        {
            c = foo(a, b);
        }
        printf("c: %d\n", c);
        return 0;
    }
    

1 个答案:

答案 0 :(得分:0)

使用命令

生成两个汇编文件test.s和testMIC.s

%icc -S test.c

您应该能够使用以下命令生成可执行文件a.out

%icc test.s

编译器检测到test.s有卸载代码,因此它搜索testMIC.s并链接它们以生成可以从主机运行的可执行文件a.out。

然而,发布" icc testMIC.s"是不正确的。也不是" icc test.s testMIC.s"