因此在java中,初始化接口(如集合或列表)的方法是创建实现它的类的实例,例如:
Collection<Object> moo = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
如果我想在稍后的代码中指定一个实现,我想通过创建另一个类来实现这一点:
class ListList extends ArrayList{
}
Run Code Online (Sandbox Code Playgroud)
然后使用.初始化变量
Collection<Object> moo = new ListList();
Run Code Online (Sandbox Code Playgroud)
然后,如果我想稍后更改实现,那么所需要的就是更改ListList扩展的内容.
所以,这里有一个问题......是否有更好的方法(我还是觉得我对这类事情缺乏经验).
这只是我注意到的事情,如果有理由的话,我很好奇.
使用Nvidia的nvcc编译器从Ubuntu 14.04上的cuda 7.0工具包编译一些标准的helloworld代码会产生以下大小的可执行文件:
liang@liang-EX58-UD3R:~/Documents/cuda-test$ nvcc cudahello.cu -o cudahello
liang@liang-EX58-UD3R:~/Documents/cuda-test$ ls -lah cudahello
-rwxrwxr-x 1 liang liang 508K Jun 25 12:08 cudahello
Run Code Online (Sandbox Code Playgroud)
该程序只是一个简单的hello world程序,没有内核调用:
//cudahello.cu
#include <iostream>
int main(){
std::cout << "helloworld\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
另一方面,OpenCL更多是C++可执行文件的预期大小:
liang@liang-EX58-UD3R:~/Documents/opencl-test$ g++ -Wall -std=c++11 oclhello.cpp -lOpenCL -o oclhello
liang@liang-EX58-UD3R:~/Documents/opencl-test$ ls -lah oclhello
-rwxrwxr-x 1 liang liang 8.9K Jun 25 12:08 oclhello
Run Code Online (Sandbox Code Playgroud)
这也是一个简单的helloworld计划:
//oclhello.cpp
#include <CL/cl.h>
#include <iostream>
int main(){
std::cout << "helloworld";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
CUDA可执行文件是否有相当大的原因?我发现即使在C/C++程序中使用OpenCL函数,可执行文件也不会增长到CUDA可执行文件的大小.