- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试让 Rinside
使用一些 CUDA 代码。我第一次尝试直接用 NVCC 编译它们,但是用 nvcc 处理 Rinside 是不可能的,所以现在我正在尝试另一种方式。
我用 g++
编译 Rinside 代码并获得目标文件 (.o)
然后用 nvcc 编译一些 CUDA 代码并获得另一个 .o
,然后将它们链接在一起,但出现一些“未引用错误”。
这是漂洗代码:
#include <RInside.h> // for the embedded R via RInside
extern "C"
void someCUDAcode();
int main(int argc, char *argv[]) {
RInside R(argc, argv); // create an embedded R instance
someCUDAcode();
exit(0);
}
这是 CUDA 代码:
#include <cuda.h>
#include <cuda_runtime.h>
#include <R.h>
__global__ void mykernel(int a){
int id = threadIdx.x;
int b = a;
b++;
id++;
}
extern "C"
void someCUDAcode() {
mykernel<<<1, 1>>>(1);
}
这是我的生成文件:
## and set R_HOME accordingly as an environment variable
R_HOME := $(shell R RHOME)
sources := $(wildcard *.cpp)
programs := $(sources:.cpp=)
## include headers and libraries for R
RCPPFLAGS := $(shell $(R_HOME)/bin/R CMD config --cppflags)
RLDFLAGS := $(shell $(R_HOME)/bin/R CMD config --ldflags)
RBLAS := $(shell $(R_HOME)/bin/R CMD config BLAS_LIBS)
RLAPACK := $(shell $(R_HOME)/bin/R CMD config LAPACK_LIBS)
## if you need to set an rpath to R itself, also uncomment
#RRPATH := -Wl,-rpath,$(R_HOME)/lib
## include headers and libraries for Rcpp interface classes
## note that RCPPLIBS will be empty with Rcpp (>= 0.11.0) and can be omitted
RCPPINCL := $(shell echo 'Rcpp:::CxxFlags()' | $(R_HOME)/bin/R --vanilla --slave)
##RCPPLIBS := $(shell echo 'Rcpp:::LdFlags()' | $(R_HOME)/bin/R --vanilla --slave)
## include headers and libraries for RInside embedding classes
RINSIDEINCL := $(shell echo 'RInside:::CxxFlags()' | $(R_HOME)/bin/R --vanilla --slave)
RINSIDELIBS := $(shell echo 'RInside:::LdFlags()' | $(R_HOME)/bin/R --vanilla --slave)
## compiler etc settings used in default make rules
ifeq ($(HOST_OS),darwin)
CXX := clang++ $(shell $(R_HOME)/bin/R CMD config CXX)
else
CXX := $(shell $(R_HOME)/bin/R CMD config CXX)
endif
CPPFLAGS := -Wall $(shell $(R_HOME)/bin/R CMD config CPPFLAGS)
CXXFLAGS := $(RCPPFLAGS) $(RCPPINCL) $(RINSIDEINCL) $(shell $(R_HOME)/bin/R CMD config CXXFLAGS)
LDLIBS := $(RLDFLAGS) $(RRPATH) $(RBLAS) $(RLAPACK) $(RCPPLIBS) $(RINSIDELIBS)
#########################################
CUDA_HOME = /usr/local/cuda-9.1
# This defines what the shared object libraries will be
PKG_LIBS= -L/usr/local/cuda-9.1/lib64 -Wl,-rpath,/usr/local/cuda-9.1/lib64 -lcudart -d
NVCC = $(CUDA_HOME)/bin/nvcc
CUDA_INC = $(CUDA_HOME)/include
CUDA_LIB = $(CUDA_HOME)/lib64
R_INC = /usr/share/R/include
LIBS = -lcudart -d
NVCC_FLAGS = -Xcompiler "-fPIC" -I$(R_INC)
##-gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35
### Define objects
cu_sources := $(wildcard *cu)
cu_sharedlibs := $(patsubst %.cu, %.o,$(cu_sources))
cpp_sources := $(wildcard *.cpp)
cpp_sharedlibs := $(patsubst %.cpp, %.o, $(cpp_sources))
OBJECTS = $(cu_sharedlibs) $(cpp_sharedlibs)
all : test.exe
test.exe: $(OBJECTS)
%.o: %.cpp $(cpp_sources)
$(CXX) $< -c -fPIC -I$(CPPFLAGS) $(CXXFLAGS) $(LDLIBS)
%.o: %.cu $(cu_sources)
$(NVCC) $(NVCC_FLAGS) -I$(CUDA_INC) $< -c
当我“制作”makefile 正确编译所有内容时,我获得了我的 .o
文件,但是无法创建可执行文件。当我尝试用“nvcc
test.o
cuda.o
”编译它们时,我得到这个错误:
pesco@pesco-PC:~/Scrivania/PURECUDA$ nvcc -o someCUDAcode.o test.o
test.o: nella funzione "Rcpp::Rstreambuf<false>::xsputn(char const*, long)":
/home/pesco/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/include/Rcpp/iostream/Rstreambuf.h:56: riferimento non definito a "REprintf"
test.o: nella funzione "Rcpp::Rstreambuf<false>::sync()":
/home/pesco/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/include/Rcpp/iostream/Rstreambuf.h:80: riferimento non definito a "R_FlushConsole"
test.o: nella funzione "Rcpp::Rstreambuf<true>::sync()":
/home/pesco/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/include/Rcpp/iostream/Rstreambuf.h:76: riferimento non definito a "R_FlushConsole"
test.o: nella funzione "Rcpp::Rstreambuf<true>::xsputn(char const*, long)":
/home/pesco/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/include/Rcpp/iostream/Rstreambuf.h:52: riferimento non definito a "Rprintf"
/home/pesco/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/include/Rcpp/iostream/Rstreambuf.h:52: riferimento non definito a "Rprintf"
test.o: nella funzione "Rcpp::Rstreambuf<false>::xsputn(char const*, long)":
/home/pesco/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/include/Rcpp/iostream/Rstreambuf.h:56: riferimento non definito a "REprintf"
test.o: nella funzione "main":
/home/pesco/Scrivania/PURECUDA/test.cpp:18: riferimento non definito a "RInside::RInside(int, char const* const*, bool, bool, bool)"
/home/pesco/Scrivania/PURECUDA/test.cpp:19: riferimento non definito a "someCUDAcode"
/home/pesco/Scrivania/PURECUDA/test.cpp:18: riferimento non definito a "RInside::~RInside()"
collect2: error: ld returned 1 exit status
但我不知道如何处理这个错误。我怎样才能正确地将它们链接在一起?谢谢:)
我正在与:
CUDA 9.1:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2017 NVIDIA Corporation
Built on Fri_Nov__3_21:07:56_CDT_2017
Cuda compilation tools, release 9.1, V9.1.85
NVIDIA 驱动程序:
pesco@pesco-PC:~/Scrivania/PURECUDA$ nvidia-smi
Mon Jul 23 11:16:50 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.48 Driver Version: 390.48 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GT 740M Off | 00000000:01:00.0 N/A | N/A |
| N/A 58C P8 N/A / N/A | 110MiB / 2004MiB | N/A Default |
+-------------------------------+----------------------+----------------------+
Ubuntu 16.04 长期支持版G++: g++ (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609
我希望我没说错,对不起我的英语!
最佳答案
正如@talonmies 建议的那样,您只需在使用 g++ 编译时添加 CUDA 目标文件和库即可解决“未引用错误”,确切地说,我在 RInside 的示例文件夹中获取了一个新的 makefile,然后将其添加到 LDLIBS .o 和 .so 的路径我刚刚从之前的编译中获得并且一切正常,我不知道它是否正常工作但是,至少我们有一个可执行文件!确切地说,这是新的 makefile:
R_HOME := $(shell R RHOME)
sources := $(wildcard *.cpp)
programs := $(sources:.cpp=)
## include headers and libraries for R
RCPPFLAGS := $(shell $(R_HOME)/bin/R CMD config --cppflags)
RLDFLAGS := $(shell $(R_HOME)/bin/R CMD config --ldflags)
RBLAS := $(shell $(R_HOME)/bin/R CMD config BLAS_LIBS)
RLAPACK := $(shell $(R_HOME)/bin/R CMD config LAPACK_LIBS)
## if you need to set an rpath to R itself, also uncomment
#RRPATH := -Wl,-rpath,$(R_HOME)/lib
## include headers and libraries for Rcpp interface classes
## note that RCPPLIBS will be empty with Rcpp (>= 0.11.0) and can be omitted
RCPPINCL := $(shell echo 'Rcpp:::CxxFlags()' | $(R_HOME)/bin/R --vanilla --slave)
RCPPLIBS := $(shell echo 'Rcpp:::LdFlags()' | $(R_HOME)/bin/R --vanilla --slave)
##NVCC HEADER AND DECLARATION TO CREATE THE CUDA OBJECT FILE
## include headers and libraries for RInside embedding classes
RINSIDEINCL := $(shell echo 'RInside:::CxxFlags()' | $(R_HOME)/bin/R --vanilla --slave)
RINSIDELIBS := $(shell echo 'RInside:::LdFlags()' | $(R_HOME)/bin/R --vanilla --slave)
## compiler etc settings used in default make rules
CXX := $(shell $(R_HOME)/bin/R CMD config CXX)
CPPFLAGS := -Wall $(shell $(R_HOME)/bin/R CMD config CPPFLAGS)
CXXFLAGS := $(RCPPFLAGS) $(RCPPINCL) $(RINSIDEINCL) $(shell $(R_HOME)/bin/R CMD config CXXFLAGS)
LDLIBS := $(RLDFLAGS) $(RRPATH) $(RBLAS) $(RLAPACK) $(RCPPLIBS) $(RINSIDELIBS) /home/pesco/Scrivania/NEWTRY/someCUDAcode.o /usr/local/cuda/lib64/libcudart.so
all: $(programs)
@test -x /usr/bin/strip && strip $^
run: $(programs)
clean:
rm -vf $(programs)
rm -vrf *.dSYM
和新的.cpp:
#include <RInside.h>
extern "C"
void someCUDAcode();
// for the embedded R via RInside
int main(int argc, char *argv[]) {
RInside R(argc, argv); // create an embedded R instance
someCUDAcode();
R["txt"] = "Hello, world!\n"; // assign a char* (string) to 'txt'
R.parseEvalQ("cat(txt)"); // eval the init string, ignoring any returns
exit(0);
}
这是我做“make”得到的:
g++ -I/usr/share/R/include -I/home/pesco/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/include -I/home/pesco/R/x86_64-pc-linux-gnu-library/3.2/RInside/include -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g -Wall rinside_sample0.cpp -Wl,--export-dynamic -fopenmp -L/usr/lib/R/lib -lR -lpcre -llzma -lbz2 -lz -lrt -ldl -lm -lblas -llapack -L/home/pesco/R/x86_64-pc-linux-gnu-library/3.2/RInside/lib -lRInside -Wl,-rpath,/home/pesco/R/x86_64-pc-linux-gnu-library/3.2/RInside/lib /home/pesco/Scrivania/NEWTRY/someCUDAcode.o /usr/local/cuda/lib64/libcudart.so -o rinside_sample0
并运行可执行文件:
pesco@pesco-PC:~/Scrivania/NEWTRY$ ./rinside_sample0
Hello, world!
关于c++ - 使用 nvcc (CUDA-RINSIDE) 正确链接目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51475409/
我有一个网站,并且我使用 javascript sdk 添加了“点赞”按钮。 这是代码 (function(d, s, id) { var js, fjs = d.g
我知道 HTML 是逐行读取的。当您链接多个 css 文件(如规范化文件和样式表文件)时,由于 CSS 重要性特异性和源顺序,样式表文件应链接在规范化文件之后。看起来这不会影响链接的 JavaScri
我正在使用官方 Bootstrap site 提供的 CDN 链接在我的网络应用程序中使用面板进行测试 在彻底检查我的代码后,面板没有显示。 但是我在 SO 上看到了类似的帖子并且 CDN 链接不同
这里是编码初学者。我正在尝试为我的移动设备网站设置断点,以便我的网站适合小屏幕。我只是想检查如果我缩小视口(viewport)的宽度,背景颜色是否会改变,但没有发生任何变化。也许我只是对一个简单的错误
举一个我想要的例子,想象一下这个字符串: $text = 'lorem ipsum About us lorem ipsum'; 如果此字符串包含一个 href 以 / 开头的 anchor 链接,则
如何链接到 LaTeX 文档的另一部分或子部分?这种链接的常规范式是什么,像[链接名称]那样写,或者像网页超链接那样写? 最佳答案 链接到另一个部分需要您的部分进行一些额外的标记。要使用的命令是: \
我有一个订单表,其中包含订单号、客户 ID 和代理 ID。然后有一个带有 id 的客户表和一个带有 id 的代理表。 我需要获取所有具有来自代理 ID 'a03' 和代理 ID 'a05' 的订单的客
假设我有: dic = {"z":"zv", "a":"av"} ## Why doesn't the following return a sorted list of keys? keys = d
我在尝试链接到外部库时得到了一些奇怪的结果。如果我从命令行运行以下命令: gcc fftwTest.c -I../extlib/fftw-3.3.5-dll32 -L../extlib/fftw-3.
我认为我没有正确理解 jQuery 链接。我正在遍历一个数组并尝试将 div 元素添加到我的包装器 CSS 类中,每个 div 元素都有一个“click”类和自定义 css top 和 left 属性
HTML 使用超级链接与网络上的另一个文档相连。几乎可以在所有的网页中找到链接。点击链接可以从一张页面跳转到另一张页面。 HTML 超链接(链接) HTML使用标签 a 来设置超文本链接。 超链
这个问题在这里已经有了答案: How do I link to part of a page? (hash?) (7 个答案) Scroll Automatically to the Bottom
我想创建一个 Docker Swarm 集群,运行一个 Elasticsearch 实例、一个 MongoDB 实例和一个 grails 应用程序,每个都在单独的机器上。我正在使用 Docker Ma
我正在尝试将 CakePHP HTML Linker 用于以下代码 Add Cuisine 由于 span 标签需要在 a 标签内。我无法根据需要获得输出。关于如何完成它的任何建议? 最佳答案 禁用链
大家好, 我最近开发了一个应用程序,很快就会提交到 App Store。我想免费提交这个应用程序,并想知道我是否可以实现一个带有 PayPal 捐赠标志的按钮,上面基本上写着“捐赠用于开发”或与此相关
我想尝试在 dlang 中使用 libuv。我下载了这样的 dlang 绑定(bind): git clone git@github.com:tamediadigital/libuv.git 现在我接
我有一个节点(节点 a),各种其他节点(节点 b/c/d/e)与之引用。 我可以创建一个带有参数的 View 作为我正在查看的节点(节点 a),并获取引用该节点的节点列表。 基本上在节点 a 查看节点
我正在尝试建立一个常见问题页面,上面有目录,下面有答案。我想点击目录中的一个问题,并在同一页面上链接到相应的答案。我如何在 CakePHP 中使用 $this->Html->link() 执行此操作方
在 WooCommerce 3.0+ 中,我使用 js 创建了一些选项卡,每个选项卡中包含来自不同类别的产品。我已经设法修改了简单产品的添加到购物车链接,其中点击了 addtocart 按钮它进入下一
Delphi 2007/2009 奇怪的问题在这里: 根据设计时定义的组件属性,是否可以在链接中包含文件或保留文件? 示例:如果我将 SomeProperty 保留为真,则在编译时,单元 SomeUn
我是一名优秀的程序员,十分优秀!