嗨,
我编译了一个CUDA共享库,但无法将其与使用它的主程序链接.我用gcc编译主程序.
代码:
simplemain.c
#include <stdio.h>
#include <stdlib.h>
void fcudadriver();
int main()
{
printf("Main \n");
fcudadriver();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
test.cu
__global__ void fcuda()
{
}
void fcudadriver()
{
fcuda<<<1,1>>>();
}
Run Code Online (Sandbox Code Playgroud)
我编译test.cu为 - >它的工作原理
nvcc --compiler-options '-fPIC' -o libtest.so --shared test.cu
Run Code Online (Sandbox Code Playgroud)
我编译simplemain.c为--->它给出错误:(
gcc simplemain.c -L. -ltest
/tmp/ccHnB4Vh.o:simplemain.c:function main: error: undefined reference to 'fcudadriver'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud) 我试图理解JVM如何在内部实现原始类型的数组,如 int []
我的问题分为两部分:
1 - 它是否在内部使用ByteBuffer?我在哪里可以找到源代码,然后根据我的需要进行更改(以创建我自己的修改后的JVM).
2 - 有没有办法欺骗javac不使用内置实现,int []而是使用库中提供的实现,比如classpath -cp?这可能吗?怎么样?
我的动机是int []在JVM(使用allocateDirect())之外的内存中声明它,并从本机JNI代码访问它.这应该避免内存复制开销.
-B
早期printf不支持,我们要么使用模拟器运行 CUDA 程序,要么来回复制变量并在主机端打印。
既然 CUDA(arch 2 及更高版本)支持,printf我很想知道这是如何工作的?我的意思printf是屏幕上的GPU 内部如何?计算能力 1 的限制因素是什么?
我已经尝试了各种各样的缺点组合并附加产生'(5.(5))但我不能.有什么办法吗?