首先,我是LLVM通行证的新手.
我试图在转换过程之后(使用C++ API)向LLVM中的指令添加元数据.我打算存储此信息以供工具链中的其他工具使用.我有两个问题.
我希望我存储的信息作为元数据提供给另一个工作在LLVM IR上的工具.元数据是个好主意吗?我打算将字符串存储为带有一些指令的元数据.
如果元数据是正确的方式,我需要一些帮助来创建元数据节点.我打算使用setMedata()函数将它附加到指令.setMetadata()的哪个变体是正确使用的变体.我不确定我的数据应该是哪个MDKind.我想创建一个MDString,将它附加到我的MDNode,然后用一条指令调用setMetadata().如果我想将元数据附加到函数内的指令,我应该在setMedata()中使用什么上下文.上下文与元数据的相关性是什么?
我尝试在论坛和llvm doxygen文档中阅读了很多讨论,但我没有得到一个清晰而完整的答案来回答我的所有问题.我感谢您的帮助或一些可以帮助我理解这一点的材料.
我是Windows下的C++编程新手.我试图cuobjdump
用C++代码执行命令,使用system()
函数:
system("C:\\program files\\nvidia gpu computing...\\cuobjdump.exe --dump-cubin C:\\..\\input.exe");
Run Code Online (Sandbox Code Playgroud)
输出:
Usage : cuobjdump [options] <file>
Run Code Online (Sandbox Code Playgroud)
接下来是cuobjdump的选项列表.
当我执行这个程序时,我总是得到命令行中显示的cuobjdump帮助选项.就像系统调用不解析文件名一样.我究竟做错了什么?使用createprocess时,我得到相同的结果.这些选项--dump-cubin
会产生错误,就好像我输入错误一样.
如果
n
以非递减顺序给出成对的数字和,则识别各个数字.如果总和已损坏打印-1
.
例:
i/p: 4 5 7 10 12 13
o/p: 1 3 4 9
Run Code Online (Sandbox Code Playgroud)
提示就足够了.
我需要根据已加载的进程在dll中做一些事情。因此,相对于Windows编程而言,我还是比较陌生的,我需要帮助弄清楚如何找到加载当前dll的exe。到目前为止,我一直在对exe文件名进行硬编码,这是最愚蠢的事情:D
1)有人建议使用GetModuleFileName()
功能。但这似乎使我的应用程序崩溃了(我使用0作为模块句柄)。我什么也没做。我使用以下语法
GetModuleFileName(0,&fileName,MAX_PATH)
编辑:我从这里了解到,我无法通过此调用获取.exe名称,因为它仅返回dll名称:(
2)在DllMain中这样做是个好主意吗?我知道DllMain并不是处理复杂事物的地方。我也了解与加载程序锁相关的问题。我所需要的只是查找父进程的名称。
感谢您的宝贵时间!
添加:我尝试在获取父进程ID后使用GetProcessImageFileName。我收到访问冲突错误。当我尝试调试时,我注意到openProcess调用将我的结果参数(图像文件路径-LPTSTR)留为错误的指针。
GetProcessImageFileName调用返回错误代码87-INVALID PARAMETER。
但是当前的进程ID是有效ID。
这是代码
LPTSTR fileName={0};
HANDLE hP=OpenProcess(PROCESS_QUERY_INFORMATION ,FALSE, processes[i]) ;
GetProcessImageFileName(hP,fileName,(DWORD)MAX_PATH+1);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么??
谢谢
编辑要点:
我发现我正在尝试在空闲进程上使用openprocess。(ie)我忘记了我的父进程可能因为我同步而可能正在等待我。因此,现在我得到了一个坏消息,即我无法使用OpenProcess打开一个空闲进程。我还能如何查看空闲进程的对象?(我肯定知道它是空闲的,因为我无法在快照中找到它。我不得不使用enumerateprocess来找到它的ID;但是我确实使用快照中的普通进程枚举来首先找到父进程ID)
我想了解如何在cuda运行时API应用程序中创建cuda上下文并与内核相关联?
我知道它是由驱动程序API在引擎盖下完成的.但我想了解创作的时间表.
首先我知道cudaRegisterFatBinary是第一个cuda api调用,它在运行时注册了一个fatbin文件.接下来是一些cuda函数注册API,它们在驱动程序层中调用cuModuleLoad.但是如果我的Cuda运行时API应用程序调用cudaMalloc,那么如何将指针提供给与上下文相关联的函数,我相信应该事先创建它.如何获得这个已经创建的上下文的句柄并将未来的运行时API调用与它相关联?请揭开内部运作的神秘面纱.
引用NVIDIA的文档
CUDA运行时API调用在绑定到当前主机线程的CUDA驱动程序API CUcontext上运行.
如果在需要CUcontext的CUDA运行时API调用时没有绑定到当前线程的CUDA驱动程序API CUcontext,则CUDA运行时将在执行调用之前隐式创建新的CUcontext.
如果CUDA运行时创建CUcontext,则将使用CUDA运行时API函数cudaSetDevice,cudaSetValidDevices,cudaSetDeviceFlags,cudaGLSetGLDevice,cudaD3D9SetDirect3DDevice,cudaD3D10SetDirect3DDevice和cudaD3D11SetDirect3DDevice指定的参数创建CUcontext.请注意,如果在CUcontext绑定到当前主机线程时调用它们,则这些函数将失败并使用cudaErrorSetOnActiveProcess.
CUcontext的生命周期由引用计数机制管理.CUcontext的引用计数最初设置为0,并通过cuCtxAttach递增并递减cuCtxDetach.
如果CUDA运行时创建了CUcontext,则CUDA运行时将减少函数cudaThreadExit中该CUcontext的引用计数.如果CUcontext由CUDA驱动程序API创建(或由CUDA运行时API库的单独实例创建),则CUDA运行时将不会递增或递减该CUcontext的引用计数.
所有CUDA运行时API状态(例如,全局变量的地址和值)都与其基础CUcontext一起传播.特别是,如果CUcontext从一个线程移动到另一个线程(使用cuCtxPopCurrent和cuCtxPushCurrent),那么所有CUDA Runtime API状态也将移动到该线程.
但我不明白的是cuda运行时如何创建上下文?用于此的API调用是什么?nvcc编译器是否在编译时插入一些API调用来执行此操作,还是完全在运行时完成?如果前者是真的那么运行时API用于此上下文管理?后来的确如何完成呢?
如果上下文与主机线程相关联,我们如何访问此上下文?它是否自动与线程处理的所有变量和指针引用相关联?
最终如何在上下文中完成模块加载?
我是LLVM的新手.
我正在尝试写一个llvm Pass来执行类似于污点分析的事情.在我的努力中,我需要遍历特定预定义变量的Def-use链.例如,C程序的dis汇编代码如下
@someVar = external global %struct.something
Run Code Online (Sandbox Code Playgroud)
这是在函数上面找到的,我想在我的函数中找到这个@someVar的所有用法.我该怎么做?我开始写一个函数传递.但是如何获得此特定标识符的Def Use链?
我在LLVM手册http://llvm.org/docs/ProgrammersManual.html#iterate_chains中找到了这个.
但我不确定如何在这种情况下使用它.
PS对不起,如果我的问题模糊或天真.我是新手,我不知道哪些信息是相关的.
我想在我的C++程序中从一个dll调用一个纯C风格的函数.我尝试使用reinterpret_cast
to来转换我的函数指针,__cdecl
并且仍然保持调用约定_stdcall
.我是Windows C++编程的新手.
从评论中编辑代码
reinterpret_cast< Error ( __cdecl*)(int,int)> (GetProcAddress(Mydll::GetInstance()->ReturnDLLInstance(), "add"))(1,10)
Run Code Online (Sandbox Code Playgroud)
是我的电话.实际的函数语法似乎已声明为
Error __cdecl add(int,int);
Run Code Online (Sandbox Code Playgroud)
调试器抛出错误运行时检查失败#0.我在Windows-C++工作
我是LLVM的新手.我听说clang支持CUDA.如何使用clang编译CUDA?我是否必须进行一些配置更改或包含任何特定的头文件?我在网上找不到任何相关信息.有可能吗?
现在当我尝试用clang编译一个虚拟cuda程序时
clang -I /usr/local/cuda/include filename.cu
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
unknown type name '__global__'
__global__ void nothing(int *A)
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!顺便说一句,我在mac中运行它.